Version 2.8.0-dev.7.0

Merge commit '5f5e1db141e529a89973e6dfab95da5cb1f6a4d5' into dev
diff --git a/.packages b/.packages
index cdbd2cd..b6c666c 100644
--- a/.packages
+++ b/.packages
@@ -7,6 +7,7 @@
 # Please update this file if you add a package to DEPS or /pkg
 #
 _fe_analyzer_shared:pkg/_fe_analyzer_shared/lib
+_js_interop_checks:pkg/_js_interop_checks/lib
 analysis_server:pkg/analysis_server/lib
 analysis_server_client:pkg/analysis_server_client/lib
 analysis_tool:pkg/analysis_tool/lib
@@ -93,6 +94,7 @@
 source_maps:third_party/pkg/source_maps/lib
 source_span:third_party/pkg/source_span/lib
 stack_trace:third_party/pkg/stack_trace/lib
+stagehand:third_party/pkg/stagehand/lib
 status_file:pkg/status_file/lib
 stream_channel:third_party/pkg/stream_channel/lib
 string_scanner:third_party/pkg/string_scanner/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b4164fb..44cdce0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,17 +36,29 @@
   `package:js` interop specification must now be wrapped with a call to
   `allowInterop`. This behavior was always enforced by `dart2js`, but was not
   enforced consistently in `ddc`. It will now be enforced in both.
+* JS interop classes with an index operator are now static errors.
 
  [announcement]: https://github.com/dart-lang/sdk/issues/38994
 
+#### Dart2JS
+
+* JS interop classes with an index operator are now static errors instead of
+  causing invalid code in dart2js.
+* **Breaking Change**: The subtyping rule for generic functions is now more
+  forgiving. Corresponding type parameter bounds now only need to be mutual
+  subtypes rather than structurally equal up to renaming of bound type variables
+  and equating all top types.
+
 #### Linter
 
-The Linter was updated to `0.1.109`, which includes:
+The Linter was updated to `0.1.110`, which includes:
 
-* an improved `prefer_single_quotes` lint message
-* `unnecessary_finals` fixed to not flag fields
-* `unnecessary_lambdas` fixed to work with type arguments
-* (internal) migration to use analyzer `LinterContext.resolveNameInScope()` API
+* fixed flutter web plugin detection in `avoid_web_libraries_in_flutter`
+* new lint: `unnecessary_string_interpolations`
+* new lint: `missing_whitespace_between_adjacent_strings`
+* `avoid_unused_constructor_parameters` updated to ignore deprecated parameters
+* new lint: `no_runtimeType_toString`
+* miscellaneous doc fixes
 
 #### Pub
 
diff --git a/DEPS b/DEPS
index 48b36f5..d261291 100644
--- a/DEPS
+++ b/DEPS
@@ -39,7 +39,7 @@
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
-  "co19_rev": "6d84d8db719f2076e0c2bbc41db9297e803ab445",
+  "co19_rev": "5a3388d1f79cc3c61f9cdc1b3eaaa405bd62c882",
   "co19_2_rev": "368bfa9e877a2df003547f64bb17e30596af10c7",
 
   # As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision
@@ -102,7 +102,7 @@
   "intl_tag": "0.15.7",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "2.0.9",
-  "linter_tag": "0.1.109",
+  "linter_tag": "0.1.110",
   "logging_tag": "0.11.3+2",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
   "markdown_tag": "2.1.1",
@@ -134,6 +134,7 @@
   "source_maps_tag": "8af7cc1a1c3a193c1fba5993ce22a546a319c40e",
   "source_span_tag": "1.5.5",
   "stack_trace_tag": "1.9.3",
+  "stagehand_tag": "v3.3.6",
   "stream_channel_tag": "2.0.0",
   "string_scanner_tag": "1.0.3",
   "test_descriptor_tag": "1.1.1",
@@ -380,6 +381,8 @@
       "@" + Var("source_map_stack_trace_tag"),
   Var("dart_root") + "/third_party/pkg/stack_trace":
       Var("dart_git") + "stack_trace.git" + "@" + Var("stack_trace_tag"),
+  Var("dart_root") + "/third_party/pkg/stagehand":
+      Var("dart_git") + "stagehand.git" + "@" + Var("stagehand_tag"),
   Var("dart_root") + "/third_party/pkg/stream_channel":
       Var("dart_git") + "stream_channel.git" +
       "@" + Var("stream_channel_tag"),
@@ -476,7 +479,7 @@
     "packages": [
       {
         "package": "dart/cfe/dart2js_dills",
-        "version": "binary_version:29_37",
+        "version": "binary_version:38",
       }
     ],
     "dep_type": "cipd",
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index eab740f..a762485 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -5230,6 +5230,17 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeJsInteropIndexNotSupported =
+    messageJsInteropIndexNotSupported;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageJsInteropIndexNotSupported = const MessageCode(
+    "JsInteropIndexNotSupported",
+    message:
+        r"""JS interop classes do not support [] and []= operator methods.""",
+    tip: r"""Try replacing with a normal method.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(String name)> templateLabelNotFound = const Template<
         Message Function(String name)>(
@@ -6408,6 +6419,53 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateNullableTearoffError =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Can't tear off method '#name' from a potentially null value.""",
+        withArguments: _withArgumentsNullableTearoffError);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeNullableTearoffError =
+    const Code<Message Function(String name)>(
+  "NullableTearoffError",
+  templateNullableTearoffError,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNullableTearoffError(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeNullableTearoffError,
+      message:
+          """Can't tear off method '${name}' from a potentially null value.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateNullableTearoffWarning =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Tearing off method '#name' from a potentially null value.""",
+        withArguments: _withArgumentsNullableTearoffWarning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeNullableTearoffWarning =
+    const Code<Message Function(String name)>(
+        "NullableTearoffWarning", templateNullableTearoffWarning,
+        severity: Severity.warning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNullableTearoffWarning(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeNullableTearoffWarning,
+      message:
+          """Tearing off method '${name}' from a potentially null value.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeObjectExtends = messageObjectExtends;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6548,6 +6606,17 @@
     message: r"""An operator can't have optional parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeOperatorWithTypeParameters =
+    messageOperatorWithTypeParameters;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageOperatorWithTypeParameters = const MessageCode(
+    "OperatorWithTypeParameters",
+    analyzerCodes: <String>["TYPE_PARAMETER_ON_OPERATOR"],
+    message: r"""Types parameters aren't allowed when defining an operator.""",
+    tip: r"""Try removing the type parameters.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateOverriddenMethodCause =
     const Template<Message Function(String name)>(
         messageTemplate: r"""This is the overridden method ('#name').""",
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_in_from_mixed/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_in_from_mixed/main.dart
new file mode 100644
index 0000000..07fa2ca
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_in_from_mixed/main.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+import 'opt_out.dart';
+
+/*class: Nnbd:Nnbd,Object*/
+abstract class Nnbd {
+  /*member: Nnbd.mandatory:void Function(int!)!*/
+  void mandatory(int param);
+  /*member: Nnbd.optional:void Function(int?)!*/
+  void optional(int? param);
+}
+
+/*class: Both1:Both1,Legacy,Nnbd,Object*/
+class Both1 implements Legacy, Nnbd {
+  /*member: Both1.mandatory:void Function(int!)!*/
+  void mandatory(param) {}
+  /*member: Both1.optional:void Function(int?)!*/
+  void optional(param) {}
+}
+
+/*class: Both2:Both2,Legacy,Nnbd,Object*/
+class Both2 implements Nnbd, Legacy {
+  /*member: Both2.mandatory:void Function(int!)!*/
+  void mandatory(param) {}
+  /*member: Both2.optional:void Function(int?)!*/
+  void optional(param) {}
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_in_from_mixed/opt_out.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_in_from_mixed/opt_out.dart
new file mode 100644
index 0000000..26a4379
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_in_from_mixed/opt_out.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=false*/
+
+// @dart = 2.5
+
+/*class: Legacy:Legacy,Object*/
+abstract class Legacy {
+  /*member: Legacy.mandatory:void Function(int*)**/
+  void mandatory(int param);
+  /*member: Legacy.optional:void Function(int*)**/
+  void optional(int param);
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_out_from_mixed/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_out_from_mixed/main.dart
new file mode 100644
index 0000000..4a40b97
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_out_from_mixed/main.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=false*/
+
+// @dart = 2.5
+import 'opt_in.dart';
+
+/*class: Legacy:Legacy,Object*/
+abstract class Legacy {
+  /*member: Legacy.mandatory:void Function(int*)**/
+  void mandatory(int param);
+  /*member: Legacy.optional:void Function(int*)**/
+  void optional(int param);
+}
+
+/*class: Both1:Both1,Legacy,Nnbd,Object*/
+class Both1 implements Legacy, Nnbd {
+  /*member: Both1.mandatory:void Function(int*)**/
+  void mandatory(param) {}
+  /*member: Both1.optional:void Function(int*)**/
+  void optional(param) {}
+}
+
+/*class: Both2:Both2,Legacy,Nnbd,Object*/
+class Both2 implements Nnbd, Legacy {
+  /*member: Both2.mandatory:void Function(int*)**/
+  void mandatory(param) {}
+  /*member: Both2.optional:void Function(int*)**/
+  void optional(param) {}
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_out_from_mixed/opt_in.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_out_from_mixed/opt_in.dart
new file mode 100644
index 0000000..9e428bb
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/infer_opt_out_from_mixed/opt_in.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+/*class: Nnbd:Nnbd,Object*/
+abstract class Nnbd {
+  /*member: Nnbd.mandatory:void Function(int!)!*/
+  void mandatory(int param);
+  /*member: Nnbd.optional:void Function(int?)!*/
+  void optional(int? param);
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/_internal.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/_internal.dart
new file mode 100644
index 0000000..5e321c6
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/_internal.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+import 'dart:core' as core;
+
+/*cfe.class: Symbol:Object,Symbol,Symbol*/
+/*cfe:builder.class: Symbol:Object,Symbol*/
+class Symbol extends core.Symbol {}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/async.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/async.dart
new file mode 100644
index 0000000..bb4fee5
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/async.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+/*class: Future:Future<T>,Object*/
+class Future<T> {}
+
+/*class: FutureOr:FutureOr<T>,Object*/
+class FutureOr<T> {}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/collection.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/collection.dart
new file mode 100644
index 0000000..c346cae
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/collection.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/core.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/core.dart
new file mode 100644
index 0000000..38f91c1
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/core.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+import 'dart:async';
+import 'dart:_internal';
+
+export 'dart:async' show Future;
+
+/*class: Object:Object*/
+class Object {
+  const Object();
+
+  bool operator ==(Object other) => true;
+}
+
+/*class: Null:Null,Object*/
+class Null {
+  factory Null._uninstantiable() {
+    throw 'class Null cannot be instantiated';
+  }
+}
+
+/*class: bool:Object,bool*/
+class bool {}
+
+/*class: num:Object,num*/
+class num {}
+
+/*class: int:Object,int,num*/
+class int extends num {}
+
+/*class: double:Object,double,num*/
+class double extends num {}
+
+/*class: String:Object,String*/
+class String {}
+
+/*class: Iterable:Iterable<E>,Object*/
+class Iterable<E> {}
+
+/*class: List:Iterable<E>,List<E>,Object*/
+class List<E> implements Iterable<E> {}
+
+/*class: Set:Iterable<E>,Object,Set<E>*/
+class Set<E> implements Iterable<E> {}
+
+/*class: Map:Map<K,V>,Object*/
+class Map<K, V> {}
+
+/*class: Stream:Object,Stream<E>*/
+class Stream<E> {}
+
+/*class: Function:Function,Object*/
+class Function {}
+
+/*class: Symbol:Object,Symbol*/
+class Symbol {}
+
+/*class: Type:Object,Type*/
+class Type {}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/libraries.json b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/libraries.json
new file mode 100644
index 0000000..98467d2
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/libraries.json
@@ -0,0 +1,18 @@
+{
+  "none": {
+    "libraries": {
+      "async": {
+        "uri": "async.dart"
+      },
+      "core": {
+        "uri": "core.dart"
+      },
+      "collection": {
+        "uri": "collection.dart"
+      },
+      "_internal": {
+        "uri": "_internal.dart"
+      }
+    }
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/main.dart
new file mode 100644
index 0000000..31806e7
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/main.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+import 'opt_in.dart';
+import 'opt_out.dart';
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/opt_in.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/opt_in.dart
new file mode 100644
index 0000000..fa55142
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/opt_in.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+/*class: Class:Class,Object*/
+class Class {
+  /*member: Class.==:bool! Function(Object!)!*/
+  operator ==(other) => true;
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/opt_out.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/opt_out.dart
new file mode 100644
index 0000000..1d7d8a1
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_equals/opt_out.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=false*/
+
+// @dart=2.6
+
+/*class: Class1:Class1,Object*/
+class Class1 {
+  /*member: Class1.==:bool! Function(dynamic)**/
+  operator ==(other) => true;
+}
+
+/*class: Class2a:Class2a,Object*/
+abstract class Class2a {
+  /*member: Class2a.==:bool* Function(Object*)**/
+  bool operator ==(Object other);
+}
+
+/*class: Class2b:Class2a,Class2b,Object*/
+class Class2b extends Class2a {
+  /*member: Class2b.==:bool* Function(Object*)**/
+}
+
+/*class: Class3a:Class3a,Object*/
+class Class3a {
+  /*member: Class3a.==:bool* Function(Object*)**/
+}
+
+/*class: Class3b:Class3a,Class3b,Object*/
+abstract class Class3b extends Class3a {
+  /*member: Class3b.==:bool* Function(Object*)**/
+  bool operator ==(Object other);
+}
+
+/*class: Class3c:Class3a,Class3b,Class3c,Object*/
+class Class3c extends Class3b {
+  /*member: Class3c.==:bool* Function(Object*)**/
+}
+
+/*class: Foo:Foo,Object*/
+class Foo extends /*error: TypeNotFound*/ Unresolved {
+  /*member: Foo.==:bool* Function(Object*)**/
+}
diff --git a/pkg/_js_interop_checks/README.md b/pkg/_js_interop_checks/README.md
new file mode 100644
index 0000000..f811587
--- /dev/null
+++ b/pkg/_js_interop_checks/README.md
@@ -0,0 +1 @@
+Shared kernel visitors checking for incorrect usage of `@JS()` style interop.
diff --git a/pkg/_js_interop_checks/lib/js_interop_checks.dart b/pkg/_js_interop_checks/lib/js_interop_checks.dart
new file mode 100644
index 0000000..045c0d5
--- /dev/null
+++ b/pkg/_js_interop_checks/lib/js_interop_checks.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:_fe_analyzer_shared/src/messages/codes.dart'
+    show Message, LocatedMessage, messageJsInteropIndexNotSupported;
+
+import 'src/js_interop.dart';
+
+class JsInteropChecks extends RecursiveVisitor<void> {
+  final DiagnosticReporter<Message, LocatedMessage> _diagnosticsReporter;
+
+  JsInteropChecks(this._diagnosticsReporter);
+
+  @override
+  void visitClass(Class c) {
+    if (!hasJSInteropAnnotation(c)) return;
+    super.visitClass(c);
+  }
+
+  @override
+  void visitProcedure(Procedure procedure) {
+    if (procedure.isStatic) return;
+    if (procedure.name.name == '[]=' || procedure.name.name == '[]') {
+      _diagnosticsReporter.report(
+          messageJsInteropIndexNotSupported,
+          procedure.fileOffset,
+          procedure.name.name.length,
+          procedure.location.file);
+    }
+  }
+}
diff --git a/pkg/_js_interop_checks/lib/src/js_interop.dart b/pkg/_js_interop_checks/lib/src/js_interop.dart
new file mode 100644
index 0000000..eb5c9f5
--- /dev/null
+++ b/pkg/_js_interop_checks/lib/src/js_interop.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/kernel.dart';
+
+/// Returns true iff the class has an `@JS(...)` annotation from `package:js`.
+bool hasJSInteropAnnotation(Class c) =>
+    c.annotations.any(_isPublicJSAnnotation);
+
+final _packageJs = Uri.parse('package:js/js.dart');
+
+/// Returns [true] if [e] is the `JS` annotation from `package:js`.
+bool _isPublicJSAnnotation(Expression value) {
+  var c = _annotationClass(value);
+  return c != null &&
+      c.name == 'JS' &&
+      c.enclosingLibrary.importUri == _packageJs;
+}
+
+/// Returns the class of the instance referred to by metadata annotation [node].
+///
+/// For example:
+///
+/// - `@JS()` would return the "JS" class in "package:js".
+/// - `@anonymous` would return the "_Anonymous" class in "package:js".
+///
+/// This function works regardless of whether the CFE is evaluating constants,
+/// or whether the constant is a field reference (such as "anonymous" above).
+Class _annotationClass(Expression node) {
+  if (node is ConstantExpression) {
+    var constant = node.constant;
+    if (constant is InstanceConstant) return constant.classNode;
+  } else if (node is ConstructorInvocation) {
+    return node.target.enclosingClass;
+  } else if (node is StaticGet) {
+    var type = node.target.getterType;
+    if (type is InterfaceType) return type.classNode;
+  }
+  return null;
+}
diff --git a/pkg/_js_interop_checks/pubspec.yaml b/pkg/_js_interop_checks/pubspec.yaml
new file mode 100644
index 0000000..abca579
--- /dev/null
+++ b/pkg/_js_interop_checks/pubspec.yaml
@@ -0,0 +1,5 @@
+name: _js_interop_checks
+publish_to: none
+
+environment:
+  sdk: '>=2.7.0 <3.0.0'
diff --git a/pkg/analysis_server/analysis_options.yaml b/pkg/analysis_server/analysis_options.yaml
index 44d21e8..44b31e6 100644
--- a/pkg/analysis_server/analysis_options.yaml
+++ b/pkg/analysis_server/analysis_options.yaml
@@ -9,11 +9,6 @@
   errors:
     # Increase the severity of the unused_import hint.
     unused_import: warning
-    # Ignoring "style" lint rules from pedantic for now. There are pre-existing
-    # violations that need to be cleaned up. Each one can be cleaned up and
-    # enabled according to the value provided.
-    avoid_return_types_on_setters: ignore
-    empty_catches: ignore
     prefer_contains: ignore
     # TODO(srawlins): At the time of writing, 2400 violations in lib/. The fix
     # is mechanical, via `dartfmt --fix-doc-comments`, but not worth the churn
@@ -30,7 +25,7 @@
     #
     # Delta from pedantic 1.8.0 to 1.9.0
     #
-    #- always_declare_return_types # 5645
+    - always_declare_return_types
     - always_require_non_null_named_parameters
     - annotate_overrides
     - avoid_null_checks_in_equality_operators
diff --git a/pkg/analysis_server/benchmark/integration/input_converter.dart b/pkg/analysis_server/benchmark/integration/input_converter.dart
index 0368037..c4ca71e 100644
--- a/pkg/analysis_server/benchmark/integration/input_converter.dart
+++ b/pkg/analysis_server/benchmark/integration/input_converter.dart
@@ -244,7 +244,7 @@
    * the temporary source used during performance measurement rather than
    * the original source when the instrumentation or log file was generated.
    */
-  translateSrcPaths(json) {
+  dynamic translateSrcPaths(json) {
     if (json is String) {
       return srcPathMap.translate(json);
     }
diff --git a/pkg/analysis_server/benchmark/integration/local_runner.dart b/pkg/analysis_server/benchmark/integration/local_runner.dart
index 7bfcbeb..a3d8253 100644
--- a/pkg/analysis_server/benchmark/integration/local_runner.dart
+++ b/pkg/analysis_server/benchmark/integration/local_runner.dart
@@ -10,7 +10,7 @@
 
 // Local driver for performance measurement
 
-main(List<String> args) {
+void main(List<String> args) {
   /*
    * Parse arguments
    */
diff --git a/pkg/analysis_server/benchmark/integration/main.dart b/pkg/analysis_server/benchmark/integration/main.dart
index acec9c4..9b6436f 100644
--- a/pkg/analysis_server/benchmark/integration/main.dart
+++ b/pkg/analysis_server/benchmark/integration/main.dart
@@ -17,7 +17,7 @@
 /**
  * Launch and interact with the analysis server.
  */
-main(List<String> rawArgs) {
+void main(List<String> rawArgs) {
   Logger logger = Logger('Performance Measurement Client');
   logger.onRecord.listen((LogRecord rec) {
     print(rec.message);
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 062b70d..ddad80b 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -713,7 +713,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is CodeActionKind && o._value == _value;
 }
@@ -2561,7 +2561,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is CompletionItemKind && o._value == _value;
 }
@@ -3074,7 +3074,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) =>
       o is CompletionTriggerKind && o._value == _value;
@@ -3941,7 +3941,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is DiagnosticSeverity && o._value == _value;
 }
@@ -4910,7 +4910,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) =>
       o is DocumentHighlightKind && o._value == _value;
@@ -6090,7 +6090,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is ErrorCodes && o._value == _value;
 }
@@ -6378,7 +6378,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is FailureHandlingKind && o._value == _value;
 }
@@ -6409,7 +6409,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is FileChangeType && o._value == _value;
 }
@@ -6796,7 +6796,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is FoldingRangeKind && o._value == _value;
 }
@@ -7463,7 +7463,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is InsertTextFormat && o._value == _value;
 }
@@ -7965,7 +7965,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is MarkupKind && o._value == _value;
 }
@@ -8142,7 +8142,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is MessageType && o._value == _value;
 }
@@ -8320,7 +8320,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is Method && o._value == _value;
 }
@@ -10006,7 +10006,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) =>
       o is ResourceOperationKind && o._value == _value;
@@ -12010,7 +12010,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is SymbolKind && o._value == _value;
 }
@@ -15752,7 +15752,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) =>
       o is TextDocumentSaveReason && o._value == _value;
@@ -15876,7 +15876,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is TextDocumentSyncKind && o._value == _value;
 }
@@ -16415,7 +16415,7 @@
   String toString() => _value.toString();
 
   @override
-  get hashCode => _value.hashCode;
+  int get hashCode => _value.hashCode;
 
   bool operator ==(Object o) => o is WatchKind && o._value == _value;
 }
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
index 7b82969..aa3d457 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
@@ -46,7 +46,7 @@
         _which = 2;
 
   @override
-  get hashCode => map((t) => t.hashCode, (t) => t.hashCode);
+  int get hashCode => map((t) => t.hashCode, (t) => t.hashCode);
 
   @override
   bool operator ==(o) => o is Either2<T1, T2> && o._t1 == _t1 && o._t2 == _t2;
@@ -84,7 +84,8 @@
         _which = 3;
 
   @override
-  get hashCode => map((t) => t.hashCode, (t) => t.hashCode, (t) => t.hashCode);
+  int get hashCode =>
+      map((t) => t.hashCode, (t) => t.hashCode, (t) => t.hashCode);
 
   @override
   bool operator ==(o) =>
@@ -145,8 +146,8 @@
         _which = 4;
 
   @override
-  get hashCode => map((t) => t.hashCode, (t) => t.hashCode, (t) => t.hashCode,
-      (t) => t.hashCode);
+  int get hashCode => map((t) => t.hashCode, (t) => t.hashCode,
+      (t) => t.hashCode, (t) => t.hashCode);
 
   @override
   bool operator ==(o) =>
diff --git a/pkg/analysis_server/lib/src/computer/computer_folding.dart b/pkg/analysis_server/lib/src/computer/computer_folding.dart
index 800827a..79c629a 100644
--- a/pkg/analysis_server/lib/src/computer/computer_folding.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_folding.dart
@@ -62,7 +62,7 @@
       final hasBlankLine =
           _hasBlankLineBetween(lastComment, lastComment.next ?? firstToken);
 
-      // Also considerd non-single-line-comments as the end
+      // Also considered non-single-line-comments as the end
       final nextCommentIsDifferentType = lastComment.next != null &&
           lastComment.next.type != TokenType.SINGLE_LINE_COMMENT;
 
@@ -73,7 +73,7 @@
     }
   }
 
-  _addRegion(int startOffset, int endOffset, FoldingKind kind) {
+  void _addRegion(int startOffset, int endOffset, FoldingKind kind) {
     final CharacterLocation start = _lineInfo.getLocation(startOffset);
     final CharacterLocation end = _lineInfo.getLocation(endOffset);
 
@@ -83,7 +83,7 @@
     }
   }
 
-  _addRegionForAnnotations(List<Annotation> annotations) {
+  void _addRegionForAnnotations(List<Annotation> annotations) {
     if (annotations.isNotEmpty) {
       _addRegion(annotations.first.name.end, annotations.last.end,
           FoldingKind.ANNOTATIONS);
@@ -96,7 +96,7 @@
     return secondLoc.lineNumber - firstLoc.lineNumber > 1;
   }
 
-  _recordDirective(Directive node) {
+  void _recordDirective(Directive node) {
     _firstDirective ??= node;
     _lastDirective = node;
   }
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index a752c8a..bb273a2 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -411,7 +411,7 @@
 /**
  * A visitor for building local function outlines.
  */
-class _FunctionBodyOutlinesVisitor extends RecursiveAstVisitor {
+class _FunctionBodyOutlinesVisitor extends RecursiveAstVisitor<void> {
   final DartUnitOutlineComputer outlineComputer;
   final List<Outline> contents;
 
@@ -444,12 +444,12 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     contents.add(outlineComputer._newFunctionOutline(node, false));
   }
 
   @override
-  visitInstanceCreationExpression(InstanceCreationExpression node) {
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (outlineComputer.withBasicFlutter &&
         outlineComputer.flutter.isWidgetCreation(node)) {
       List<Outline> children = <Outline>[];
@@ -469,7 +469,7 @@
   }
 
   @override
-  visitMethodInvocation(MethodInvocation node) {
+  void visitMethodInvocation(MethodInvocation node) {
     SimpleIdentifier nameNode = node.methodName;
 
     engine.Element nameElement = nameNode.staticElement;
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 7e27b6b..41a62f9 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -265,7 +265,7 @@
   /**
    * Set the callback interface used to create, destroy, and update contexts.
    */
-  void set callbacks(ContextManagerCallbacks value);
+  set callbacks(ContextManagerCallbacks value);
 
   /**
    * A table mapping [Folder]s to the [AnalysisDriver]s associated with them.
diff --git a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
index f26f5c4..038755f 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
@@ -17,7 +17,7 @@
 
   ImplementedComputer(this.searchEngine, this.unitElement);
 
-  compute() async {
+  Future<void> compute() async {
     for (var element in unitElement.mixins) {
       await _computeForClassElement(element);
     }
diff --git a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
index aedfefc..ec3a02c 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
@@ -90,14 +90,14 @@
   }
 }
 
-class _DartNavigationComputerVisitor extends RecursiveAstVisitor {
+class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
   final ResourceProvider resourceProvider;
   final _DartNavigationCollector computer;
 
   _DartNavigationComputerVisitor(this.resourceProvider, this.computer);
 
   @override
-  visitAnnotation(Annotation node) {
+  void visitAnnotation(Annotation node) {
     Element element = node.element;
     if (element is ConstructorElement && element.isSynthetic) {
       element = element.enclosingElement;
@@ -121,21 +121,21 @@
   }
 
   @override
-  visitAssignmentExpression(AssignmentExpression node) {
+  void visitAssignmentExpression(AssignmentExpression node) {
     node.leftHandSide?.accept(this);
     computer._addRegionForToken(node.operator, node.staticElement);
     node.rightHandSide?.accept(this);
   }
 
   @override
-  visitBinaryExpression(BinaryExpression node) {
+  void visitBinaryExpression(BinaryExpression node) {
     node.leftOperand?.accept(this);
     computer._addRegionForToken(node.operator, node.staticElement);
     node.rightOperand?.accept(this);
   }
 
   @override
-  visitCompilationUnit(CompilationUnit unit) {
+  void visitCompilationUnit(CompilationUnit unit) {
     // prepare top-level nodes sorted by their offsets
     List<AstNode> nodes = <AstNode>[];
     nodes.addAll(unit.directives);
@@ -150,7 +150,7 @@
   }
 
   @override
-  visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
     // associate constructor with "T" or "T.name"
     {
       AstNode firstNode = node.returnType;
@@ -165,7 +165,7 @@
   }
 
   @override
-  visitConstructorName(ConstructorName node) {
+  void visitConstructorName(ConstructorName node) {
     AstNode parent = node.parent;
     if (parent is InstanceCreationExpression &&
         parent.constructorName == node) {
@@ -177,7 +177,7 @@
   }
 
   @override
-  visitDeclaredIdentifier(DeclaredIdentifier node) {
+  void visitDeclaredIdentifier(DeclaredIdentifier node) {
     if (node.type == null) {
       Token token = node.keyword;
       if (token?.keyword == Keyword.VAR) {
@@ -192,7 +192,7 @@
   }
 
   @override
-  visitExportDirective(ExportDirective node) {
+  void visitExportDirective(ExportDirective node) {
     ExportElement exportElement = node.element;
     if (exportElement != null) {
       Element libraryElement = exportElement.exportedLibrary;
@@ -202,7 +202,7 @@
   }
 
   @override
-  visitImportDirective(ImportDirective node) {
+  void visitImportDirective(ImportDirective node) {
     ImportElement importElement = node.element;
     if (importElement != null) {
       Element libraryElement = importElement.importedLibrary;
@@ -212,7 +212,7 @@
   }
 
   @override
-  visitIndexExpression(IndexExpression node) {
+  void visitIndexExpression(IndexExpression node) {
     super.visitIndexExpression(node);
     MethodElement element = node.staticElement;
     computer._addRegionForToken(node.leftBracket, element);
@@ -220,36 +220,37 @@
   }
 
   @override
-  visitLibraryDirective(LibraryDirective node) {
+  void visitLibraryDirective(LibraryDirective node) {
     computer._addRegionForNode(node.name, node.element);
   }
 
   @override
-  visitPartDirective(PartDirective node) {
+  void visitPartDirective(PartDirective node) {
     _addUriDirectiveRegion(node, node.element);
     super.visitPartDirective(node);
   }
 
   @override
-  visitPartOfDirective(PartOfDirective node) {
+  void visitPartOfDirective(PartOfDirective node) {
     computer._addRegionForNode(node.libraryName, node.element);
     super.visitPartOfDirective(node);
   }
 
   @override
-  visitPostfixExpression(PostfixExpression node) {
+  void visitPostfixExpression(PostfixExpression node) {
     super.visitPostfixExpression(node);
     computer._addRegionForToken(node.operator, node.staticElement);
   }
 
   @override
-  visitPrefixExpression(PrefixExpression node) {
+  void visitPrefixExpression(PrefixExpression node) {
     computer._addRegionForToken(node.operator, node.staticElement);
     super.visitPrefixExpression(node);
   }
 
   @override
-  visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+  void visitRedirectingConstructorInvocation(
+      RedirectingConstructorInvocation node) {
     Element element = node.staticElement;
     if (element != null && element.isSynthetic) {
       element = element.enclosingElement;
@@ -262,7 +263,7 @@
   }
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     if (node.parent is ConstructorDeclaration) {
       return;
     }
@@ -271,7 +272,7 @@
   }
 
   @override
-  visitSuperConstructorInvocation(SuperConstructorInvocation node) {
+  void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
     Element element = node.staticElement;
     if (element != null && element.isSynthetic) {
       element = element.enclosingElement;
@@ -284,7 +285,7 @@
   }
 
   @override
-  visitVariableDeclarationList(VariableDeclarationList node) {
+  void visitVariableDeclarationList(VariableDeclarationList node) {
     /**
      * Return the element for the type inferred for each of the variables in the
      * given list of [variables], or `null` if not all variable have the same
diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
index 8882f6d..5bed880 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
@@ -22,11 +22,11 @@
   });
 }
 
-class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor {
+class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor<void> {
   final Map<Element, List<int>> elementsOffsets = <Element, List<int>>{};
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     Element element = node.staticElement;
     if (element != null) {
       _addOccurrence(element, node.offset);
diff --git a/pkg/analysis_server/lib/src/edit/fix/non_nullable_fix.dart b/pkg/analysis_server/lib/src/edit/fix/non_nullable_fix.dart
index 55bd4d3..23f5f5d 100644
--- a/pkg/analysis_server/lib/src/edit/fix/non_nullable_fix.dart
+++ b/pkg/analysis_server/lib/src/edit/fix/non_nullable_fix.dart
@@ -12,13 +12,11 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:nnbd_migration/nnbd_migration.dart';
-import 'package:path/path.dart' as path;
 import 'package:source_span/source_span.dart';
 import 'package:yaml/yaml.dart';
 
@@ -228,8 +226,8 @@
   /// Get the "root" of all [included] paths. See [includedRoot] for its
   /// definition.
   static String _getIncludedRoot(
-      List<String> included, OverlayResourceProvider provider) {
-    path.Context context = provider.pathContext;
+      List<String> included, ResourceProvider provider) {
+    var context = provider.pathContext;
     // This step looks like it may be expensive (`getResource`, splitting up
     // all of the paths, comparing parts, joining one path back together). In
     // practice, this should be cheap because typically only one path is given
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/highlight_css.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/highlight_css.dart
deleted file mode 100644
index 064be3c..0000000
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/highlight_css.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/* To regenerate this file:
-
-1. Build and download highlight.zip for Dart [1].
-2. Extract highlight.zip, and find styles/androidstudio.css.
-3. Run:
-
-       sed -i -e '/^const _highlightCss =/{
-       r'<(echo 'const _highlightCss = "'"$(base64 < styles/androidstudio.css)"'";')'
-       d
-       }' highlight_css.dart
-
-[1] https://highlightjs.org/download/
-*/
-
-import 'dart:convert';
-
-const _highlightCss =
-    'LyoKRGF0ZTogMjQgRmV2IDIwMTUKQXV0aG9yOiBQZWRybyBPbGl2ZWlyYSA8a2FueXR1QGdtYWlsIC4gY29tPgoqLwoKLmhsanMgewogIGNvbG9yOiAjYTliN2M2OwogIGJhY2tncm91bmQ6ICMyODJiMmU7CiAgZGlzcGxheTogYmxvY2s7CiAgb3ZlcmZsb3cteDogYXV0bzsKICBwYWRkaW5nOiAwLjVlbTsKfQoKLmhsanMtbnVtYmVyLAouaGxqcy1saXRlcmFsLAouaGxqcy1zeW1ib2wsCi5obGpzLWJ1bGxldCB7CiAgY29sb3I6ICM2ODk3QkI7Cn0KCi5obGpzLWtleXdvcmQsCi5obGpzLXNlbGVjdG9yLXRhZywKLmhsanMtZGVsZXRpb24gewogIGNvbG9yOiAjY2M3ODMyOwp9CgouaGxqcy12YXJpYWJsZSwKLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsCi5obGpzLWxpbmsgewogIGNvbG9yOiAjNjI5NzU1Owp9CgouaGxqcy1jb21tZW50LAouaGxqcy1xdW90ZSB7CiAgY29sb3I6ICM4MDgwODA7Cn0KCi5obGpzLW1ldGEgewogIGNvbG9yOiAjYmJiNTI5Owp9CgouaGxqcy1zdHJpbmcsCi5obGpzLWF0dHJpYnV0ZSwKLmhsanMtYWRkaXRpb24gewogIGNvbG9yOiAjNkE4NzU5Owp9CgouaGxqcy1zZWN0aW9uLAouaGxqcy10aXRsZSwKLmhsanMtdHlwZSB7CiAgY29sb3I6ICNmZmM2NmQ7Cn0KCi5obGpzLW5hbWUsCi5obGpzLXNlbGVjdG9yLWlkLAouaGxqcy1zZWxlY3Rvci1jbGFzcyB7CiAgY29sb3I6ICNlOGJmNmE7Cn0KCi5obGpzLWVtcGhhc2lzIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5obGpzLXN0cm9uZyB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0K';
-
-String decodeHighlightCss() =>
-    String.fromCharCodes(base64Decode(_highlightCss));
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/highlight_js.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/highlight_js.dart
deleted file mode 100644
index 26b67ee..0000000
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/highlight_js.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/* To regenerate this file:
-
-1. Build and download highlight.zip for Dart [1].
-2. Extract highlight.zip, and find highlight.pack.js.
-3. Run:
-
-       sed -i -e '/^const _highlightJs =/{
-       r'<(echo 'const _highlightJs = "'"$(base64 < highlight.pack.js)"'";')'
-       d
-       }' highlightjs.dart
-
-[1] https://highlightjs.org/download/
-*/
-
-import 'dart:convert';
-
-const _highlightJs =
-    'LyohIGhpZ2hsaWdodC5qcyB2OS4xNS4xMCB8IEJTRDMgTGljZW5zZSB8IGdpdC5pby9obGpzbGljZW5zZSAqLwohZnVuY3Rpb24oZSl7dmFyIG49Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmOyJ1bmRlZmluZWQiPT10eXBlb2YgZXhwb3J0c3x8ZXhwb3J0cy5ub2RlVHlwZT9uJiYobi5obGpzPWUoe30pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBuLmhsanN9KSk6ZShleHBvcnRzKX0oZnVuY3Rpb24oYSl7dmFyIGY9W10sdT1PYmplY3Qua2V5cyxOPXt9LGM9e30sbj0vXihuby0/aGlnaGxpZ2h0fHBsYWlufHRleHQpJC9pLHM9L1xibGFuZyg/OnVhZ2UpPy0oW1x3LV0rKVxiL2ksdD0vKCheKDxbXj5dKz58XHR8KSt8KD86XG4pKSkvZ20scj17Y2FzZV9pbnNlbnNpdGl2ZToiY0kiLGxleGVtZXM6ImwiLGNvbnRhaW5zOiJjIixrZXl3b3JkczoiayIsc3ViTGFuZ3VhZ2U6InNMIixjbGFzc05hbWU6ImNOIixiZWdpbjoiYiIsYmVnaW5LZXl3b3JkczoiYksiLGVuZDoiZSIsZW5kc1dpdGhQYXJlbnQ6ImVXIixpbGxlZ2FsOiJpIixleGNsdWRlQmVnaW46ImVCIixleGNsdWRlRW5kOiJlRSIscmV0dXJuQmVnaW46InJCIixyZXR1cm5FbmQ6InJFIixyZWxldmFuY2U6InIiLHZhcmlhbnRzOiJ2IixJREVOVF9SRToiSVIiLFVOREVSU0NPUkVfSURFTlRfUkU6IlVJUiIsTlVNQkVSX1JFOiJOUiIsQ19OVU1CRVJfUkU6IkNOUiIsQklOQVJZX05VTUJFUl9SRToiQk5SIixSRV9TVEFSVEVSU19SRToiUlNSIixCQUNLU0xBU0hfRVNDQVBFOiJCRSIsQVBPU19TVFJJTkdfTU9ERToiQVNNIixRVU9URV9TVFJJTkdfTU9ERToiUVNNIixQSFJBU0FMX1dPUkRTX01PREU6IlBXTSIsQ19MSU5FX0NPTU1FTlRfTU9ERToiQ0xDTSIsQ19CTE9DS19DT01NRU5UX01PREU6IkNCQ00iLEhBU0hfQ09NTUVOVF9NT0RFOiJIQ00iLE5VTUJFUl9NT0RFOiJOTSIsQ19OVU1CRVJfTU9ERToiQ05NIixCSU5BUllfTlVNQkVSX01PREU6IkJOTSIsQ1NTX05VTUJFUl9NT0RFOiJDU1NOTSIsUkVHRVhQX01PREU6IlJNIixUSVRMRV9NT0RFOiJUTSIsVU5ERVJTQ09SRV9USVRMRV9NT0RFOiJVVE0iLENPTU1FTlQ6IkMiLGJlZ2luUmU6ImJSIixlbmRSZToiZVIiLGlsbGVnYWxSZToiaVIiLGxleGVtZXNSZToibFIiLHRlcm1pbmF0b3JzOiJ0Iix0ZXJtaW5hdG9yX2VuZDoidEUifSxiPSI8L3NwYW4+IixoPXtjbGFzc1ByZWZpeDoiaGxqcy0iLHRhYlJlcGxhY2U6bnVsbCx1c2VCUjohMSxsYW5ndWFnZXM6dm9pZCAwfTtmdW5jdGlvbiBfKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBFKGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gdihlLG4pe3ZhciB0PWUmJmUuZXhlYyhuKTtyZXR1cm4gdCYmMD09PXQuaW5kZXh9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbi50ZXN0KGUpfWZ1bmN0aW9uIGcoZSl7dmFyIG4sdD17fSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IobiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ZvcihuIGluIGUpdFtuXT1lW25dfSksdH1mdW5jdGlvbiBSKGUpe3ZhciBhPVtdO3JldHVybiBmdW5jdGlvbiBlKG4sdCl7Zm9yKHZhciByPW4uZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZykzPT09ci5ub2RlVHlwZT90Kz1yLm5vZGVWYWx1ZS5sZW5ndGg6MT09PXIubm9kZVR5cGUmJihhLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnQsbm9kZTpyfSksdD1lKHIsdCksRShyKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0Lyl8fGEucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDp0LG5vZGU6cn0pKTtyZXR1cm4gdH0oZSwwKSxhfWZ1bmN0aW9uIGkoZSl7aWYociYmIWUubGFuZ0FwaVJlc3RvcmVkKXtmb3IodmFyIG4gaW4gZS5sYW5nQXBpUmVzdG9yZWQ9ITAscillW25dJiYoZVtyW25dXT1lW25dKTsoZS5jfHxbXSkuY29uY2F0KGUudnx8W10pLmZvckVhY2goaSl9fWZ1bmN0aW9uIG0obyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5zb3VyY2V8fGV9ZnVuY3Rpb24gYyhlLG4pe3JldHVybiBuZXcgUmVnRXhwKHMoZSksIm0iKyhvLmNJPyJpIjoiIikrKG4/ImciOiIiKSl9IWZ1bmN0aW9uIG4odCxlKXtpZighdC5jb21waWxlZCl7aWYodC5jb21waWxlZD0hMCx0Lms9dC5rfHx0LmJLLHQuayl7ZnVuY3Rpb24gcih0LGUpe28uY0kmJihlPWUudG9Mb3dlckNhc2UoKSksZS5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdCgifCIpO2FbblswXV09W3QsblsxXT9OdW1iZXIoblsxXSk6MV19KX12YXIgYT17fTsic3RyaW5nIj09dHlwZW9mIHQuaz9yKCJrZXl3b3JkIix0LmspOnUodC5rKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IoZSx0LmtbZV0pfSksdC5rPWF9dC5sUj1jKHQubHx8L1x3Ky8sITApLGUmJih0LmJLJiYodC5iPSJcXGIoIit0LmJLLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIiksdC5ifHwodC5iPS9cQnxcYi8pLHQuYlI9Yyh0LmIpLHQuZW5kU2FtZUFzQmVnaW4mJih0LmU9dC5iKSx0LmV8fHQuZVd8fCh0LmU9L1xCfFxiLyksdC5lJiYodC5lUj1jKHQuZSkpLHQudEU9cyh0LmUpfHwiIix0LmVXJiZlLnRFJiYodC50RSs9KHQuZT8ifCI6IiIpK2UudEUpKSx0LmkmJih0LmlSPWModC5pKSksbnVsbD09dC5yJiYodC5yPTEpLHQuY3x8KHQuYz1bXSksdC5jPUFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdC5jLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4udiYmIW4uY2FjaGVkX3ZhcmlhbnRzJiYobi5jYWNoZWRfdmFyaWFudHM9bi52Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZyhuLHt2Om51bGx9LGUpfSkpLG4uY2FjaGVkX3ZhcmlhbnRzfHxuLmVXJiZbZyhuKV18fFtuXX0oInNlbGYiPT09ZT90OmUpfSkpLHQuYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe24oZSx0KX0pLHQuc3RhcnRzJiZuKHQuc3RhcnRzLGUpO3ZhciBpPXQuYy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYks/IlxcLj8oPzoiK2UuYisiKVxcLj8iOmUuYn0pLmNvbmNhdChbdC50RSx0LmldKS5tYXAocykuZmlsdGVyKEJvb2xlYW4pO3QudD1pLmxlbmd0aD9jKGZ1bmN0aW9uKGUsbil7Zm9yKHZhciB0PS9cWyg/OlteXFxcXV18XFwuKSpcXXxcKFw/P3xcXChbMS05XVswLTldKil8XFwuLyxyPTAsYT0iIixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPXIsYz1zKGVbaV0pO2ZvcigwPGkmJihhKz1uKTswPGMubGVuZ3RoOyl7dmFyIHU9dC5leGVjKGMpO2lmKG51bGw9PXUpe2ErPWM7YnJlYWt9YSs9Yy5zdWJzdHJpbmcoMCx1LmluZGV4KSxjPWMuc3Vic3RyaW5nKHUuaW5kZXgrdVswXS5sZW5ndGgpLCJcXCI9PXVbMF1bMF0mJnVbMV0/YSs9IlxcIitTdHJpbmcoTnVtYmVyKHVbMV0pK28pOihhKz11WzBdLCIoIj09dVswXSYmcisrKX19cmV0dXJuIGF9KGksInwiKSwhMCk6e2V4ZWM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19fX0obyl9ZnVuY3Rpb24gQyhlLG4saSx0KXtmdW5jdGlvbiBjKGUsbix0LHIpe3ZhciBhPSc8c3BhbiBjbGFzcz0iJysocj8iIjpoLmNsYXNzUHJlZml4KTtyZXR1cm4gZT8oYSs9ZSsnIj4nKStuKyh0PyIiOmIpOm59ZnVuY3Rpb24gbygpe0UrPW51bGwhPWwuc0w/ZnVuY3Rpb24oKXt2YXIgZT0ic3RyaW5nIj09dHlwZW9mIGwuc0w7aWYoZSYmIU5bbC5zTF0pcmV0dXJuIF8oZyk7dmFyIG49ZT9DKGwuc0wsZywhMCxmW2wuc0xdKTpPKGcsbC5zTC5sZW5ndGg/bC5zTDp2b2lkIDApO3JldHVybiAwPGwuciYmKFIrPW4uciksZSYmKGZbbC5zTF09bi50b3ApLGMobi5sYW5ndWFnZSxuLnZhbHVlLCExLCEwKX0oKTpmdW5jdGlvbigpe3ZhciBlLG4sdCxyLGEsaSxvO2lmKCFsLmspcmV0dXJuIF8oZyk7Zm9yKHI9IiIsbj0wLGwubFIubGFzdEluZGV4PTAsdD1sLmxSLmV4ZWMoZyk7dDspcis9XyhnLnN1YnN0cmluZyhuLHQuaW5kZXgpKSxhPWwsaT10LHZvaWQgMCxvPXMuY0k/aVswXS50b0xvd2VyQ2FzZSgpOmlbMF0sKGU9YS5rLmhhc093blByb3BlcnR5KG8pJiZhLmtbb10pPyhSKz1lWzFdLHIrPWMoZVswXSxfKHRbMF0pKSk6cis9Xyh0WzBdKSxuPWwubFIubGFzdEluZGV4LHQ9bC5sUi5leGVjKGcpO3JldHVybiByK18oZy5zdWJzdHIobikpfSgpLGc9IiJ9ZnVuY3Rpb24gdShlKXtFKz1lLmNOP2MoZS5jTiwiIiwhMCk6IiIsbD1PYmplY3QuY3JlYXRlKGUse3BhcmVudDp7dmFsdWU6bH19KX1mdW5jdGlvbiByKGUsbil7aWYoZys9ZSxudWxsPT1uKXJldHVybiBvKCksMDt2YXIgdD1mdW5jdGlvbihlLG4pe3ZhciB0LHIsYTtmb3IodD0wLHI9bi5jLmxlbmd0aDt0PHI7dCsrKWlmKHYobi5jW3RdLmJSLGUpKXJldHVybiBuLmNbdF0uZW5kU2FtZUFzQmVnaW4mJihuLmNbdF0uZVI9KGE9bi5jW3RdLmJSLmV4ZWMoZSlbMF0sbmV3IFJlZ0V4cChhLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIiksIm0iKSkpLG4uY1t0XX0obixsKTtpZih0KXJldHVybiB0LnNraXA/Zys9bjoodC5lQiYmKGcrPW4pLG8oKSx0LnJCfHx0LmVCfHwoZz1uKSksdSh0KSx0LnJCPzA6bi5sZW5ndGg7dmFyIHI9ZnVuY3Rpb24gZShuLHQpe2lmKHYobi5lUix0KSl7Zm9yKDtuLmVuZHNQYXJlbnQmJm4ucGFyZW50OyluPW4ucGFyZW50O3JldHVybiBufWlmKG4uZVcpcmV0dXJuIGUobi5wYXJlbnQsdCl9KGwsbik7aWYocil7dmFyIGE9bDtmb3IoYS5za2lwP2crPW46KGEuckV8fGEuZUV8fChnKz1uKSxvKCksYS5lRSYmKGc9bikpO2wuY04mJihFKz1iKSxsLnNraXB8fGwuc0x8fChSKz1sLnIpLChsPWwucGFyZW50KSE9PXIucGFyZW50Oyk7cmV0dXJuIHIuc3RhcnRzJiYoci5lbmRTYW1lQXNCZWdpbiYmKHIuc3RhcnRzLmVSPXIuZVIpLHUoci5zdGFydHMpKSxhLnJFPzA6bi5sZW5ndGh9aWYoZnVuY3Rpb24oZSxuKXtyZXR1cm4haSYmdihuLmlSLGUpfShuLGwpKXRocm93IG5ldyBFcnJvcignSWxsZWdhbCBsZXhlbWUgIicrbisnIiBmb3IgbW9kZSAiJysobC5jTnx8Ijx1bm5hbWVkPiIpKyciJyk7cmV0dXJuIGcrPW4sbi5sZW5ndGh8fDF9dmFyIHM9QihlKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGFuZ3VhZ2U6ICInK2UrJyInKTttKHMpO3ZhciBhLGw9dHx8cyxmPXt9LEU9IiI7Zm9yKGE9bDthIT09czthPWEucGFyZW50KWEuY04mJihFPWMoYS5jTiwiIiwhMCkrRSk7dmFyIGc9IiIsUj0wO3RyeXtmb3IodmFyIGQscCxNPTA7bC50Lmxhc3RJbmRleD1NLGQ9bC50LmV4ZWMobik7KXA9cihuLnN1YnN0cmluZyhNLGQuaW5kZXgpLGRbMF0pLE09ZC5pbmRleCtwO2ZvcihyKG4uc3Vic3RyKE0pKSxhPWw7YS5wYXJlbnQ7YT1hLnBhcmVudClhLmNOJiYoRSs9Yik7cmV0dXJue3I6Uix2YWx1ZTpFLGxhbmd1YWdlOmUsdG9wOmx9fWNhdGNoKGUpe2lmKGUubWVzc2FnZSYmLTEhPT1lLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpKXJldHVybntyOjAsdmFsdWU6XyhuKX07dGhyb3cgZX19ZnVuY3Rpb24gTyh0LGUpe2U9ZXx8aC5sYW5ndWFnZXN8fHUoTik7dmFyIHI9e3I6MCx2YWx1ZTpfKHQpfSxhPXI7cmV0dXJuIGUuZmlsdGVyKEIpLmZpbHRlcihNKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPUMoZSx0LCExKTtuLmxhbmd1YWdlPWUsbi5yPmEuciYmKGE9biksbi5yPnIuciYmKGE9cixyPW4pfSksYS5sYW5ndWFnZSYmKHIuc2Vjb25kX2Jlc3Q9YSkscn1mdW5jdGlvbiBkKGUpe3JldHVybiBoLnRhYlJlcGxhY2V8fGgudXNlQlI/ZS5yZXBsYWNlKHQsZnVuY3Rpb24oZSxuKXtyZXR1cm4gaC51c2VCUiYmIlxuIj09PWU/Ijxicj4iOmgudGFiUmVwbGFjZT9uLnJlcGxhY2UoL1x0L2csaC50YWJSZXBsYWNlKToiIn0pOmV9ZnVuY3Rpb24gbyhlKXt2YXIgbix0LHIsYSxpLG89ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLGEsaT1lLmNsYXNzTmFtZSsiICI7aWYoaSs9ZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIsdD1zLmV4ZWMoaSkpcmV0dXJuIEIodFsxXSk/dFsxXToibm8taGlnaGxpZ2h0Ijtmb3Iobj0wLHI9KGk9aS5zcGxpdCgvXHMrLykpLmxlbmd0aDtuPHI7bisrKWlmKGwoYT1pW25dKXx8QihhKSlyZXR1cm4gYX0oZSk7bChvKXx8KGgudXNlQlI/KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2IikpLmlubmVySFRNTD1lLmlubmVySFRNTC5yZXBsYWNlKC9cbi9nLCIiKS5yZXBsYWNlKC88YnJbIFwvXSo+L2csIlxuIik6bj1lLGk9bi50ZXh0Q29udGVudCxyPW8/QyhvLGksITApOk8oaSksKHQ9UihuKSkubGVuZ3RoJiYoKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2IikpLmlubmVySFRNTD1yLnZhbHVlLHIudmFsdWU9ZnVuY3Rpb24oZSxuLHQpe3ZhciByPTAsYT0iIixpPVtdO2Z1bmN0aW9uIG8oKXtyZXR1cm4gZS5sZW5ndGgmJm4ubGVuZ3RoP2VbMF0ub2Zmc2V0IT09blswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8blswXS5vZmZzZXQ/ZTpuOiJzdGFydCI9PT1uWzBdLmV2ZW50P2U6bjplLmxlbmd0aD9lOm59ZnVuY3Rpb24gYyhlKXthKz0iPCIrRShlKStmLm1hcC5jYWxsKGUuYXR0cmlidXRlcyxmdW5jdGlvbihlKXtyZXR1cm4iICIrZS5ub2RlTmFtZSsnPSInK18oZS52YWx1ZSkucmVwbGFjZSgnIicsIiZxdW90OyIpKyciJ30pLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB1KGUpe2ErPSI8LyIrRShlKSsiPiJ9ZnVuY3Rpb24gcyhlKXsoInN0YXJ0Ij09PWUuZXZlbnQ/Yzp1KShlLm5vZGUpfWZvcig7ZS5sZW5ndGh8fG4ubGVuZ3RoOyl7dmFyIGw9bygpO2lmKGErPV8odC5zdWJzdHJpbmcocixsWzBdLm9mZnNldCkpLHI9bFswXS5vZmZzZXQsbD09PWUpe2ZvcihpLnJldmVyc2UoKS5mb3JFYWNoKHUpO3MobC5zcGxpY2UoMCwxKVswXSksKGw9bygpKT09PWUmJmwubGVuZ3RoJiZsWzBdLm9mZnNldD09PXI7KTtpLnJldmVyc2UoKS5mb3JFYWNoKGMpfWVsc2Uic3RhcnQiPT09bFswXS5ldmVudD9pLnB1c2gobFswXS5ub2RlKTppLnBvcCgpLHMobC5zcGxpY2UoMCwxKVswXSl9cmV0dXJuIGErXyh0LnN1YnN0cihyKSl9KHQsUihhKSxpKSksci52YWx1ZT1kKHIudmFsdWUpLGUuaW5uZXJIVE1MPXIudmFsdWUsZS5jbGFzc05hbWU9ZnVuY3Rpb24oZSxuLHQpe3ZhciByPW4/Y1tuXTp0LGE9W2UudHJpbSgpXTtyZXR1cm4gZS5tYXRjaCgvXGJobGpzXGIvKXx8YS5wdXNoKCJobGpzIiksLTE9PT1lLmluZGV4T2YocikmJmEucHVzaChyKSxhLmpvaW4oIiAiKS50cmltKCl9KGUuY2xhc3NOYW1lLG8sci5sYW5ndWFnZSksZS5yZXN1bHQ9e2xhbmd1YWdlOnIubGFuZ3VhZ2UscmU6ci5yfSxyLnNlY29uZF9iZXN0JiYoZS5zZWNvbmRfYmVzdD17bGFuZ3VhZ2U6ci5zZWNvbmRfYmVzdC5sYW5ndWFnZSxyZTpyLnNlY29uZF9iZXN0LnJ9KSl9ZnVuY3Rpb24gcCgpe2lmKCFwLmNhbGxlZCl7cC5jYWxsZWQ9ITA7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicHJlIGNvZGUiKTtmLmZvckVhY2guY2FsbChlLG8pfX1mdW5jdGlvbiBCKGUpe3JldHVybiBlPShlfHwiIikudG9Mb3dlckNhc2UoKSxOW2VdfHxOW2NbZV1dfWZ1bmN0aW9uIE0oZSl7dmFyIG49QihlKTtyZXR1cm4gbiYmIW4uZGlzYWJsZUF1dG9kZXRlY3R9cmV0dXJuIGEuaGlnaGxpZ2h0PUMsYS5oaWdobGlnaHRBdXRvPU8sYS5maXhNYXJrdXA9ZCxhLmhpZ2hsaWdodEJsb2NrPW8sYS5jb25maWd1cmU9ZnVuY3Rpb24oZSl7aD1nKGgsZSl9LGEuaW5pdEhpZ2hsaWdodGluZz1wLGEuaW5pdEhpZ2hsaWdodGluZ09uTG9hZD1mdW5jdGlvbigpe2FkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHAsITEpLGFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHAsITEpfSxhLnJlZ2lzdGVyTGFuZ3VhZ2U9ZnVuY3Rpb24obixlKXt2YXIgdD1OW25dPWUoYSk7aSh0KSx0LmFsaWFzZXMmJnQuYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2NbZV09bn0pfSxhLmxpc3RMYW5ndWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdShOKX0sYS5nZXRMYW5ndWFnZT1CLGEuYXV0b0RldGVjdGlvbj1NLGEuaW5oZXJpdD1nLGEuSVI9YS5JREVOVF9SRT0iW2EtekEtWl1cXHcqIixhLlVJUj1hLlVOREVSU0NPUkVfSURFTlRfUkU9IlthLXpBLVpfXVxcdyoiLGEuTlI9YS5OVU1CRVJfUkU9IlxcYlxcZCsoXFwuXFxkKyk/IixhLkNOUj1hLkNfTlVNQkVSX1JFPSIoLT8pKFxcYjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQrKT8pIixhLkJOUj1hLkJJTkFSWV9OVU1CRVJfUkU9IlxcYigwYlswMV0rKSIsYS5SU1I9YS5SRV9TVEFSVEVSU19SRT0iIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iLGEuQkU9YS5CQUNLU0xBU0hfRVNDQVBFPXtiOiJcXFxcW1xcc1xcU10iLHI6MH0sYS5BU009YS5BUE9TX1NUUklOR19NT0RFPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W2EuQkVdfSxhLlFTTT1hLlFVT1RFX1NUUklOR19NT0RFPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W2EuQkVdfSxhLlBXTT1hLlBIUkFTQUxfV09SRFNfTU9ERT17YjovXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxiL30sYS5DPWEuQ09NTUVOVD1mdW5jdGlvbihlLG4sdCl7dmFyIHI9YS5pbmhlcml0KHtjTjoiY29tbWVudCIsYjplLGU6bixjOltdfSx0fHx7fSk7cmV0dXJuIHIuYy5wdXNoKGEuUFdNKSxyLmMucHVzaCh7Y046ImRvY3RhZyIsYjoiKD86VE9ET3xGSVhNRXxOT1RFfEJVR3xYWFgpOiIscjowfSkscn0sYS5DTENNPWEuQ19MSU5FX0NPTU1FTlRfTU9ERT1hLkMoIi8vIiwiJCIpLGEuQ0JDTT1hLkNfQkxPQ0tfQ09NTUVOVF9NT0RFPWEuQygiL1xcKiIsIlxcKi8iKSxhLkhDTT1hLkhBU0hfQ09NTUVOVF9NT0RFPWEuQygiIyIsIiQiKSxhLk5NPWEuTlVNQkVSX01PREU9e2NOOiJudW1iZXIiLGI6YS5OUixyOjB9LGEuQ05NPWEuQ19OVU1CRVJfTU9ERT17Y046Im51bWJlciIsYjphLkNOUixyOjB9LGEuQk5NPWEuQklOQVJZX05VTUJFUl9NT0RFPXtjTjoibnVtYmVyIixiOmEuQk5SLHI6MH0sYS5DU1NOTT1hLkNTU19OVU1CRVJfTU9ERT17Y046Im51bWJlciIsYjphLk5SKyIoJXxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjfHB4fGRlZ3xncmFkfHJhZHx0dXJufHN8bXN8SHp8a0h6fGRwaXxkcGNtfGRwcHgpPyIscjowfSxhLlJNPWEuUkVHRVhQX01PREU9e2NOOiJyZWdleHAiLGI6L1wvLyxlOi9cL1tnaW11eV0qLyxpOi9cbi8sYzpbYS5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbYS5CRV19XX0sYS5UTT1hLlRJVExFX01PREU9e2NOOiJ0aXRsZSIsYjphLklSLHI6MH0sYS5VVE09YS5VTkRFUlNDT1JFX1RJVExFX01PREU9e2NOOiJ0aXRsZSIsYjphLlVJUixyOjB9LGEuTUVUSE9EX0dVQVJEPXtiOiJcXC5cXHMqIithLlVJUixyOjB9LGF9KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInhtbCIsZnVuY3Rpb24ocyl7dmFyIGU9e2VXOiEwLGk6LzwvLHI6MCxjOlt7Y046ImF0dHIiLGI6IltBLVphLXowLTlcXC5fOi1dKyIscjowfSx7YjovPVxzKi8scjowLGM6W3tjTjoic3RyaW5nIixlbmRzUGFyZW50OiEwLHY6W3tiOi8iLyxlOi8iL30se2I6LycvLGU6LycvfSx7YjovW15ccyInPTw+YF0rL31dfV19XX07cmV0dXJue2FsaWFzZXM6WyJodG1sIiwieGh0bWwiLCJyc3MiLCJhdG9tIiwieGpiIiwieHNkIiwieHNsIiwicGxpc3QiLCJ3c2YiXSxjSTohMCxjOlt7Y046Im1ldGEiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHMuQygiXHgzYyEtLSIsIi0tXHgzZSIse3I6MTB9KSx7YjoiPFxcIVxcW0NEQVRBXFxbIixlOiJcXF1cXF0+IixyOjEwfSx7Y046Im1ldGEiLGI6LzxcP3htbC8sZTovXD8+LyxyOjEwfSx7YjovPFw/KHBocCk/LyxlOi9cPz4vLHNMOiJwaHAiLGM6W3tiOiIvXFwqIixlOiJcXCovIixza2lwOiEwfSx7YjonYiInLGU6JyInLHNraXA6ITB9LHtiOiJiJyIsZToiJyIsc2tpcDohMH0scy5pbmhlcml0KHMuQVNNLHtpOm51bGwsY046bnVsbCxjOm51bGwsc2tpcDohMH0pLHMuaW5oZXJpdChzLlFTTSx7aTpudWxsLGNOOm51bGwsYzpudWxsLHNraXA6ITB9KV19LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7bmFtZToic3R5bGUifSxjOltlXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTohMCxzTDpbImNzcyIsInhtbCJdfX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7bmFtZToic2NyaXB0In0sYzpbZV0sc3RhcnRzOntlOiI8XC9zY3JpcHQ+IixyRTohMCxzTDpbImFjdGlvbnNjcmlwdCIsImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIiwidmJzY3JpcHQiXX19LHtjTjoidGFnIixiOiI8Lz8iLGU6Ii8/PiIsYzpbe2NOOiJuYW1lIixiOi9bXlwvPjxcc10rLyxyOjB9LGVdfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJtYXJrZG93biIsZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJtZCIsIm1rZG93biIsIm1rZCJdLGM6W3tjTjoic2VjdGlvbiIsdjpbe2I6Il4jezEsNn0iLGU6IiQifSx7YjoiXi4rP1xcbls9LV17Mix9JCJ9XX0se2I6IjwiLGU6Ij4iLHNMOiJ4bWwiLHI6MH0se2NOOiJidWxsZXQiLGI6Il5cXHMqKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsdjpbe2I6IlxcKi4rP1xcKiJ9LHtiOiJfLis/XyIscjowfV19LHtjTjoicXVvdGUiLGI6Il4+XFxzKyIsZToiJCJ9LHtjTjoiY29kZSIsdjpbe2I6Il5gYGB3KnMqJCIsZToiXmBgYHMqJCJ9LHtiOiJgLis/YCJ9LHtiOiJeKCB7NH18XHQpIixlOiIkIixyOjB9XX0se2I6Il5bLVxcKl17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVtcXChcXFtdLio/W1xcKVxcXV0iLHJCOiEwLGM6W3tjTjoic3RyaW5nIixiOiJcXFsiLGU6IlxcXSIsZUI6ITAsckU6ITAscjowfSx7Y046ImxpbmsiLGI6IlxcXVxcKCIsZToiXFwpIixlQjohMCxlRTohMH0se2NOOiJzeW1ib2wiLGI6IlxcXVxcWyIsZToiXFxdIixlQjohMCxlRTohMH1dLHI6MTB9LHtiOi9eXFtbXlxuXStcXTovLHJCOiEwLGM6W3tjTjoic3ltYm9sIixiOi9cWy8sZTovXF0vLGVCOiEwLGVFOiEwfSx7Y046ImxpbmsiLGI6LzpccyovLGU6LyQvLGVCOiEwfV19XX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImRhcnQiLGZ1bmN0aW9uKGUpe3ZhciB0PXtjTjoic3Vic3QiLHY6W3tiOiJcXCRbQS1aYS16MC05X10rIn1dfSxyPXtjTjoic3Vic3QiLHY6W3tiOiJcXCR7IixlOiJ9In1dLGs6InRydWUgZmFsc2UgbnVsbCB0aGlzIGlzIG5ldyBzdXBlciJ9LG49e2NOOiJzdHJpbmciLHY6W3tiOiJyJycnIixlOiInJycifSx7YjonciIiIicsZTonIiIiJ30se2I6InInIixlOiInIixpOiJcXG4ifSx7YjonciInLGU6JyInLGk6IlxcbiJ9LHtiOiInJyciLGU6IicnJyIsYzpbZS5CRSx0LHJdfSx7YjonIiIiJyxlOiciIiInLGM6W2UuQkUsdCxyXX0se2I6IiciLGU6IiciLGk6IlxcbiIsYzpbZS5CRSx0LHJdfSx7YjonIicsZTonIicsaToiXFxuIixjOltlLkJFLHQscl19XX07ci5jPVtlLkNOTSxuXTtyZXR1cm57azp7a2V5d29yZDoiYXNzZXJ0IGFzeW5jIGF3YWl0IGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY29uc3QgY29udGludWUgZGVmYXVsdCBkbyBlbHNlIGVudW0gZXh0ZW5kcyBmYWxzZSBmaW5hbCBmaW5hbGx5IGZvciBpZiBpbiBpcyBuZXcgbnVsbCByZXRocm93IHJldHVybiBzdXBlciBzd2l0Y2ggc3luYyB0aGlzIHRocm93IHRydWUgdHJ5IHZhciB2b2lkIHdoaWxlIHdpdGggeWllbGQgYWJzdHJhY3QgYXMgZHluYW1pYyBleHBvcnQgZXh0ZXJuYWwgZmFjdG9yeSBnZXQgaW1wbGVtZW50cyBpbXBvcnQgbGlicmFyeSBvcGVyYXRvciBwYXJ0IHNldCBzdGF0aWMgdHlwZWRlZiIsYnVpbHRfaW46InByaW50IENvbXBhcmFibGUgRGF0ZVRpbWUgRHVyYXRpb24gRnVuY3Rpb24gSXRlcmFibGUgSXRlcmF0b3IgTGlzdCBNYXAgTWF0Y2ggTnVsbCBPYmplY3QgUGF0dGVybiBSZWdFeHAgU2V0IFN0b3B3YXRjaCBTdHJpbmcgU3RyaW5nQnVmZmVyIFN0cmluZ1NpbmsgU3ltYm9sIFR5cGUgVXJpIGJvb2wgZG91YmxlIGludCBudW0gZG9jdW1lbnQgd2luZG93IHF1ZXJ5U2VsZWN0b3IgcXVlcnlTZWxlY3RvckFsbCBFbGVtZW50IEVsZW1lbnRMaXN0In0sYzpbbixlLkMoIi9cXCpcXCoiLCJcXCovIix7c0w6Im1hcmtkb3duIn0pLGUuQygiLy8vIiwiJCIse3NMOiJtYXJrZG93biJ9KSxlLkNMQ00sZS5DQkNNLHtjTjoiY2xhc3MiLGJLOiJjbGFzcyBpbnRlcmZhY2UiLGU6InsiLGVFOiEwLGM6W3tiSzoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VVE1dfSxlLkNOTSx7Y046Im1ldGEiLGI6IkBbQS1aYS16XSsifSx7YjoiPT4ifV19fSk7';
-
-String decodeHighlightJs() => String.fromCharCodes(base64Decode(_highlightJs));
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart
index cd994aa..4a2b560f 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart
@@ -116,6 +116,9 @@
 
   /// Return detail text for a fix built from an edge with origin info [origin]
   /// and [fixKind].
+  ///
+  /// Text is meant to be used as the beginning of a sentence. It is written in
+  /// present tense, beginning with a capital letter, not ending in a period.
   String _baseDescriptionForOrigin(
       EdgeOriginInfo origin, NullabilityFixKind fixKind) {
     AstNode node = origin.node;
@@ -162,8 +165,8 @@
     }
 
     if (origin.kind == EdgeOriginKind.listLengthConstructor) {
-      return 'List value type must be nullable because a length is specified,'
-          ' and the list items are initialized as null.';
+      return 'A length is specified in the "List()" constructor and the list '
+          'items are initialized to null';
     }
 
     CompilationUnit unit = node.thisOrAncestorOfType<CompilationUnit>();
@@ -173,10 +176,6 @@
       return 'Used on line $lineNumber, when it is possibly uninitialized';
     }
 
-    if (parent is ArgumentList) {
-      return capitalize('$nullableValue is passed as an argument');
-    }
-
     /// If the [node] is inside the return expression for a function body,
     /// return the function body. Otherwise return `null`.
     FunctionBody findFunctionBody() {
@@ -226,7 +225,9 @@
       }
     } else if (node is InvocationExpression &&
         origin.kind == EdgeOriginKind.namedParameterNotSupplied) {
-      return 'This named parameter was omitted in a call to this function';
+      return 'This named parameter is omitted in a call to this function';
+    } else if (parent is ArgumentList) {
+      return capitalize('$nullableValue is passed as an argument');
     } else if (parent is VariableDeclaration) {
       AstNode grandparent = parent.parent?.parent;
       if (grandparent is FieldDeclaration) {
@@ -271,6 +272,28 @@
       EdgeOriginInfo origin, EdgeInfo edge, NullabilityFixKind fixKind) {
     AstNode node = origin.node;
     NavigationTarget target;
+    TypeAnnotation type = info.typeAnnotationForNode(edge.sourceNode);
+    AstNode typeParent = type?.parent;
+
+    if (typeParent is GenericFunctionType && type == typeParent.returnType) {
+      var description =
+          'A function-typed value with a nullable return type is assigned';
+      target = _proximateTargetForNode(origin.source.fullName, node);
+      return RegionDetail(description, target);
+    }
+    if (typeParent is FormalParameter) {
+      FormalParameterList parameterList =
+          typeParent.parent is DefaultFormalParameter
+              ? typeParent.parent.parent
+              : typeParent.parent;
+      if (parameterList.parent is GenericFunctionType) {
+        var description =
+            'The function-typed element in which this parameter is declared is '
+            'assigned to a function whose matching parameter is nullable';
+        target = _proximateTargetForNode(origin.source.fullName, node);
+        return RegionDetail(description, target);
+      }
+    }
 
     // Some nodes don't need a target; default formal parameters
     // without explicit default values, for example.
@@ -283,7 +306,6 @@
         // link to the either the corresponding parameter in the declaration in
         // the superclass, or the return type in the declaration in that
         // subclass.
-        TypeAnnotation type = info.typeAnnotationForNode(edge.sourceNode);
         if (type != null) {
           CompilationUnit unit = type.thisOrAncestorOfType<CompilationUnit>();
           target = _proximateTargetForNode(
@@ -518,7 +540,7 @@
         if (details.isNotEmpty) {
           TypeAnnotation node = nonNullableType.key;
           regions.add(RegionInfo(
-              RegionType.nonNullableType,
+              RegionType.unchanged,
               mapper.map(node.offset),
               node.length,
               lineInfo.getLocation(node.offset).lineNumber,
@@ -566,18 +588,17 @@
             info != null ? _computeEdits(info, sourceOffset) : [];
         List<RegionDetail> details = _computeDetails(edit);
         var lineNumber = lineInfo.getLocation(sourceOffset).lineNumber;
-        if (length > 0) {
-          if (explanation != null) {
-            regions.add(RegionInfo(RegionType.fix, offset, length, lineNumber,
-                explanation, details,
+        if (explanation != null) {
+          if (length > 0) {
+            regions.add(RegionInfo(RegionType.remove, offset, length,
+                lineNumber, explanation, details,
+                edits: edits));
+          } else {
+            regions.add(RegionInfo(RegionType.add, offset, replacement.length,
+                lineNumber, explanation, details,
                 edits: edits));
           }
         }
-        if (explanation != null) {
-          regions.add(RegionInfo(RegionType.fix, offset, replacement.length,
-              lineNumber, explanation, details,
-              edits: edits));
-        }
         offset += replacement.length;
       }
     }
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_information.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_information.dart
index bcc2979..fe1c5da 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_information.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_information.dart
@@ -23,11 +23,6 @@
   /// A map associating [NodeInformation] with [NullabilityNodeInfo] objects.
   Map<NullabilityNodeInfo, NodeInformation> nodeInformation = {};
 
-  /// A list of the steps in the propagation of nullability information through
-  /// the nullability graph, to report details of the step that was performed
-  /// and why it was performed.
-  final List<PropagationInfo> propagationSteps = [];
-
   /// The instrumentation information that is specific to a single source.
   final Map<Source, SourceInformation> sourceInformation = {};
 
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_listener.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_listener.dart
index 22fd567..8bdc0b8 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_listener.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_listener.dart
@@ -81,12 +81,6 @@
     for (var source in data.sourceInformation.keys) {
       _sourceInfo(source).changes = null;
     }
-    data.propagationSteps.clear();
-  }
-
-  @override
-  void propagationStep(PropagationInfo info) {
-    data.propagationSteps.add(info);
   }
 
   String _filePathForSource(Source source) {
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_renderer.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_renderer.dart
index 75d7725..5386501 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_renderer.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/instrumentation_renderer.dart
@@ -2,11 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/edit/nnbd_migration/dart_page_script.dart';
-import 'package:analysis_server/src/edit/nnbd_migration/dart_page_style.dart';
 import 'package:analysis_server/src/edit/nnbd_migration/migration_info.dart';
 import 'package:analysis_server/src/edit/nnbd_migration/path_mapper.dart';
-import 'package:analysis_server/src/edit/nnbd_migration/unit_link.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/resources/resources.g.dart'
+    as resources;
 import 'package:mustache/mustache.dart' as mustache;
 import 'package:path/path.dart' as path;
 
@@ -30,7 +29,7 @@
       <div class="nav-inner">
         <p class="panel-heading">Navigation</p>
         <p class="root">{{{ root }}}</p>
-{{{ links }}}
+        <div class="nav-tree"></div>
       </div><!-- /nav-inner -->
     </div><!-- /nav -->
     '''
@@ -92,62 +91,12 @@
   String render() {
     Map<String, dynamic> mustacheContext = {
       'root': migrationInfo.includedRoot,
-      'dartPageScript': dartPageScript,
-      'dartPageStyle': dartPageStyle,
-      'links': _renderNavigation(),
+      'dartPageScript': resources.migration_js,
+      'dartPageStyle': resources.migration_css,
       'highlightJsPath': migrationInfo.highlightJsPath,
       'highlightStylePath': migrationInfo.highlightStylePath,
       'generationDate': migrationInfo.migrationDate,
     };
     return _template.renderString(mustacheContext);
   }
-
-  /// Renders the navigation link tree.
-  String _renderNavigation() {
-    var linkData = migrationInfo.unitLinks();
-    var buffer = StringBuffer();
-    _renderNavigationSubtree(linkData, 0, buffer);
-    return buffer.toString();
-  }
-
-  /// Renders the navigation link subtree at [depth].
-  void _renderNavigationSubtree(
-      List<UnitLink> links, int depth, StringBuffer buffer) {
-    var linksGroupedByDirectory = _groupBy(
-        links.where((link) => link.depth > depth),
-        (UnitLink link) => link.pathParts[depth]);
-    // Each subtree is indented four spaces more than its parent: two for the
-    // parent <ul> and two for the parent <li>.
-    var indent = '    ' * depth;
-    buffer.writeln('$indent<ul>');
-    linksGroupedByDirectory
-        .forEach((String directoryName, Iterable<UnitLink> groupedLinks) {
-      buffer.write('$indent  <li class="dir">');
-      buffer.writeln(
-          '<span class="arrow">&#x25BC;</span>&#x1F4C1;$directoryName');
-      _renderNavigationSubtree(groupedLinks, depth + 1, buffer);
-      buffer.writeln('$indent  </li>');
-    });
-    for (var link in links.where((link) => link.depth == depth)) {
-      var modifications =
-          link.modificationCount == 1 ? 'modification' : 'modifications';
-      buffer.writeln('$indent  <li>'
-          '&#x1F4C4;<a href="${link.url}" class="nav-link" data-name="${link.relativePath}">'
-          '${link.fileName}</a> (${link.modificationCount} $modifications)'
-          '</li>');
-    }
-    buffer.writeln('$indent</ul>');
-  }
-}
-
-/// Groups the items in [iterable] by the result of applying [groupFn] to each
-/// item.
-Map<K, List<T>> _groupBy<K, T>(
-    Iterable<T> iterable, K Function(T item) groupFn) {
-  var result = <K, List<T>>{};
-  for (var item in iterable) {
-    var key = groupFn(item);
-    result.putIfAbsent(key, () => <T>[]).add(item);
-  }
-  return result;
 }
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart
index 1007031..528e6bd 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart
@@ -52,11 +52,11 @@
   MigrationInfo(this.units, this.unitMap, this.pathContext, this.includedRoot)
       : migrationDate = DateTime.now().toString();
 
-  /// The path to the highlight.js script, relative to [unitInfo].
-  String get highlightJsPath => PreviewSite.highlightJSPagePath;
+  /// The path to the highlight.pack.js script, relative to [unitInfo].
+  String get highlightJsPath => PreviewSite.highlightJsPath;
 
-  /// The path to the highlight.js stylesheet, relative to [unitInfo].
-  String get highlightStylePath => PreviewSite.highlightCssPagePath;
+  /// The path to the highlight.pack.js stylesheet, relative to [unitInfo].
+  String get highlightStylePath => PreviewSite.highlightCssPath;
 
   /// Return the path to [unit] from [includedRoot], to be used as a display
   /// name for a library.
@@ -68,8 +68,8 @@
     List<UnitLink> links = [];
     for (UnitInfo unit in units) {
       int count = unit.fixRegions.length;
-      links.add(
-          UnitLink(_pathTo(target: unit), computeName(unit).split('/'), count));
+      links.add(UnitLink(
+          _pathTo(target: unit), path.split(computeName(unit)), count));
     }
     return links;
   }
@@ -174,14 +174,15 @@
 
 /// Different types of regions that are called out.
 enum RegionType {
-  // TODO(brianwilkerson) 'fix' indicates whether the code was modified, while
-  //  'nonNullableType' indicates why the code wasn't modified. It would be good
-  //  to be consistent between the "whether" and "why" descriptions.
-  /// This is a region of code that was fixed (changed) in migration.
-  fix,
+  /// This is a region of code that was added in migration.
+  add,
 
-  /// This is a type that was declared non-nullable in migration.
-  nonNullableType,
+  /// This is a region of code that was removed in migration.
+  remove,
+
+  /// This is a region of code that was unchanged in migration; likely a type
+  /// that was declared non-nullable in migration.
+  unchanged,
 }
 
 /// The migration information associated with a single compilation unit.
@@ -212,13 +213,13 @@
   UnitInfo(this.path);
 
   /// Returns the [regions] that represent a fixed (changed) region of code.
-  List<RegionInfo> get fixRegions =>
-      List.of(regions.where((region) => region.regionType == RegionType.fix));
+  List<RegionInfo> get fixRegions => List.of(
+      regions.where((region) => region.regionType != RegionType.unchanged));
 
   /// Returns the [regions] that represent an unchanged type which was
   /// determined to be non-null.
-  List<RegionInfo> get nonNullableTypeRegions => List.of(regions
-      .where((region) => region.regionType == RegionType.nonNullableType));
+  List<RegionInfo> get nonNullableTypeRegions => List.of(
+      regions.where((region) => region.regionType == RegionType.unchanged));
 
   /// Returns the [RegionInfo] at offset [offset].
   // TODO(srawlins): This is O(n), used each time the user clicks on a region.
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/navigation_tree_renderer.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/navigation_tree_renderer.dart
new file mode 100644
index 0000000..8b3464b
--- /dev/null
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/navigation_tree_renderer.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert' show jsonEncode;
+
+import 'package:analysis_server/src/edit/nnbd_migration/migration_info.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/path_mapper.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/unit_link.dart';
+import 'package:path/path.dart' as path;
+
+/// The HTML that is displayed for a region of code.
+class NavigationTreeRenderer {
+  final MigrationInfo migrationInfo;
+
+  /// An object used to map the file paths of analyzed files to the file paths
+  /// of the HTML files used to view the content of those files.
+  final PathMapper pathMapper;
+
+  /// Initializes a newly created region page within the given [site]. The
+  /// [unitInfo] provides the information needed to render the page.
+  NavigationTreeRenderer(this.migrationInfo, this.pathMapper);
+
+  /// Returns the path context used to manipulate paths.
+  path.Context get pathContext => migrationInfo.pathContext;
+
+  /// Renders the navigation link tree.
+  String render() {
+    var linkData = migrationInfo.unitLinks();
+    var tree = _renderNavigationSubtree(linkData, 0);
+    return jsonEncode(tree);
+  }
+
+  /// Renders the navigation link subtree at [depth].
+  List<Object> _renderNavigationSubtree(List<UnitLink> links, int depth) {
+    var linksGroupedByDirectory = _groupBy(
+        links.where((link) => link.depth > depth),
+        (UnitLink link) => link.pathParts[depth]);
+    return [
+      for (var entry in linksGroupedByDirectory.entries)
+        {
+          'type': 'directory',
+          'name': entry.key,
+          'subtree': _renderNavigationSubtree(entry.value, depth + 1),
+        },
+      for (var link in links.where((link) => link.depth == depth))
+        {
+          'type': 'file',
+          'name': link.fileName,
+          'path': link.relativePath,
+          'href': link.url,
+          'editCount': link.editCount,
+        },
+    ];
+  }
+}
+
+/// Groups the items in [iterable] by the result of applying [groupFn] to each
+/// item.
+Map<K, List<T>> _groupBy<K, T>(
+    Iterable<T> iterable, K Function(T item) groupFn) {
+  var result = <K, List<T>>{};
+  for (var item in iterable) {
+    var key = groupFn(item);
+    result.putIfAbsent(key, () => <T>[]).add(item);
+  }
+  return result;
+}
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.css b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.css
new file mode 100644
index 0000000..bc8e473
--- /dev/null
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.css
@@ -0,0 +1,66 @@
+/*
+Date: 24 Fev 2015
+Author: Pedro Oliveira <kanytu@gmail . com>
+*/
+
+.hljs {
+  color: #a9b7c6;
+  background: #282b2e;
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+}
+
+.hljs-number,
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet {
+  color: #6897BB;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-deletion {
+  color: #cc7832;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link {
+  color: #629755;
+}
+
+.hljs-comment,
+.hljs-quote {
+  color: #808080;
+}
+
+.hljs-meta {
+  color: #bbb529;
+}
+
+.hljs-string,
+.hljs-attribute,
+.hljs-addition {
+  color: #6A8759;
+}
+
+.hljs-section,
+.hljs-title,
+.hljs-type {
+  color: #ffc66d;
+}
+
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+  color: #e8bf6a;
+}
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.md b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.md
new file mode 100644
index 0000000..d23468a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.md
@@ -0,0 +1,6 @@
+1. Build and download highlight.zip for Dart. [1]
+2. Extract highlight.zip
+3. find highlight.pack.js and copy into this directory
+4. find styles/androidstudio.css and copy into the directory as highlight.css
+
+[1] https://highlightjs.org/download/
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.pack.js b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.pack.js
new file mode 100644
index 0000000..dbe773f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/highlight.pack.js
@@ -0,0 +1,2 @@
+/*! highlight.js v9.15.10 | BSD3 License | git.io/hljslicense */
+!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],u=Object.keys,N={},c={},n=/^(no-?highlight|plain|text)$/i,s=/\blang(?:uage)?-([\w-]+)\b/i,t=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",relevance:"r",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},b="</span>",h={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function _(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function E(e){return e.nodeName.toLowerCase()}function v(e,n){var t=e&&e.exec(n);return t&&0===t.index}function l(e){return n.test(e)}function g(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function R(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),E(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function i(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(i)}}function m(o){function s(e){return e&&e.source||e}function c(e,n){return new RegExp(s(e),"m"+(o.cI?"i":"")+(n?"g":""))}!function n(t,e){if(!t.compiled){if(t.compiled=!0,t.k=t.k||t.bK,t.k){function r(t,e){o.cI&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n=e.split("|");a[n[0]]=[t,n[1]?Number(n[1]):1]})}var a={};"string"==typeof t.k?r("keyword",t.k):u(t.k).forEach(function(e){r(e,t.k[e])}),t.k=a}t.lR=c(t.l||/\w+/,!0),e&&(t.bK&&(t.b="\\b("+t.bK.split(" ").join("|")+")\\b"),t.b||(t.b=/\B|\b/),t.bR=c(t.b),t.endSameAsBegin&&(t.e=t.b),t.e||t.eW||(t.e=/\B|\b/),t.e&&(t.eR=c(t.e)),t.tE=s(t.e)||"",t.eW&&e.tE&&(t.tE+=(t.e?"|":"")+e.tE)),t.i&&(t.iR=c(t.i)),null==t.r&&(t.r=1),t.c||(t.c=[]),t.c=Array.prototype.concat.apply([],t.c.map(function(e){return function(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return g(n,{v:null},e)})),n.cached_variants||n.eW&&[g(n)]||[n]}("self"===e?t:e)})),t.c.forEach(function(e){n(e,t)}),t.starts&&n(t.starts,e);var i=t.c.map(function(e){return e.bK?"\\.?(?:"+e.b+")\\.?":e.b}).concat([t.tE,t.i]).map(s).filter(Boolean);t.t=i.length?c(function(e,n){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i<e.length;i++){var o=r,c=s(e[i]);for(0<i&&(a+=n);0<c.length;){var u=t.exec(c);if(null==u){a+=c;break}a+=c.substring(0,u.index),c=c.substring(u.index+u[0].length),"\\"==u[0][0]&&u[1]?a+="\\"+String(Number(u[1])+o):(a+=u[0],"("==u[0]&&r++)}}return a}(i,"|"),!0):{exec:function(){return null}}}}(o)}function C(e,n,i,t){function c(e,n,t,r){var a='<span class="'+(r?"":h.classPrefix);return e?(a+=e+'">')+n+(t?"":b):n}function o(){E+=null!=l.sL?function(){var e="string"==typeof l.sL;if(e&&!N[l.sL])return _(g);var n=e?C(l.sL,g,!0,f[l.sL]):O(g,l.sL.length?l.sL:void 0);return 0<l.r&&(R+=n.r),e&&(f[l.sL]=n.top),c(n.language,n.value,!1,!0)}():function(){var e,n,t,r,a,i,o;if(!l.k)return _(g);for(r="",n=0,l.lR.lastIndex=0,t=l.lR.exec(g);t;)r+=_(g.substring(n,t.index)),a=l,i=t,void 0,o=s.cI?i[0].toLowerCase():i[0],(e=a.k.hasOwnProperty(o)&&a.k[o])?(R+=e[1],r+=c(e[0],_(t[0]))):r+=_(t[0]),n=l.lR.lastIndex,t=l.lR.exec(g);return r+_(g.substr(n))}(),g=""}function u(e){E+=e.cN?c(e.cN,"",!0):"",l=Object.create(e,{parent:{value:l}})}function r(e,n){if(g+=e,null==n)return o(),0;var t=function(e,n){var t,r,a;for(t=0,r=n.c.length;t<r;t++)if(v(n.c[t].bR,e))return n.c[t].endSameAsBegin&&(n.c[t].eR=(a=n.c[t].bR.exec(e)[0],new RegExp(a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m"))),n.c[t]}(n,l);if(t)return t.skip?g+=n:(t.eB&&(g+=n),o(),t.rB||t.eB||(g=n)),u(t),t.rB?0:n.length;var r=function e(n,t){if(v(n.eR,t)){for(;n.endsParent&&n.parent;)n=n.parent;return n}if(n.eW)return e(n.parent,t)}(l,n);if(r){var a=l;for(a.skip?g+=n:(a.rE||a.eE||(g+=n),o(),a.eE&&(g=n));l.cN&&(E+=b),l.skip||l.sL||(R+=l.r),(l=l.parent)!==r.parent;);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),u(r.starts)),a.rE?0:n.length}if(function(e,n){return!i&&v(n.iR,e)}(n,l))throw new Error('Illegal lexeme "'+n+'" for mode "'+(l.cN||"<unnamed>")+'"');return g+=n,n.length||1}var s=B(e);if(!s)throw new Error('Unknown language: "'+e+'"');m(s);var a,l=t||s,f={},E="";for(a=l;a!==s;a=a.parent)a.cN&&(E=c(a.cN,"",!0)+E);var g="",R=0;try{for(var d,p,M=0;l.t.lastIndex=M,d=l.t.exec(n);)p=r(n.substring(M,d.index),d[0]),M=d.index+p;for(r(n.substr(M)),a=l;a.parent;a=a.parent)a.cN&&(E+=b);return{r:R,value:E,language:e,top:l}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:_(n)};throw e}}function O(t,e){e=e||h.languages||u(N);var r={r:0,value:_(t)},a=r;return e.filter(B).filter(M).forEach(function(e){var n=C(e,t,!1);n.language=e,n.r>a.r&&(a=n),n.r>r.r&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function d(e){return h.tabReplace||h.useBR?e.replace(t,function(e,n){return h.useBR&&"\n"===e?"<br>":h.tabReplace?n.replace(/\t/g,h.tabReplace):""}):e}function o(e){var n,t,r,a,i,o=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=s.exec(i))return B(t[1])?t[1]:"no-highlight";for(n=0,r=(i=i.split(/\s+/)).length;n<r;n++)if(l(a=i[n])||B(a))return a}(e);l(o)||(h.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):n=e,i=n.textContent,r=o?C(o,i,!0):O(i),(t=R(n)).length&&((a=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=r.value,r.value=function(e,n,t){var r=0,a="",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function c(e){a+="<"+E(e)+f.map.call(e.attributes,function(e){return" "+e.nodeName+'="'+_(e.value).replace('"',"&quot;")+'"'}).join("")+">"}function u(e){a+="</"+E(e)+">"}function s(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var l=o();if(a+=_(t.substring(r,l[0].offset)),r=l[0].offset,l===e){for(i.reverse().forEach(u);s(l.splice(0,1)[0]),(l=o())===e&&l.length&&l[0].offset===r;);i.reverse().forEach(c)}else"start"===l[0].event?i.push(l[0].node):i.pop(),s(l.splice(0,1)[0])}return a+_(t.substr(r))}(t,R(a),i)),r.value=d(r.value),e.innerHTML=r.value,e.className=function(e,n,t){var r=n?c[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}(e.className,o,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function p(){if(!p.called){p.called=!0;var e=document.querySelectorAll("pre code");f.forEach.call(e,o)}}function B(e){return e=(e||"").toLowerCase(),N[e]||N[c[e]]}function M(e){var n=B(e);return n&&!n.disableAutodetect}return a.highlight=C,a.highlightAuto=O,a.fixMarkup=d,a.highlightBlock=o,a.configure=function(e){h=g(h,e)},a.initHighlighting=p,a.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",p,!1),addEventListener("load",p,!1)},a.registerLanguage=function(n,e){var t=N[n]=e(a);i(t),t.aliases&&t.aliases.forEach(function(e){c[e]=n})},a.listLanguages=function(){return u(N)},a.getLanguage=B,a.autoDetection=M,a.inherit=g,a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",r:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,r:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,r:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,r:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,r:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,r:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,r:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,r:0},a});hljs.registerLanguage("xml",function(s){var e={eW:!0,i:/</,r:0,c:[{cN:"attr",b:"[A-Za-z0-9\\._:-]+",r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},s.inherit(s.ASM,{i:null,cN:null,c:null,skip:!0}),s.inherit(s.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[e],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[e],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml","vbscript"]}},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},e]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^\\s*([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"}]},r={cN:"subst",v:[{b:"\\${",e:"}"}],k:"true false null this is new super"},n={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t,r]},{b:'"""',e:'"""',c:[e.BE,t,r]},{b:"'",e:"'",i:"\\n",c:[e.BE,t,r]},{b:'"',e:'"',i:"\\n",c:[e.BE,t,r]}]};r.c=[e.CNM,n];return{k:{keyword:"assert async await break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch sync this throw true try var void while with yield abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"},c:[n,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"},{b:"=>"}]}});
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/dart_page_style.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css
similarity index 85%
rename from pkg/analysis_server/lib/src/edit/nnbd_migration/dart_page_style.dart
rename to pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css
index c9feedb..3963f24 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/dart_page_style.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css
@@ -1,8 +1,7 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
+/* Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file  */
+/* for details. All rights reserved. Use of this source code is governed by a */
+/* BSD-style license that can be found in the LICENSE file.                   */
 
-const dartPageStyle = r'''
 body {
   background-color: black;
   color: white;
@@ -82,6 +81,7 @@
 
 .nav-inner li:not(.dir) {
   margin-left: 20px;
+  margin-bottom: 3px;
 }
 
 .nav-inner li.dir .arrow {
@@ -117,6 +117,19 @@
   text-decoration: none;
 }
 
+.edit-count {
+  background-color: #cccc00;
+  border-radius: 15px;
+  color: #000000;
+  display: inline-block;
+  font-size: 11px;
+  font-weight: 600;
+  margin-left: 5px;
+  min-width: 25px;
+  padding: 5px 0;
+  text-align: center;
+}
+
 .content {
   flex: 0 1 auto;
   font-family: monospace;
@@ -193,7 +206,7 @@
 }
 
 .regions tr.highlight td:last-child {
-  background-color: rgba(0, 0, 128, 0.5);
+  background-color: #444444;
 }
 
 .regions td.line-no {
@@ -207,7 +220,7 @@
 }
 
 .regions tr.highlight td.line-no {
-  border-right: solid #0000ff 2px;
+  border-right: solid #cccccc 2px;
 }
 
 .region {
@@ -217,13 +230,17 @@
   z-index: 200;
 }
 
-.region.fix-region {
-  /* Green means this region was added. */
+.region.added-region {
   background-color: #ccffcc;
   color: #003300;
 }
 
-.region.non-nullable-type-region {
+.region.removed-region {
+  background-color: #ff6666;
+  color: #001100;
+}
+
+.region.unchanged-region {
   background-color: rgba(0, 0, 0, 0.3);
   border-bottom: solid 2px #cccccc;
   /* Invisible text; use underlying highlighting. */
@@ -232,14 +249,6 @@
   line-height: 1;
 }
 
-/**
-  * TODO(srawlins): Stop shipping tooltips as hidden DOM. Instead, request them
-  * on each click.
-  */
-.region .tooltip {
-  display: none;
-}
-
 .target {
   background-color: #FFFF99;
   color: black;
@@ -297,7 +306,10 @@
   text-indent: -21px;
 }
 
+.edit-list .edit-link {
+  cursor: pointer;
+}
+
 .footer {
   padding: 8px 8px 100px 8px;
 }
-''';
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/dart_page_script.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.js
similarity index 60%
rename from pkg/analysis_server/lib/src/edit/nnbd_migration/dart_page_script.dart
rename to pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.js
index f123079..a2c3c85 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/dart_page_script.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.js
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-const dartPageScript = r'''
 function getOffset(location) {
   const root = document.querySelector(".root").textContent;
   return new URL(location, "file://" + root + "/dummy.txt")
@@ -16,13 +15,19 @@
 }
 
 // Remove highlighting from [offset].
-function removeHighlight(offset) {
+function removeHighlight(offset, lineNumber) {
   if (offset != null) {
     const anchor = document.getElementById("o" + offset);
     if (anchor != null) {
       anchor.classList.remove("target");
     }
   }
+  if (lineNumber != null) {
+    const line = document.querySelector(".line-" + lineNumber);
+    if (line != null) {
+      line.parentNode.classList.remove("highlight");
+    }
+  }
 }
 
 // Return the absolute path of [path], assuming [path] is relative to [root].
@@ -46,14 +51,54 @@
   }
 }
 
+// Write the contents of the Edit List, from JSON data [editListData].
+function writeEditList(editListData) {
+  const editList = document.querySelector(".edit-list .panel-content");
+  editList.innerHTML = "";
+  const p = editList.appendChild(document.createElement("p"));
+  const countElement = p.appendChild(document.createElement("strong"));
+  const editCount = editListData["editCount"];
+  countElement.appendChild(document.createTextNode(editCount));
+  if (editCount == 1) {
+    p.appendChild(document.createTextNode(
+        " edit was made to this file. Click the edit's checkbox to toggle " +
+        "its reviewed state."));
+  } else {
+    p.appendChild(document.createTextNode(
+        " edits were made to this file. Click an edit's checkbox to toggle " +
+        "its reviewed state."));
+  }
+  for (const edit of editListData["edits"]) {
+    const editP = editList.appendChild(document.createElement("p"));
+    editP.classList.add("edit");
+    const checkbox = editP.appendChild(document.createElement("input"));
+    checkbox.setAttribute("type", "checkbox");
+    checkbox.setAttribute("title", "Click to mark reviewed");
+    checkbox.setAttribute("disabled", "disabled");
+    editP.appendChild(document.createTextNode(
+        `line ${edit["line"]}: ${edit["explanation"]}. `));
+    const a = editP.appendChild(document.createElement("a"));
+    a.classList.add("edit-link");
+    const offset = edit["offset"];
+    a.dataset.offset = offset;
+    const line = edit["line"];
+    a.dataset.line = line;
+    a.appendChild(document.createTextNode("[view]"));
+    a.onclick = (event) => {
+      navigate(window.location.pathname, offset, line,
+          () => { pushState(window.location.pathname, offset, line) });
+      loadRegionExplanation(a);
+    };
+  }
+}
+
 // Load data from [data] into the .code and the .regions divs.
 function writeCodeAndRegions(data) {
   const regions = document.querySelector(".regions");
   const code = document.querySelector(".code");
-  const editList = document.querySelector(".edit-list .panel-content");
   regions.innerHTML = data["regions"];
   code.innerHTML = data["navContent"];
-  editList.innerHTML = data["editList"];
+  writeEditList(data["editList"]);
   highlightAllCode();
   addClickHandlers(".code");
   addClickHandlers(".regions");
@@ -64,46 +109,60 @@
 // If [callback] is present, it will be called after the server response has
 // been processed, and the content has been updated on the page.
 function navigate(path, offset, lineNumber, callback) {
-  removeHighlight(offset);
+  const currentOffset = getOffset(window.location.href);
+  const currentLineNumber = getLine(window.location.href);
+  removeHighlight(currentOffset, currentLineNumber);
   if (path == window.location.pathname) {
     // Navigating to same file; just scroll into view.
-    maybeScrollIntoView(offset, lineNumber);
+    maybeScrollToAndHighlight(offset, lineNumber);
+    if (callback !== undefined) {
+      callback();
+    }
   } else {
     loadFile(path, offset, lineNumber, callback);
   }
 }
 
+function maybeScrollIntoView(element) {
+  const rect = element.getBoundingClientRect();
+  // TODO(srawlins): Only scroll smoothly when on the same page.
+  if (rect.bottom > window.innerHeight) {
+    element.scrollIntoView({behavior: "smooth", block: "end"});
+  }
+  if (rect.top < 0) {
+    element.scrollIntoView({behavior: "smooth"});
+  }
+}
+
 // Scroll target with id [offset] into view if it is not currently in view.
 //
 // If [offset] is null, instead scroll the "unit-name" header, at the top of the
 // page, into view.
 //
-// Also add the "target" class, highlighting the target.
-function maybeScrollIntoView(offset, lineNumber) {
+// Also add the "target" class, highlighting the target. Also add the
+// "highlight" class to the entire line on which the target lies.
+function maybeScrollToAndHighlight(offset, lineNumber) {
   var target;
+  var line;
   if (offset !== null) {
     target = document.getElementById("o" + offset);
+    line = document.querySelector(".line-" + lineNumber);
+    if (target !== null) {
+      maybeScrollIntoView(target);
+      target.classList.add("target");
+    } else if (line != null) {
+      // If the target doesn't exist, but the line does, scroll that into view
+      // instead.
+      maybeScrollIntoView(line);
+    }
+    if (line != null) {
+      line.parentNode.classList.add("highlight");
+    }
   } else {
     // If no offset is given, this is likely a navigation link, and we need to
     // scroll back to the top of the page.
     target = document.getElementById("unit-name");
-  }
-  if (target != null) {
-    const rect = target.getBoundingClientRect();
-    // TODO(srawlins): Only scroll smoothly when on the same page.
-    if (rect.bottom > window.innerHeight) {
-      target.scrollIntoView({behavior: "smooth", block: "end"});
-    }
-    if (rect.top < 0) {
-      target.scrollIntoView({behavior: "smooth"});
-    }
-    if (target !== document.getElementById("unit-name")) {
-      target.classList.add("target");
-      if (lineNumber != null) {
-        const line = document.querySelector(".line-" + lineNumber);
-        line.parentNode.classList.add("highlight");
-      }
-    }
+    maybeScrollIntoView(target);
   }
 }
 
@@ -118,7 +177,7 @@
     if (xhr.status === 200) {
       const response = JSON.parse(xhr.responseText);
       writeCodeAndRegions(response);
-      maybeScrollIntoView(offset, lineNumber);
+      maybeScrollToAndHighlight(offset, lineNumber);
       updatePage(path, offset);
       if (callback !== undefined) {
         callback();
@@ -169,71 +228,135 @@
   });
 }
 
+function addArrowClickHandler(arrow) {
+  const childList = arrow.parentNode.querySelector(":scope > ul");
+  // Animating height from "auto" to "0" is not supported by CSS [1], so all we
+  // have are hacks. The `* 2` allows for events in which the list grows in
+  // height when resized, with additional text wrapping.
+  // [1] https://css-tricks.com/using-css-transitions-auto-dimensions/
+  childList.style.maxHeight = childList.offsetHeight * 2 + "px";
+  arrow.onclick = (event) => {
+    if (!childList.classList.contains("collapsed")) {
+      childList.classList.add("collapsed");
+      arrow.classList.add("collapsed");
+    } else {
+      childList.classList.remove("collapsed");
+      arrow.classList.remove("collapsed");
+    }
+  };
+}
+
+function handleNavLinkClick(event) {
+  const path = absolutePath(event.currentTarget.getAttribute("href"));
+  const offset = getOffset(event.currentTarget.getAttribute("href"));
+  const lineNumber = getLine(event.currentTarget.getAttribute("href"));
+  if (offset !== null) {
+    navigate(path, offset, lineNumber,
+        () => { pushState(path, offset, lineNumber) });
+  } else {
+    navigate(path, null, null, () => { pushState(path, null, null) });
+  }
+  event.preventDefault();
+}
+
+function handlePostLinkClick(event) {
+  // Directing the server to produce an edit; request it, then do work with
+  // the response.
+  const path = absolutePath(event.currentTarget.getAttribute("href"));
+  const xhr = new XMLHttpRequest();
+  xhr.open("POST", path);
+  xhr.setRequestHeader("Content-Type", "application/json");
+  xhr.onload = function() {
+    if (xhr.status === 200) {
+      // Likely request new navigation and file content.
+    } else {
+      alert("Request failed; status of " + xhr.status);
+    }
+  };
+  xhr.onerror = function(e) {
+    alert(`Could not load ${path}; preview server might be disconnected.`);
+  };
+  xhr.send();
+}
+
 function addClickHandlers(parentSelector) {
   const parentElement = document.querySelector(parentSelector);
+
   const navLinks = parentElement.querySelectorAll(".nav-link");
   navLinks.forEach((link) => {
-    link.onclick = (event) => {
-      const path = absolutePath(event.currentTarget.getAttribute("href"));
-      const offset = getOffset(event.currentTarget.getAttribute("href"));
-      const lineNumber = getLine(event.currentTarget.getAttribute("href"));
-      if (offset !== null) {
-        navigate(path, offset, lineNumber,
-            () => { pushState(path, offset, lineNumber) });
-      } else {
-        navigate(path, null, null, () => { pushState(path, null, null) });
-      }
-      event.preventDefault();
-    };
+    link.onclick = handleNavLinkClick;
   });
+
   const regions = parentElement.querySelectorAll(".region");
   regions.forEach((region) => {
     region.onclick = (event) => {
       loadRegionExplanation(region);
     };
   });
-  const navArrows = parentElement.querySelectorAll(".arrow");
-  navArrows.forEach((arrow) => {
-    const childList = arrow.parentNode.querySelector(":scope > ul");
-    // Animating height from "auto" to "0" is not supported by CSS [1], so all
-    // we have are hacks. The `* 2` allows for events in which the list grows in
-    // height when resized, with additional text wrapping.
-    // [1] https://css-tricks.com/using-css-transitions-auto-dimensions/
-    childList.style.maxHeight = childList.offsetHeight * 2 + "px";
-    arrow.onclick = (event) => {
-      if (!childList.classList.contains("collapsed")) {
-        childList.classList.add("collapsed");
-        arrow.classList.add("collapsed");
-      } else {
-        childList.classList.remove("collapsed");
-        arrow.classList.remove("collapsed");
-      }
-    };
-  });
+
   const postLinks = parentElement.querySelectorAll(".post-link");
   postLinks.forEach((link) => {
-    link.onclick = (event) => {
-      // Directing the server to produce an edit; request it, then do work with
-      // the response.
-      const path = absolutePath(event.currentTarget.getAttribute("href"));
-      const xhr = new XMLHttpRequest();
-      xhr.open("POST", path);
-      xhr.setRequestHeader("Content-Type", "application/json");
-      xhr.onload = function() {
-        if (xhr.status === 200) {
-          // Likely request new navigation and file content.
-        } else {
-          alert("Request failed; status of " + xhr.status);
-        }
-      };
-      xhr.onerror = function(e) {
-        alert(`Could not load ${path}; preview server might be disconnected.`);
-      };
-      xhr.send();
-    };
+    link.onclick = handlePostLinkClick;
   });
 }
 
+function writeNavigationSubtree(parentElement, tree) {
+  const ul = parentElement.appendChild(document.createElement('ul'));
+  for (const entity of tree) {
+    const li = ul.appendChild(document.createElement('li'));
+    if (entity["type"] == "directory") {
+      li.classList.add("dir");
+      const arrow = li.appendChild(document.createElement('span'));
+      arrow.classList.add("arrow");
+      arrow.innerHTML = "&#x25BC;";
+      const icon = li.appendChild(document.createElement('span'));
+      icon.innerHTML = "&#x1F4C1;";
+      li.appendChild(document.createTextNode(entity["name"]));
+      writeNavigationSubtree(li, entity["subtree"]);
+      addArrowClickHandler(arrow);
+    } else {
+      li.innerHTML = "&#x1F4C4;";
+      const a = li.appendChild(document.createElement("a"));
+      a.classList.add("nav-link");
+      a.dataset.name = entity["path"];
+      a.setAttribute("href", entity["href"]);
+      a.appendChild(document.createTextNode(entity["name"]));
+      a.onclick = handleNavLinkClick;
+      const editCount = entity["editCount"];
+      if (editCount > 0) {
+        const editsBadge = li.appendChild(document.createElement("span"));
+        editsBadge.classList.add("edit-count");
+        const edits = editCount == 1 ? 'edit' : 'edits';
+        editsBadge.setAttribute("title", `${editCount} ${edits}`);
+        editsBadge.appendChild(document.createTextNode(editCount));
+      }
+    }
+  }
+}
+
+// Load the navigation tree into the ".nav-tree" div.
+function loadNavigationTree(region) {
+  // Request the navigation tree, then do work with the response.
+  const xhr = new XMLHttpRequest();
+  const path = "/_preview/navigationTree.json";
+  xhr.open("GET", path);
+  xhr.setRequestHeader("Content-Type", "application/json");
+  xhr.onload = function() {
+    if (xhr.status === 200) {
+      const response = JSON.parse(xhr.responseText);
+      const navTree = document.querySelector(".nav-tree");
+      navTree.innerHTML = "";
+      writeNavigationSubtree(navTree, response);
+    } else {
+      alert(`Request failed; status of ${xhr.status}`);
+    }
+  };
+  xhr.onerror = function(e) {
+    alert(`Could not load ${path}; preview server might be disconnected.`);
+  };
+  xhr.send();
+}
+
 function writeRegionExplanation(response) {
   const editPanel = document.querySelector(".edit-panel .panel-content");
   editPanel.innerHTML = "";
@@ -267,7 +390,7 @@
         const a = detailItem.appendChild(document.createElement("a"));
         a.appendChild(document.createTextNode(detail["link"]["text"]));
         a.setAttribute("href", detail["link"]["href"]);
-        a.classList.add("post-link");
+        a.classList.add("nav-link");
         detailItem.appendChild(document.createTextNode(")"));
       }
     }
@@ -339,13 +462,13 @@
   const offset = getOffset(window.location.href);
   const lineNumber = getLine(window.location.href);
   const root = document.querySelector(".root").textContent;
+  loadNavigationTree();
   if (path !== "/" && path !== root) {
     // TODO(srawlins): replaceState?
     loadFile(path, offset, lineNumber,
         () => { pushState(path, offset, lineNumber) });
   }
   resizePanels();
-  addClickHandlers(".nav-panel");
 });
 
 window.addEventListener("popstate", (event) => {
@@ -401,4 +524,3 @@
   }
   debounce(resizePanels, 200)();
 });
-''';
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart
new file mode 100644
index 0000000..86112bf
--- /dev/null
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart
@@ -0,0 +1,675 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file is generated; don't edit it directly.
+//
+// See pkg/analysis_server/tool/nnbd_migration/generate_resources.dart for how
+// to edit the source content and for re-generation instructions.
+
+import 'dart:convert' as convert;
+
+String get highlight_css {
+  return _highlight_css ??= _decode(_highlight_css_base64);
+}
+
+String get highlight_pack_js {
+  return _highlight_pack_js ??= _decode(_highlight_pack_js_base64);
+}
+
+String get migration_js {
+  return _migration_js ??= _decode(_migration_js_base64);
+}
+
+String get migration_css {
+  return _migration_css ??= _decode(_migration_css_base64);
+}
+
+String _decode(String data) {
+  data = data.replaceAll('\n', '').trim();
+  return String.fromCharCodes(convert.base64Decode(data));
+}
+
+String _highlight_css;
+String _highlight_css_base64 = '''
+LyoKRGF0ZTogMjQgRmV2IDIwMTUKQXV0aG9yOiBQZWRybyBPbGl2ZWlyYSA8a2FueXR1QGdtYWlsIC4g
+Y29tPgoqLwoKLmhsanMgewogIGNvbG9yOiAjYTliN2M2OwogIGJhY2tncm91bmQ6ICMyODJiMmU7CiAg
+ZGlzcGxheTogYmxvY2s7CiAgb3ZlcmZsb3cteDogYXV0bzsKICBwYWRkaW5nOiAwLjVlbTsKfQoKLmhs
+anMtbnVtYmVyLAouaGxqcy1saXRlcmFsLAouaGxqcy1zeW1ib2wsCi5obGpzLWJ1bGxldCB7CiAgY29s
+b3I6ICM2ODk3QkI7Cn0KCi5obGpzLWtleXdvcmQsCi5obGpzLXNlbGVjdG9yLXRhZywKLmhsanMtZGVs
+ZXRpb24gewogIGNvbG9yOiAjY2M3ODMyOwp9CgouaGxqcy12YXJpYWJsZSwKLmhsanMtdGVtcGxhdGUt
+dmFyaWFibGUsCi5obGpzLWxpbmsgewogIGNvbG9yOiAjNjI5NzU1Owp9CgouaGxqcy1jb21tZW50LAou
+aGxqcy1xdW90ZSB7CiAgY29sb3I6ICM4MDgwODA7Cn0KCi5obGpzLW1ldGEgewogIGNvbG9yOiAjYmJi
+NTI5Owp9CgouaGxqcy1zdHJpbmcsCi5obGpzLWF0dHJpYnV0ZSwKLmhsanMtYWRkaXRpb24gewogIGNv
+bG9yOiAjNkE4NzU5Owp9CgouaGxqcy1zZWN0aW9uLAouaGxqcy10aXRsZSwKLmhsanMtdHlwZSB7CiAg
+Y29sb3I6ICNmZmM2NmQ7Cn0KCi5obGpzLW5hbWUsCi5obGpzLXNlbGVjdG9yLWlkLAouaGxqcy1zZWxl
+Y3Rvci1jbGFzcyB7CiAgY29sb3I6ICNlOGJmNmE7Cn0KCi5obGpzLWVtcGhhc2lzIHsKICBmb250LXN0
+eWxlOiBpdGFsaWM7Cn0KCi5obGpzLXN0cm9uZyB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0K
+''';
+
+String _highlight_pack_js;
+String _highlight_pack_js_base64 = '''
+LyohIGhpZ2hsaWdodC5qcyB2OS4xNS4xMCB8IEJTRDMgTGljZW5zZSB8IGdpdC5pby9obGpzbGljZW5z
+ZSAqLwohZnVuY3Rpb24oZSl7dmFyIG49Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8Im9i
+amVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmOyJ1bmRlZmluZWQiPT10eXBlb2YgZXhwb3J0c3x8ZXhwb3J0
+cy5ub2RlVHlwZT9uJiYobi5obGpzPWUoe30pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmlu
+ZS5hbWQmJmRlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBuLmhsanN9KSk6ZShleHBvcnRzKX0oZnVu
+Y3Rpb24oYSl7dmFyIGY9W10sdT1PYmplY3Qua2V5cyxOPXt9LGM9e30sbj0vXihuby0/aGlnaGxpZ2h0
+fHBsYWlufHRleHQpJC9pLHM9L1xibGFuZyg/OnVhZ2UpPy0oW1x3LV0rKVxiL2ksdD0vKCheKDxbXj5d
+Kz58XHR8KSt8KD86XG4pKSkvZ20scj17Y2FzZV9pbnNlbnNpdGl2ZToiY0kiLGxleGVtZXM6ImwiLGNv
+bnRhaW5zOiJjIixrZXl3b3JkczoiayIsc3ViTGFuZ3VhZ2U6InNMIixjbGFzc05hbWU6ImNOIixiZWdp
+bjoiYiIsYmVnaW5LZXl3b3JkczoiYksiLGVuZDoiZSIsZW5kc1dpdGhQYXJlbnQ6ImVXIixpbGxlZ2Fs
+OiJpIixleGNsdWRlQmVnaW46ImVCIixleGNsdWRlRW5kOiJlRSIscmV0dXJuQmVnaW46InJCIixyZXR1
+cm5FbmQ6InJFIixyZWxldmFuY2U6InIiLHZhcmlhbnRzOiJ2IixJREVOVF9SRToiSVIiLFVOREVSU0NP
+UkVfSURFTlRfUkU6IlVJUiIsTlVNQkVSX1JFOiJOUiIsQ19OVU1CRVJfUkU6IkNOUiIsQklOQVJZX05V
+TUJFUl9SRToiQk5SIixSRV9TVEFSVEVSU19SRToiUlNSIixCQUNLU0xBU0hfRVNDQVBFOiJCRSIsQVBP
+U19TVFJJTkdfTU9ERToiQVNNIixRVU9URV9TVFJJTkdfTU9ERToiUVNNIixQSFJBU0FMX1dPUkRTX01P
+REU6IlBXTSIsQ19MSU5FX0NPTU1FTlRfTU9ERToiQ0xDTSIsQ19CTE9DS19DT01NRU5UX01PREU6IkNC
+Q00iLEhBU0hfQ09NTUVOVF9NT0RFOiJIQ00iLE5VTUJFUl9NT0RFOiJOTSIsQ19OVU1CRVJfTU9ERToi
+Q05NIixCSU5BUllfTlVNQkVSX01PREU6IkJOTSIsQ1NTX05VTUJFUl9NT0RFOiJDU1NOTSIsUkVHRVhQ
+X01PREU6IlJNIixUSVRMRV9NT0RFOiJUTSIsVU5ERVJTQ09SRV9USVRMRV9NT0RFOiJVVE0iLENPTU1F
+TlQ6IkMiLGJlZ2luUmU6ImJSIixlbmRSZToiZVIiLGlsbGVnYWxSZToiaVIiLGxleGVtZXNSZToibFIi
+LHRlcm1pbmF0b3JzOiJ0Iix0ZXJtaW5hdG9yX2VuZDoidEUifSxiPSI8L3NwYW4+IixoPXtjbGFzc1By
+ZWZpeDoiaGxqcy0iLHRhYlJlcGxhY2U6bnVsbCx1c2VCUjohMSxsYW5ndWFnZXM6dm9pZCAwfTtmdW5j
+dGlvbiBfKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsi
+KS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBFKGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93
+ZXJDYXNlKCl9ZnVuY3Rpb24gdihlLG4pe3ZhciB0PWUmJmUuZXhlYyhuKTtyZXR1cm4gdCYmMD09PXQu
+aW5kZXh9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbi50ZXN0KGUpfWZ1bmN0aW9uIGcoZSl7dmFyIG4sdD17
+fSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IobiBpbiBlKXRbbl09
+ZVtuXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ZvcihuIGluIGUpdFtuXT1lW25dfSksdH1m
+dW5jdGlvbiBSKGUpe3ZhciBhPVtdO3JldHVybiBmdW5jdGlvbiBlKG4sdCl7Zm9yKHZhciByPW4uZmly
+c3RDaGlsZDtyO3I9ci5uZXh0U2libGluZykzPT09ci5ub2RlVHlwZT90Kz1yLm5vZGVWYWx1ZS5sZW5n
+dGg6MT09PXIubm9kZVR5cGUmJihhLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnQsbm9kZTpyfSks
+dD1lKHIsdCksRShyKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0Lyl8fGEucHVzaCh7ZXZlbnQ6InN0b3Ai
+LG9mZnNldDp0LG5vZGU6cn0pKTtyZXR1cm4gdH0oZSwwKSxhfWZ1bmN0aW9uIGkoZSl7aWYociYmIWUu
+bGFuZ0FwaVJlc3RvcmVkKXtmb3IodmFyIG4gaW4gZS5sYW5nQXBpUmVzdG9yZWQ9ITAscillW25dJiYo
+ZVtyW25dXT1lW25dKTsoZS5jfHxbXSkuY29uY2F0KGUudnx8W10pLmZvckVhY2goaSl9fWZ1bmN0aW9u
+IG0obyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5zb3VyY2V8fGV9ZnVuY3Rpb24gYyhlLG4pe3Jl
+dHVybiBuZXcgUmVnRXhwKHMoZSksIm0iKyhvLmNJPyJpIjoiIikrKG4/ImciOiIiKSl9IWZ1bmN0aW9u
+IG4odCxlKXtpZighdC5jb21waWxlZCl7aWYodC5jb21waWxlZD0hMCx0Lms9dC5rfHx0LmJLLHQuayl7
+ZnVuY3Rpb24gcih0LGUpe28uY0kmJihlPWUudG9Mb3dlckNhc2UoKSksZS5zcGxpdCgiICIpLmZvckVh
+Y2goZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdCgifCIpO2FbblswXV09W3QsblsxXT9OdW1iZXIoblsx
+XSk6MV19KX12YXIgYT17fTsic3RyaW5nIj09dHlwZW9mIHQuaz9yKCJrZXl3b3JkIix0LmspOnUodC5r
+KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IoZSx0LmtbZV0pfSksdC5rPWF9dC5sUj1jKHQubHx8L1x3Ky8s
+ITApLGUmJih0LmJLJiYodC5iPSJcXGIoIit0LmJLLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIiks
+dC5ifHwodC5iPS9cQnxcYi8pLHQuYlI9Yyh0LmIpLHQuZW5kU2FtZUFzQmVnaW4mJih0LmU9dC5iKSx0
+LmV8fHQuZVd8fCh0LmU9L1xCfFxiLyksdC5lJiYodC5lUj1jKHQuZSkpLHQudEU9cyh0LmUpfHwiIix0
+LmVXJiZlLnRFJiYodC50RSs9KHQuZT8ifCI6IiIpK2UudEUpKSx0LmkmJih0LmlSPWModC5pKSksbnVs
+bD09dC5yJiYodC5yPTEpLHQuY3x8KHQuYz1bXSksdC5jPUFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBw
+bHkoW10sdC5jLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4udiYmIW4u
+Y2FjaGVkX3ZhcmlhbnRzJiYobi5jYWNoZWRfdmFyaWFudHM9bi52Lm1hcChmdW5jdGlvbihlKXtyZXR1
+cm4gZyhuLHt2Om51bGx9LGUpfSkpLG4uY2FjaGVkX3ZhcmlhbnRzfHxuLmVXJiZbZyhuKV18fFtuXX0o
+InNlbGYiPT09ZT90OmUpfSkpLHQuYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe24oZSx0KX0pLHQuc3RhcnRz
+JiZuKHQuc3RhcnRzLGUpO3ZhciBpPXQuYy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYks/IlxcLj8o
+PzoiK2UuYisiKVxcLj8iOmUuYn0pLmNvbmNhdChbdC50RSx0LmldKS5tYXAocykuZmlsdGVyKEJvb2xl
+YW4pO3QudD1pLmxlbmd0aD9jKGZ1bmN0aW9uKGUsbil7Zm9yKHZhciB0PS9cWyg/OlteXFxcXV18XFwu
+KSpcXXxcKFw/P3xcXChbMS05XVswLTldKil8XFwuLyxyPTAsYT0iIixpPTA7aTxlLmxlbmd0aDtpKysp
+e3ZhciBvPXIsYz1zKGVbaV0pO2ZvcigwPGkmJihhKz1uKTswPGMubGVuZ3RoOyl7dmFyIHU9dC5leGVj
+KGMpO2lmKG51bGw9PXUpe2ErPWM7YnJlYWt9YSs9Yy5zdWJzdHJpbmcoMCx1LmluZGV4KSxjPWMuc3Vi
+c3RyaW5nKHUuaW5kZXgrdVswXS5sZW5ndGgpLCJcXCI9PXVbMF1bMF0mJnVbMV0/YSs9IlxcIitTdHJp
+bmcoTnVtYmVyKHVbMV0pK28pOihhKz11WzBdLCIoIj09dVswXSYmcisrKX19cmV0dXJuIGF9KGksInwi
+KSwhMCk6e2V4ZWM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19fX0obyl9ZnVuY3Rpb24gQyhlLG4saSx0
+KXtmdW5jdGlvbiBjKGUsbix0LHIpe3ZhciBhPSc8c3BhbiBjbGFzcz0iJysocj8iIjpoLmNsYXNzUHJl
+Zml4KTtyZXR1cm4gZT8oYSs9ZSsnIj4nKStuKyh0PyIiOmIpOm59ZnVuY3Rpb24gbygpe0UrPW51bGwh
+PWwuc0w/ZnVuY3Rpb24oKXt2YXIgZT0ic3RyaW5nIj09dHlwZW9mIGwuc0w7aWYoZSYmIU5bbC5zTF0p
+cmV0dXJuIF8oZyk7dmFyIG49ZT9DKGwuc0wsZywhMCxmW2wuc0xdKTpPKGcsbC5zTC5sZW5ndGg/bC5z
+TDp2b2lkIDApO3JldHVybiAwPGwuciYmKFIrPW4uciksZSYmKGZbbC5zTF09bi50b3ApLGMobi5sYW5n
+dWFnZSxuLnZhbHVlLCExLCEwKX0oKTpmdW5jdGlvbigpe3ZhciBlLG4sdCxyLGEsaSxvO2lmKCFsLmsp
+cmV0dXJuIF8oZyk7Zm9yKHI9IiIsbj0wLGwubFIubGFzdEluZGV4PTAsdD1sLmxSLmV4ZWMoZyk7dDsp
+cis9XyhnLnN1YnN0cmluZyhuLHQuaW5kZXgpKSxhPWwsaT10LHZvaWQgMCxvPXMuY0k/aVswXS50b0xv
+d2VyQ2FzZSgpOmlbMF0sKGU9YS5rLmhhc093blByb3BlcnR5KG8pJiZhLmtbb10pPyhSKz1lWzFdLHIr
+PWMoZVswXSxfKHRbMF0pKSk6cis9Xyh0WzBdKSxuPWwubFIubGFzdEluZGV4LHQ9bC5sUi5leGVjKGcp
+O3JldHVybiByK18oZy5zdWJzdHIobikpfSgpLGc9IiJ9ZnVuY3Rpb24gdShlKXtFKz1lLmNOP2MoZS5j
+TiwiIiwhMCk6IiIsbD1PYmplY3QuY3JlYXRlKGUse3BhcmVudDp7dmFsdWU6bH19KX1mdW5jdGlvbiBy
+KGUsbil7aWYoZys9ZSxudWxsPT1uKXJldHVybiBvKCksMDt2YXIgdD1mdW5jdGlvbihlLG4pe3ZhciB0
+LHIsYTtmb3IodD0wLHI9bi5jLmxlbmd0aDt0PHI7dCsrKWlmKHYobi5jW3RdLmJSLGUpKXJldHVybiBu
+LmNbdF0uZW5kU2FtZUFzQmVnaW4mJihuLmNbdF0uZVI9KGE9bi5jW3RdLmJSLmV4ZWMoZSlbMF0sbmV3
+IFJlZ0V4cChhLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIiksIm0iKSkpLG4u
+Y1t0XX0obixsKTtpZih0KXJldHVybiB0LnNraXA/Zys9bjoodC5lQiYmKGcrPW4pLG8oKSx0LnJCfHx0
+LmVCfHwoZz1uKSksdSh0KSx0LnJCPzA6bi5sZW5ndGg7dmFyIHI9ZnVuY3Rpb24gZShuLHQpe2lmKHYo
+bi5lUix0KSl7Zm9yKDtuLmVuZHNQYXJlbnQmJm4ucGFyZW50OyluPW4ucGFyZW50O3JldHVybiBufWlm
+KG4uZVcpcmV0dXJuIGUobi5wYXJlbnQsdCl9KGwsbik7aWYocil7dmFyIGE9bDtmb3IoYS5za2lwP2cr
+PW46KGEuckV8fGEuZUV8fChnKz1uKSxvKCksYS5lRSYmKGc9bikpO2wuY04mJihFKz1iKSxsLnNraXB8
+fGwuc0x8fChSKz1sLnIpLChsPWwucGFyZW50KSE9PXIucGFyZW50Oyk7cmV0dXJuIHIuc3RhcnRzJiYo
+ci5lbmRTYW1lQXNCZWdpbiYmKHIuc3RhcnRzLmVSPXIuZVIpLHUoci5zdGFydHMpKSxhLnJFPzA6bi5s
+ZW5ndGh9aWYoZnVuY3Rpb24oZSxuKXtyZXR1cm4haSYmdihuLmlSLGUpfShuLGwpKXRocm93IG5ldyBF
+cnJvcignSWxsZWdhbCBsZXhlbWUgIicrbisnIiBmb3IgbW9kZSAiJysobC5jTnx8Ijx1bm5hbWVkPiIp
+KyciJyk7cmV0dXJuIGcrPW4sbi5sZW5ndGh8fDF9dmFyIHM9QihlKTtpZighcyl0aHJvdyBuZXcgRXJy
+b3IoJ1Vua25vd24gbGFuZ3VhZ2U6ICInK2UrJyInKTttKHMpO3ZhciBhLGw9dHx8cyxmPXt9LEU9IiI7
+Zm9yKGE9bDthIT09czthPWEucGFyZW50KWEuY04mJihFPWMoYS5jTiwiIiwhMCkrRSk7dmFyIGc9IiIs
+Uj0wO3RyeXtmb3IodmFyIGQscCxNPTA7bC50Lmxhc3RJbmRleD1NLGQ9bC50LmV4ZWMobik7KXA9cihu
+LnN1YnN0cmluZyhNLGQuaW5kZXgpLGRbMF0pLE09ZC5pbmRleCtwO2ZvcihyKG4uc3Vic3RyKE0pKSxh
+PWw7YS5wYXJlbnQ7YT1hLnBhcmVudClhLmNOJiYoRSs9Yik7cmV0dXJue3I6Uix2YWx1ZTpFLGxhbmd1
+YWdlOmUsdG9wOmx9fWNhdGNoKGUpe2lmKGUubWVzc2FnZSYmLTEhPT1lLm1lc3NhZ2UuaW5kZXhPZigi
+SWxsZWdhbCIpKXJldHVybntyOjAsdmFsdWU6XyhuKX07dGhyb3cgZX19ZnVuY3Rpb24gTyh0LGUpe2U9
+ZXx8aC5sYW5ndWFnZXN8fHUoTik7dmFyIHI9e3I6MCx2YWx1ZTpfKHQpfSxhPXI7cmV0dXJuIGUuZmls
+dGVyKEIpLmZpbHRlcihNKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPUMoZSx0LCExKTtuLmxhbmd1
+YWdlPWUsbi5yPmEuciYmKGE9biksbi5yPnIuciYmKGE9cixyPW4pfSksYS5sYW5ndWFnZSYmKHIuc2Vj
+b25kX2Jlc3Q9YSkscn1mdW5jdGlvbiBkKGUpe3JldHVybiBoLnRhYlJlcGxhY2V8fGgudXNlQlI/ZS5y
+ZXBsYWNlKHQsZnVuY3Rpb24oZSxuKXtyZXR1cm4gaC51c2VCUiYmIlxuIj09PWU/Ijxicj4iOmgudGFi
+UmVwbGFjZT9uLnJlcGxhY2UoL1x0L2csaC50YWJSZXBsYWNlKToiIn0pOmV9ZnVuY3Rpb24gbyhlKXt2
+YXIgbix0LHIsYSxpLG89ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLGEsaT1lLmNsYXNzTmFtZSsiICI7aWYo
+aSs9ZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIsdD1zLmV4ZWMoaSkpcmV0dXJu
+IEIodFsxXSk/dFsxXToibm8taGlnaGxpZ2h0Ijtmb3Iobj0wLHI9KGk9aS5zcGxpdCgvXHMrLykpLmxl
+bmd0aDtuPHI7bisrKWlmKGwoYT1pW25dKXx8QihhKSlyZXR1cm4gYX0oZSk7bChvKXx8KGgudXNlQlI/
+KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwi
+ZGl2IikpLmlubmVySFRNTD1lLmlubmVySFRNTC5yZXBsYWNlKC9cbi9nLCIiKS5yZXBsYWNlKC88YnJb
+IFwvXSo+L2csIlxuIik6bj1lLGk9bi50ZXh0Q29udGVudCxyPW8/QyhvLGksITApOk8oaSksKHQ9Uihu
+KSkubGVuZ3RoJiYoKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8x
+OTk5L3hodG1sIiwiZGl2IikpLmlubmVySFRNTD1yLnZhbHVlLHIudmFsdWU9ZnVuY3Rpb24oZSxuLHQp
+e3ZhciByPTAsYT0iIixpPVtdO2Z1bmN0aW9uIG8oKXtyZXR1cm4gZS5sZW5ndGgmJm4ubGVuZ3RoP2Vb
+MF0ub2Zmc2V0IT09blswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8blswXS5vZmZzZXQ/ZTpuOiJzdGFydCI9
+PT1uWzBdLmV2ZW50P2U6bjplLmxlbmd0aD9lOm59ZnVuY3Rpb24gYyhlKXthKz0iPCIrRShlKStmLm1h
+cC5jYWxsKGUuYXR0cmlidXRlcyxmdW5jdGlvbihlKXtyZXR1cm4iICIrZS5ub2RlTmFtZSsnPSInK18o
+ZS52YWx1ZSkucmVwbGFjZSgnIicsIiZxdW90OyIpKyciJ30pLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB1
+KGUpe2ErPSI8LyIrRShlKSsiPiJ9ZnVuY3Rpb24gcyhlKXsoInN0YXJ0Ij09PWUuZXZlbnQ/Yzp1KShl
+Lm5vZGUpfWZvcig7ZS5sZW5ndGh8fG4ubGVuZ3RoOyl7dmFyIGw9bygpO2lmKGErPV8odC5zdWJzdHJp
+bmcocixsWzBdLm9mZnNldCkpLHI9bFswXS5vZmZzZXQsbD09PWUpe2ZvcihpLnJldmVyc2UoKS5mb3JF
+YWNoKHUpO3MobC5zcGxpY2UoMCwxKVswXSksKGw9bygpKT09PWUmJmwubGVuZ3RoJiZsWzBdLm9mZnNl
+dD09PXI7KTtpLnJldmVyc2UoKS5mb3JFYWNoKGMpfWVsc2Uic3RhcnQiPT09bFswXS5ldmVudD9pLnB1
+c2gobFswXS5ub2RlKTppLnBvcCgpLHMobC5zcGxpY2UoMCwxKVswXSl9cmV0dXJuIGErXyh0LnN1YnN0
+cihyKSl9KHQsUihhKSxpKSksci52YWx1ZT1kKHIudmFsdWUpLGUuaW5uZXJIVE1MPXIudmFsdWUsZS5j
+bGFzc05hbWU9ZnVuY3Rpb24oZSxuLHQpe3ZhciByPW4/Y1tuXTp0LGE9W2UudHJpbSgpXTtyZXR1cm4g
+ZS5tYXRjaCgvXGJobGpzXGIvKXx8YS5wdXNoKCJobGpzIiksLTE9PT1lLmluZGV4T2YocikmJmEucHVz
+aChyKSxhLmpvaW4oIiAiKS50cmltKCl9KGUuY2xhc3NOYW1lLG8sci5sYW5ndWFnZSksZS5yZXN1bHQ9
+e2xhbmd1YWdlOnIubGFuZ3VhZ2UscmU6ci5yfSxyLnNlY29uZF9iZXN0JiYoZS5zZWNvbmRfYmVzdD17
+bGFuZ3VhZ2U6ci5zZWNvbmRfYmVzdC5sYW5ndWFnZSxyZTpyLnNlY29uZF9iZXN0LnJ9KSl9ZnVuY3Rp
+b24gcCgpe2lmKCFwLmNhbGxlZCl7cC5jYWxsZWQ9ITA7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3Rv
+ckFsbCgicHJlIGNvZGUiKTtmLmZvckVhY2guY2FsbChlLG8pfX1mdW5jdGlvbiBCKGUpe3JldHVybiBl
+PShlfHwiIikudG9Mb3dlckNhc2UoKSxOW2VdfHxOW2NbZV1dfWZ1bmN0aW9uIE0oZSl7dmFyIG49Qihl
+KTtyZXR1cm4gbiYmIW4uZGlzYWJsZUF1dG9kZXRlY3R9cmV0dXJuIGEuaGlnaGxpZ2h0PUMsYS5oaWdo
+bGlnaHRBdXRvPU8sYS5maXhNYXJrdXA9ZCxhLmhpZ2hsaWdodEJsb2NrPW8sYS5jb25maWd1cmU9ZnVu
+Y3Rpb24oZSl7aD1nKGgsZSl9LGEuaW5pdEhpZ2hsaWdodGluZz1wLGEuaW5pdEhpZ2hsaWdodGluZ09u
+TG9hZD1mdW5jdGlvbigpe2FkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHAsITEpLGFk
+ZEV2ZW50TGlzdGVuZXIoImxvYWQiLHAsITEpfSxhLnJlZ2lzdGVyTGFuZ3VhZ2U9ZnVuY3Rpb24obixl
+KXt2YXIgdD1OW25dPWUoYSk7aSh0KSx0LmFsaWFzZXMmJnQuYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9u
+KGUpe2NbZV09bn0pfSxhLmxpc3RMYW5ndWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdShOKX0sYS5nZXRM
+YW5ndWFnZT1CLGEuYXV0b0RldGVjdGlvbj1NLGEuaW5oZXJpdD1nLGEuSVI9YS5JREVOVF9SRT0iW2Et
+ekEtWl1cXHcqIixhLlVJUj1hLlVOREVSU0NPUkVfSURFTlRfUkU9IlthLXpBLVpfXVxcdyoiLGEuTlI9
+YS5OVU1CRVJfUkU9IlxcYlxcZCsoXFwuXFxkKyk/IixhLkNOUj1hLkNfTlVNQkVSX1JFPSIoLT8pKFxc
+YjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQr
+KT8pIixhLkJOUj1hLkJJTkFSWV9OVU1CRVJfUkU9IlxcYigwYlswMV0rKSIsYS5SU1I9YS5SRV9TVEFS
+VEVSU19SRT0iIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8LXwtPXwvPXwv
+fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xc
+XCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iLGEuQkU9YS5CQUNLU0xBU0hfRVNDQVBFPXtiOiJc
+XFxcW1xcc1xcU10iLHI6MH0sYS5BU009YS5BUE9TX1NUUklOR19NT0RFPXtjTjoic3RyaW5nIixiOiIn
+IixlOiInIixpOiJcXG4iLGM6W2EuQkVdfSxhLlFTTT1hLlFVT1RFX1NUUklOR19NT0RFPXtjTjoic3Ry
+aW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W2EuQkVdfSxhLlBXTT1hLlBIUkFTQUxfV09SRFNfTU9E
+RT17YjovXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0
+fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlv
+dXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxiL30sYS5DPWEuQ09NTUVOVD1mdW5jdGlvbihlLG4sdCl7dmFy
+IHI9YS5pbmhlcml0KHtjTjoiY29tbWVudCIsYjplLGU6bixjOltdfSx0fHx7fSk7cmV0dXJuIHIuYy5w
+dXNoKGEuUFdNKSxyLmMucHVzaCh7Y046ImRvY3RhZyIsYjoiKD86VE9ET3xGSVhNRXxOT1RFfEJVR3xY
+WFgpOiIscjowfSkscn0sYS5DTENNPWEuQ19MSU5FX0NPTU1FTlRfTU9ERT1hLkMoIi8vIiwiJCIpLGEu
+Q0JDTT1hLkNfQkxPQ0tfQ09NTUVOVF9NT0RFPWEuQygiL1xcKiIsIlxcKi8iKSxhLkhDTT1hLkhBU0hf
+Q09NTUVOVF9NT0RFPWEuQygiIyIsIiQiKSxhLk5NPWEuTlVNQkVSX01PREU9e2NOOiJudW1iZXIiLGI6
+YS5OUixyOjB9LGEuQ05NPWEuQ19OVU1CRVJfTU9ERT17Y046Im51bWJlciIsYjphLkNOUixyOjB9LGEu
+Qk5NPWEuQklOQVJZX05VTUJFUl9NT0RFPXtjTjoibnVtYmVyIixiOmEuQk5SLHI6MH0sYS5DU1NOTT1h
+LkNTU19OVU1CRVJfTU9ERT17Y046Im51bWJlciIsYjphLk5SKyIoJXxlbXxleHxjaHxyZW18dnd8dmh8
+dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjfHB4fGRlZ3xncmFkfHJhZHx0dXJufHN8bXN8SHp8a0h6fGRw
+aXxkcGNtfGRwcHgpPyIscjowfSxhLlJNPWEuUkVHRVhQX01PREU9e2NOOiJyZWdleHAiLGI6L1wvLyxl
+Oi9cL1tnaW11eV0qLyxpOi9cbi8sYzpbYS5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbYS5CRV19XX0s
+YS5UTT1hLlRJVExFX01PREU9e2NOOiJ0aXRsZSIsYjphLklSLHI6MH0sYS5VVE09YS5VTkRFUlNDT1JF
+X1RJVExFX01PREU9e2NOOiJ0aXRsZSIsYjphLlVJUixyOjB9LGEuTUVUSE9EX0dVQVJEPXtiOiJcXC5c
+XHMqIithLlVJUixyOjB9LGF9KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInhtbCIsZnVuY3Rpb24ocyl7
+dmFyIGU9e2VXOiEwLGk6LzwvLHI6MCxjOlt7Y046ImF0dHIiLGI6IltBLVphLXowLTlcXC5fOi1dKyIs
+cjowfSx7YjovPVxzKi8scjowLGM6W3tjTjoic3RyaW5nIixlbmRzUGFyZW50OiEwLHY6W3tiOi8iLyxl
+Oi8iL30se2I6LycvLGU6LycvfSx7YjovW15ccyInPTw+YF0rL31dfV19XX07cmV0dXJue2FsaWFzZXM6
+WyJodG1sIiwieGh0bWwiLCJyc3MiLCJhdG9tIiwieGpiIiwieHNkIiwieHNsIiwicGxpc3QiLCJ3c2Yi
+XSxjSTohMCxjOlt7Y046Im1ldGEiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixl
+OiJcXF0ifV19LHMuQygiXHgzYyEtLSIsIi0tXHgzZSIse3I6MTB9KSx7YjoiPFxcIVxcW0NEQVRBXFxb
+IixlOiJcXF1cXF0+IixyOjEwfSx7Y046Im1ldGEiLGI6LzxcP3htbC8sZTovXD8+LyxyOjEwfSx7Yjov
+PFw/KHBocCk/LyxlOi9cPz4vLHNMOiJwaHAiLGM6W3tiOiIvXFwqIixlOiJcXCovIixza2lwOiEwfSx7
+YjonYiInLGU6JyInLHNraXA6ITB9LHtiOiJiJyIsZToiJyIsc2tpcDohMH0scy5pbmhlcml0KHMuQVNN
+LHtpOm51bGwsY046bnVsbCxjOm51bGwsc2tpcDohMH0pLHMuaW5oZXJpdChzLlFTTSx7aTpudWxsLGNO
+Om51bGwsYzpudWxsLHNraXA6ITB9KV19LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToi
+PiIsazp7bmFtZToic3R5bGUifSxjOltlXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTohMCxzTDpbImNz
+cyIsInhtbCJdfX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7bmFtZToi
+c2NyaXB0In0sYzpbZV0sc3RhcnRzOntlOiI8XC9zY3JpcHQ+IixyRTohMCxzTDpbImFjdGlvbnNjcmlw
+dCIsImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIiwidmJzY3JpcHQiXX19LHtjTjoidGFnIixi
+OiI8Lz8iLGU6Ii8/PiIsYzpbe2NOOiJuYW1lIixiOi9bXlwvPjxcc10rLyxyOjB9LGVdfV19fSk7aGxq
+cy5yZWdpc3Rlckxhbmd1YWdlKCJtYXJrZG93biIsZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJt
+ZCIsIm1rZG93biIsIm1rZCJdLGM6W3tjTjoic2VjdGlvbiIsdjpbe2I6Il4jezEsNn0iLGU6IiQifSx7
+YjoiXi4rP1xcbls9LV17Mix9JCJ9XX0se2I6IjwiLGU6Ij4iLHNMOiJ4bWwiLHI6MH0se2NOOiJidWxs
+ZXQiLGI6Il5cXHMqKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0u
+Kz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsdjpbe2I6IlxcKi4rP1xcKiJ9LHtiOiJfLis/XyIscjow
+fV19LHtjTjoicXVvdGUiLGI6Il4+XFxzKyIsZToiJCJ9LHtjTjoiY29kZSIsdjpbe2I6Il5gYGB3KnMq
+JCIsZToiXmBgYHMqJCJ9LHtiOiJgLis/YCJ9LHtiOiJeKCB7NH18XHQpIixlOiIkIixyOjB9XX0se2I6
+Il5bLVxcKl17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVtcXChcXFtdLio/W1xcKVxcXV0iLHJCOiEw
+LGM6W3tjTjoic3RyaW5nIixiOiJcXFsiLGU6IlxcXSIsZUI6ITAsckU6ITAscjowfSx7Y046Imxpbmsi
+LGI6IlxcXVxcKCIsZToiXFwpIixlQjohMCxlRTohMH0se2NOOiJzeW1ib2wiLGI6IlxcXVxcWyIsZToi
+XFxdIixlQjohMCxlRTohMH1dLHI6MTB9LHtiOi9eXFtbXlxuXStcXTovLHJCOiEwLGM6W3tjTjoic3lt
+Ym9sIixiOi9cWy8sZTovXF0vLGVCOiEwLGVFOiEwfSx7Y046ImxpbmsiLGI6LzpccyovLGU6LyQvLGVC
+OiEwfV19XX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImRhcnQiLGZ1bmN0aW9uKGUpe3ZhciB0PXtj
+Tjoic3Vic3QiLHY6W3tiOiJcXCRbQS1aYS16MC05X10rIn1dfSxyPXtjTjoic3Vic3QiLHY6W3tiOiJc
+XCR7IixlOiJ9In1dLGs6InRydWUgZmFsc2UgbnVsbCB0aGlzIGlzIG5ldyBzdXBlciJ9LG49e2NOOiJz
+dHJpbmciLHY6W3tiOiJyJycnIixlOiInJycifSx7YjonciIiIicsZTonIiIiJ30se2I6InInIixlOiIn
+IixpOiJcXG4ifSx7YjonciInLGU6JyInLGk6IlxcbiJ9LHtiOiInJyciLGU6IicnJyIsYzpbZS5CRSx0
+LHJdfSx7YjonIiIiJyxlOiciIiInLGM6W2UuQkUsdCxyXX0se2I6IiciLGU6IiciLGk6IlxcbiIsYzpb
+ZS5CRSx0LHJdfSx7YjonIicsZTonIicsaToiXFxuIixjOltlLkJFLHQscl19XX07ci5jPVtlLkNOTSxu
+XTtyZXR1cm57azp7a2V5d29yZDoiYXNzZXJ0IGFzeW5jIGF3YWl0IGJyZWFrIGNhc2UgY2F0Y2ggY2xh
+c3MgY29uc3QgY29udGludWUgZGVmYXVsdCBkbyBlbHNlIGVudW0gZXh0ZW5kcyBmYWxzZSBmaW5hbCBm
+aW5hbGx5IGZvciBpZiBpbiBpcyBuZXcgbnVsbCByZXRocm93IHJldHVybiBzdXBlciBzd2l0Y2ggc3lu
+YyB0aGlzIHRocm93IHRydWUgdHJ5IHZhciB2b2lkIHdoaWxlIHdpdGggeWllbGQgYWJzdHJhY3QgYXMg
+ZHluYW1pYyBleHBvcnQgZXh0ZXJuYWwgZmFjdG9yeSBnZXQgaW1wbGVtZW50cyBpbXBvcnQgbGlicmFy
+eSBvcGVyYXRvciBwYXJ0IHNldCBzdGF0aWMgdHlwZWRlZiIsYnVpbHRfaW46InByaW50IENvbXBhcmFi
+bGUgRGF0ZVRpbWUgRHVyYXRpb24gRnVuY3Rpb24gSXRlcmFibGUgSXRlcmF0b3IgTGlzdCBNYXAgTWF0
+Y2ggTnVsbCBPYmplY3QgUGF0dGVybiBSZWdFeHAgU2V0IFN0b3B3YXRjaCBTdHJpbmcgU3RyaW5nQnVm
+ZmVyIFN0cmluZ1NpbmsgU3ltYm9sIFR5cGUgVXJpIGJvb2wgZG91YmxlIGludCBudW0gZG9jdW1lbnQg
+d2luZG93IHF1ZXJ5U2VsZWN0b3IgcXVlcnlTZWxlY3RvckFsbCBFbGVtZW50IEVsZW1lbnRMaXN0In0s
+YzpbbixlLkMoIi9cXCpcXCoiLCJcXCovIix7c0w6Im1hcmtkb3duIn0pLGUuQygiLy8vIiwiJCIse3NM
+OiJtYXJrZG93biJ9KSxlLkNMQ00sZS5DQkNNLHtjTjoiY2xhc3MiLGJLOiJjbGFzcyBpbnRlcmZhY2Ui
+LGU6InsiLGVFOiEwLGM6W3tiSzoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VVE1dfSxlLkNOTSx7Y046
+Im1ldGEiLGI6IkBbQS1aYS16XSsifSx7YjoiPT4ifV19fSk7Cg==
+''';
+
+String _migration_js;
+String _migration_js_base64 = '''
+Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUg
+dGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9m
+IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
+IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKZnVuY3Rpb24gZ2V0T2Zmc2V0KGxvY2F0
+aW9uKSB7CiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENv
+bnRlbnQ7CiAgcmV0dXJuIG5ldyBVUkwobG9jYXRpb24sICJmaWxlOi8vIiArIHJvb3QgKyAiL2R1bW15
+LnR4dCIpCiAgICAgIC5zZWFyY2hQYXJhbXMuZ2V0KCJvZmZzZXQiKTsKfQoKZnVuY3Rpb24gZ2V0TGlu
+ZShsb2NhdGlvbikgewogIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucm9vdCIp
+LnRleHRDb250ZW50OwogIHJldHVybiBuZXcgVVJMKGxvY2F0aW9uLCAiZmlsZTovLyIgKyByb290ICsg
+Ii9kdW1teS50eHQiKQogICAgICAuc2VhcmNoUGFyYW1zLmdldCgibGluZSIpOwp9CgovLyBSZW1vdmUg
+aGlnaGxpZ2h0aW5nIGZyb20gW29mZnNldF0uCmZ1bmN0aW9uIHJlbW92ZUhpZ2hsaWdodChvZmZzZXQs
+IGxpbmVOdW1iZXIpIHsKICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgIGNvbnN0IGFuY2hvciA9IGRv
+Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJvIiArIG9mZnNldCk7CiAgICBpZiAoYW5jaG9yICE9IG51bGwp
+IHsKICAgICAgYW5jaG9yLmNsYXNzTGlzdC5yZW1vdmUoInRhcmdldCIpOwogICAgfQogIH0KICBpZiAo
+bGluZU51bWJlciAhPSBudWxsKSB7CiAgICBjb25zdCBsaW5lID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rv
+cigiLmxpbmUtIiArIGxpbmVOdW1iZXIpOwogICAgaWYgKGxpbmUgIT0gbnVsbCkgewogICAgICBsaW5l
+LnBhcmVudE5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0Iik7CiAgICB9CiAgfQp9CgovLyBS
+ZXR1cm4gdGhlIGFic29sdXRlIHBhdGggb2YgW3BhdGhdLCBhc3N1bWluZyBbcGF0aF0gaXMgcmVsYXRp
+dmUgdG8gW3Jvb3RdLgpmdW5jdGlvbiBhYnNvbHV0ZVBhdGgocGF0aCkgewogIGlmIChwYXRoWzBdICE9
+ICIvIikgewogICAgICBjb25zdCByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnJvb3QiKS50
+ZXh0Q29udGVudDsKICAgICAgcmV0dXJuIG5ldyBVUkwocGF0aCwgd2luZG93LmxvY2F0aW9uLmhyZWYp
+LnBhdGhuYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gcGF0aDsKICB9Cn0KCi8vIElmIFtwYXRoXSBs
+aWVzIHdpdGhpbiBbcm9vdF0sIHJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBvZiBbcGF0aF0gZnJvbSBb
+cm9vdF0uCi8vIE90aGVyd2lzZSwgcmV0dXJuIFtwYXRoXS4KZnVuY3Rpb24gcmVsYXRpdmVQYXRoKHBh
+dGgpIHsKICBjb25zdCByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnJvb3QiKS50ZXh0Q29u
+dGVudCArICIvIjsKICBpZiAocGF0aC5zdGFydHNXaXRoKHJvb3QpKSB7CiAgICByZXR1cm4gcGF0aC5z
+dWJzdHJpbmcocm9vdC5sZW5ndGgpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gcGF0aDsKICB9Cn0KCi8v
+IFdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgRWRpdCBMaXN0LCBmcm9tIEpTT04gZGF0YSBbZWRpdExp
+c3REYXRhXS4KZnVuY3Rpb24gd3JpdGVFZGl0TGlzdChlZGl0TGlzdERhdGEpIHsKICBjb25zdCBlZGl0
+TGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0LWxpc3QgLnBhbmVsLWNvbnRlbnQiKTsK
+ICBlZGl0TGlzdC5pbm5lckhUTUwgPSAiIjsKICBjb25zdCBwID0gZWRpdExpc3QuYXBwZW5kQ2hpbGQo
+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpKTsKICBjb25zdCBjb3VudEVsZW1lbnQgPSBwLmFwcGVu
+ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIpKTsKICBjb25zdCBlZGl0Q291bnQg
+PSBlZGl0TGlzdERhdGFbImVkaXRDb3VudCJdOwogIGNvdW50RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1
+bWVudC5jcmVhdGVUZXh0Tm9kZShlZGl0Q291bnQpKTsKICBpZiAoZWRpdENvdW50ID09IDEpIHsKICAg
+IHAuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoCiAgICAgICAgIiBlZGl0IHdhcyBt
+YWRlIHRvIHRoaXMgZmlsZS4gQ2xpY2sgdGhlIGVkaXQncyBjaGVja2JveCB0byB0b2dnbGUgIiArCiAg
+ICAgICAgIml0cyByZXZpZXdlZCBzdGF0ZS4iKSk7CiAgfSBlbHNlIHsKICAgIHAuYXBwZW5kQ2hpbGQo
+ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoCiAgICAgICAgIiBlZGl0cyB3ZXJlIG1hZGUgdG8gdGhpcyBm
+aWxlLiBDbGljayBhbiBlZGl0J3MgY2hlY2tib3ggdG8gdG9nZ2xlICIgKwogICAgICAgICJpdHMgcmV2
+aWV3ZWQgc3RhdGUuIikpOwogIH0KICBmb3IgKGNvbnN0IGVkaXQgb2YgZWRpdExpc3REYXRhWyJlZGl0
+cyJdKSB7CiAgICBjb25zdCBlZGl0UCA9IGVkaXRMaXN0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
+ZUVsZW1lbnQoInAiKSk7CiAgICBlZGl0UC5jbGFzc0xpc3QuYWRkKCJlZGl0Iik7CiAgICBjb25zdCBj
+aGVja2JveCA9IGVkaXRQLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iikp
+OwogICAgY2hlY2tib3guc2V0QXR0cmlidXRlKCJ0eXBlIiwgImNoZWNrYm94Iik7CiAgICBjaGVja2Jv
+eC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgIkNsaWNrIHRvIG1hcmsgcmV2aWV3ZWQiKTsKICAgIGNoZWNr
+Ym94LnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKICAgIGVkaXRQLmFwcGVuZENo
+aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKAogICAgICAgIGBsaW5lICR7ZWRpdFsibGluZSJdfTog
+JHtlZGl0WyJleHBsYW5hdGlvbiJdfS4gYCkpOwogICAgY29uc3QgYSA9IGVkaXRQLmFwcGVuZENoaWxk
+KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSk7CiAgICBhLmNsYXNzTGlzdC5hZGQoImVkaXQtbGlu
+ayIpOwogICAgY29uc3Qgb2Zmc2V0ID0gZWRpdFsib2Zmc2V0Il07CiAgICBhLmRhdGFzZXQub2Zmc2V0
+ID0gb2Zmc2V0OwogICAgY29uc3QgbGluZSA9IGVkaXRbImxpbmUiXTsKICAgIGEuZGF0YXNldC5saW5l
+ID0gbGluZTsKICAgIGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlt2aWV3XSIp
+KTsKICAgIGEub25jbGljayA9IChldmVudCkgPT4gewogICAgICBuYXZpZ2F0ZSh3aW5kb3cubG9jYXRp
+b24ucGF0aG5hbWUsIG9mZnNldCwgbGluZSwKICAgICAgICAgICgpID0+IHsgcHVzaFN0YXRlKHdpbmRv
+dy5sb2NhdGlvbi5wYXRobmFtZSwgb2Zmc2V0LCBsaW5lKSB9KTsKICAgICAgbG9hZFJlZ2lvbkV4cGxh
+bmF0aW9uKGEpOwogICAgfTsKICB9Cn0KCi8vIExvYWQgZGF0YSBmcm9tIFtkYXRhXSBpbnRvIHRoZSAu
+Y29kZSBhbmQgdGhlIC5yZWdpb25zIGRpdnMuCmZ1bmN0aW9uIHdyaXRlQ29kZUFuZFJlZ2lvbnMoZGF0
+YSkgewogIGNvbnN0IHJlZ2lvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucmVnaW9ucyIpOwog
+IGNvbnN0IGNvZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY29kZSIpOwogIHJlZ2lvbnMuaW5u
+ZXJIVE1MID0gZGF0YVsicmVnaW9ucyJdOwogIGNvZGUuaW5uZXJIVE1MID0gZGF0YVsibmF2Q29udGVu
+dCJdOwogIHdyaXRlRWRpdExpc3QoZGF0YVsiZWRpdExpc3QiXSk7CiAgaGlnaGxpZ2h0QWxsQ29kZSgp
+OwogIGFkZENsaWNrSGFuZGxlcnMoIi5jb2RlIik7CiAgYWRkQ2xpY2tIYW5kbGVycygiLnJlZ2lvbnMi
+KTsKfQoKLy8gTmF2aWdhdGUgdG8gW3BhdGhdIGFuZCBvcHRpb25hbGx5IHNjcm9sbCBbb2Zmc2V0XSBp
+bnRvIHZpZXcuCi8vCi8vIElmIFtjYWxsYmFja10gaXMgcHJlc2VudCwgaXQgd2lsbCBiZSBjYWxsZWQg
+YWZ0ZXIgdGhlIHNlcnZlciByZXNwb25zZSBoYXMKLy8gYmVlbiBwcm9jZXNzZWQsIGFuZCB0aGUgY29u
+dGVudCBoYXMgYmVlbiB1cGRhdGVkIG9uIHRoZSBwYWdlLgpmdW5jdGlvbiBuYXZpZ2F0ZShwYXRoLCBv
+ZmZzZXQsIGxpbmVOdW1iZXIsIGNhbGxiYWNrKSB7CiAgY29uc3QgY3VycmVudE9mZnNldCA9IGdldE9m
+ZnNldCh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgY29uc3QgY3VycmVudExpbmVOdW1iZXIgPSBnZXRM
+aW5lKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICByZW1vdmVIaWdobGlnaHQoY3VycmVudE9mZnNldCwg
+Y3VycmVudExpbmVOdW1iZXIpOwogIGlmIChwYXRoID09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkg
+ewogICAgLy8gTmF2aWdhdGluZyB0byBzYW1lIGZpbGU7IGp1c3Qgc2Nyb2xsIGludG8gdmlldy4KICAg
+IG1heWJlU2Nyb2xsVG9BbmRIaWdobGlnaHQob2Zmc2V0LCBsaW5lTnVtYmVyKTsKICAgIGlmIChjYWxs
+YmFjayAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGNhbGxiYWNrKCk7CiAgICB9CiAgfSBlbHNlIHsKICAg
+IGxvYWRGaWxlKHBhdGgsIG9mZnNldCwgbGluZU51bWJlciwgY2FsbGJhY2spOwogIH0KfQoKZnVuY3Rp
+b24gbWF5YmVTY3JvbGxJbnRvVmlldyhlbGVtZW50KSB7CiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0
+Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgLy8gVE9ETyhzcmF3bGlucyk6IE9ubHkgc2Nyb2xsIHNtb290
+aGx5IHdoZW4gb24gdGhlIHNhbWUgcGFnZS4KICBpZiAocmVjdC5ib3R0b20gPiB3aW5kb3cuaW5uZXJI
+ZWlnaHQpIHsKICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiAic21vb3RoIiwgYmxv
+Y2s6ICJlbmQifSk7CiAgfQogIGlmIChyZWN0LnRvcCA8IDApIHsKICAgIGVsZW1lbnQuc2Nyb2xsSW50
+b1ZpZXcoe2JlaGF2aW9yOiAic21vb3RoIn0pOwogIH0KfQoKLy8gU2Nyb2xsIHRhcmdldCB3aXRoIGlk
+IFtvZmZzZXRdIGludG8gdmlldyBpZiBpdCBpcyBub3QgY3VycmVudGx5IGluIHZpZXcuCi8vCi8vIElm
+IFtvZmZzZXRdIGlzIG51bGwsIGluc3RlYWQgc2Nyb2xsIHRoZSAidW5pdC1uYW1lIiBoZWFkZXIsIGF0
+IHRoZSB0b3Agb2YgdGhlCi8vIHBhZ2UsIGludG8gdmlldy4KLy8KLy8gQWxzbyBhZGQgdGhlICJ0YXJn
+ZXQiIGNsYXNzLCBoaWdobGlnaHRpbmcgdGhlIHRhcmdldC4gQWxzbyBhZGQgdGhlCi8vICJoaWdobGln
+aHQiIGNsYXNzIHRvIHRoZSBlbnRpcmUgbGluZSBvbiB3aGljaCB0aGUgdGFyZ2V0IGxpZXMuCmZ1bmN0
+aW9uIG1heWJlU2Nyb2xsVG9BbmRIaWdobGlnaHQob2Zmc2V0LCBsaW5lTnVtYmVyKSB7CiAgdmFyIHRh
+cmdldDsKICB2YXIgbGluZTsKICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7CiAgICB0YXJnZXQgPSBkb2N1
+bWVudC5nZXRFbGVtZW50QnlJZCgibyIgKyBvZmZzZXQpOwogICAgbGluZSA9IGRvY3VtZW50LnF1ZXJ5
+U2VsZWN0b3IoIi5saW5lLSIgKyBsaW5lTnVtYmVyKTsKICAgIGlmICh0YXJnZXQgIT09IG51bGwpIHsK
+ICAgICAgbWF5YmVTY3JvbGxJbnRvVmlldyh0YXJnZXQpOwogICAgICB0YXJnZXQuY2xhc3NMaXN0LmFk
+ZCgidGFyZ2V0Iik7CiAgICB9IGVsc2UgaWYgKGxpbmUgIT0gbnVsbCkgewogICAgICAvLyBJZiB0aGUg
+dGFyZ2V0IGRvZXNuJ3QgZXhpc3QsIGJ1dCB0aGUgbGluZSBkb2VzLCBzY3JvbGwgdGhhdCBpbnRvIHZp
+ZXcKICAgICAgLy8gaW5zdGVhZC4KICAgICAgbWF5YmVTY3JvbGxJbnRvVmlldyhsaW5lKTsKICAgIH0K
+ICAgIGlmIChsaW5lICE9IG51bGwpIHsKICAgICAgbGluZS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQo
+ImhpZ2hsaWdodCIpOwogICAgfQogIH0gZWxzZSB7CiAgICAvLyBJZiBubyBvZmZzZXQgaXMgZ2l2ZW4s
+IHRoaXMgaXMgbGlrZWx5IGEgbmF2aWdhdGlvbiBsaW5rLCBhbmQgd2UgbmVlZCB0bwogICAgLy8gc2Ny
+b2xsIGJhY2sgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZS4KICAgIHRhcmdldCA9IGRvY3VtZW50LmdldEVs
+ZW1lbnRCeUlkKCJ1bml0LW5hbWUiKTsKICAgIG1heWJlU2Nyb2xsSW50b1ZpZXcodGFyZ2V0KTsKICB9
+Cn0KCi8vIExvYWQgdGhlIGZpbGUgYXQgW3BhdGhdIGZyb20gdGhlIHNlcnZlciwgb3B0aW9uYWxseSBz
+Y3JvbGxpbmcgW29mZnNldF0gaW50bwovLyB2aWV3LgpmdW5jdGlvbiBsb2FkRmlsZShwYXRoLCBvZmZz
+ZXQsIGxpbmVOdW1iZXIsIGNhbGxiYWNrKSB7CiAgLy8gTmF2aWdhdGluZyB0byBhbm90aGVyIGZpbGU7
+IHJlcXVlc3QgaXQsIHRoZW4gZG8gd29yayB3aXRoIHRoZSByZXNwb25zZS4KICBjb25zdCB4aHIgPSBu
+ZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aHIub3BlbigiR0VUIiwgcGF0aCArICI/aW5saW5lPXRydWUi
+KTsKICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24i
+KTsKICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7
+CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAg
+d3JpdGVDb2RlQW5kUmVnaW9ucyhyZXNwb25zZSk7CiAgICAgIG1heWJlU2Nyb2xsVG9BbmRIaWdobGln
+aHQob2Zmc2V0LCBsaW5lTnVtYmVyKTsKICAgICAgdXBkYXRlUGFnZShwYXRoLCBvZmZzZXQpOwogICAg
+ICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkgewogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0K
+ICAgIH0gZWxzZSB7CiAgICAgIGFsZXJ0KCJSZXF1ZXN0IGZhaWxlZDsgc3RhdHVzIG9mICIgKyB4aHIu
+c3RhdHVzKTsKICAgIH0KICB9OwogIHhoci5vbmVycm9yID0gZnVuY3Rpb24oZSkgewogICAgYWxlcnQo
+YENvdWxkIG5vdCBsb2FkICR7cGF0aH07IHByZXZpZXcgc2VydmVyIG1pZ2h0IGJlIGRpc2Nvbm5lY3Rl
+ZC5gKTsKICB9OwogIHhoci5zZW5kKCk7Cn0KCmZ1bmN0aW9uIHB1c2hTdGF0ZShwYXRoLCBvZmZzZXQs
+IGxpbmVOdW1iZXIpIHsKICBsZXQgbmV3TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsg
+cGF0aCArICI/IjsKICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7CiAgICBuZXdMb2NhdGlvbiA9IG5ld0xv
+Y2F0aW9uICsgIm9mZnNldD0iICsgb2Zmc2V0ICsgIiYiOwogIH0KICBpZiAobGluZU51bWJlciAhPT0g
+bnVsbCkgewogICAgbmV3TG9jYXRpb24gPSBuZXdMb2NhdGlvbiArICJsaW5lPSIgKyBsaW5lTnVtYmVy
+OwogIH0KICBoaXN0b3J5LnB1c2hTdGF0ZSh7fSwgIiIsIG5ld0xvY2F0aW9uKTsKfQoKLy8gVXBkYXRl
+IHRoZSBoZWFkaW5nIGFuZCBuYXZpZ2F0aW9uIGxpbmtzLgovLwovLyBDYWxsIHRoaXMgYWZ0ZXIgdXBk
+YXRpbmcgcGFnZSBjb250ZW50IG9uIGEgbmF2aWdhdGlvbi4KZnVuY3Rpb24gdXBkYXRlUGFnZShwYXRo
+LCBvZmZzZXQpIHsKICBwYXRoID0gcmVsYXRpdmVQYXRoKHBhdGgpOwogIC8vIFVwZGF0ZSBwYWdlIGhl
+YWRpbmcuCiAgY29uc3QgdW5pdE5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdW5pdC1uYW1l
+Iik7CiAgdW5pdE5hbWUudGV4dENvbnRlbnQgPSBwYXRoOwogIC8vIFVwZGF0ZSBuYXZpZ2F0aW9uIHN0
+eWxlcy4KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LXBhbmVsIC5uYXYtbGluayIpLmZv
+ckVhY2goKGxpbmspID0+IHsKICAgIGNvbnN0IG5hbWUgPSBsaW5rLmRhdGFzZXQubmFtZTsKICAgIGlm
+IChuYW1lID09IHBhdGgpIHsKICAgICAgbGluay5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZC1maWxlIik7
+CiAgICB9IGVsc2UgewogICAgICBsaW5rLmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkLWZpbGUiKTsK
+ICAgIH0KICB9KTsKfQoKZnVuY3Rpb24gaGlnaGxpZ2h0QWxsQ29kZShfKSB7CiAgZG9jdW1lbnQucXVl
+cnlTZWxlY3RvckFsbCgiLmNvZGUiKS5mb3JFYWNoKChibG9jaykgPT4gewogICAgaGxqcy5oaWdobGln
+aHRCbG9jayhibG9jayk7CiAgfSk7Cn0KCmZ1bmN0aW9uIGFkZEFycm93Q2xpY2tIYW5kbGVyKGFycm93
+KSB7CiAgY29uc3QgY2hpbGRMaXN0ID0gYXJyb3cucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCI6c2Nv
+cGUgPiB1bCIpOwogIC8vIEFuaW1hdGluZyBoZWlnaHQgZnJvbSAiYXV0byIgdG8gIjAiIGlzIG5vdCBz
+dXBwb3J0ZWQgYnkgQ1NTIFsxXSwgc28gYWxsIHdlCiAgLy8gaGF2ZSBhcmUgaGFja3MuIFRoZSBgKiAy
+YCBhbGxvd3MgZm9yIGV2ZW50cyBpbiB3aGljaCB0aGUgbGlzdCBncm93cyBpbgogIC8vIGhlaWdodCB3
+aGVuIHJlc2l6ZWQsIHdpdGggYWRkaXRpb25hbCB0ZXh0IHdyYXBwaW5nLgogIC8vIFsxXSBodHRwczov
+L2Nzcy10cmlja3MuY29tL3VzaW5nLWNzcy10cmFuc2l0aW9ucy1hdXRvLWRpbWVuc2lvbnMvCiAgY2hp
+bGRMaXN0LnN0eWxlLm1heEhlaWdodCA9IGNoaWxkTGlzdC5vZmZzZXRIZWlnaHQgKiAyICsgInB4IjsK
+ICBhcnJvdy5vbmNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICBpZiAoIWNoaWxkTGlzdC5jbGFzc0xpc3Qu
+Y29udGFpbnMoImNvbGxhcHNlZCIpKSB7CiAgICAgIGNoaWxkTGlzdC5jbGFzc0xpc3QuYWRkKCJjb2xs
+YXBzZWQiKTsKICAgICAgYXJyb3cuY2xhc3NMaXN0LmFkZCgiY29sbGFwc2VkIik7CiAgICB9IGVsc2Ug
+ewogICAgICBjaGlsZExpc3QuY2xhc3NMaXN0LnJlbW92ZSgiY29sbGFwc2VkIik7CiAgICAgIGFycm93
+LmNsYXNzTGlzdC5yZW1vdmUoImNvbGxhcHNlZCIpOwogICAgfQogIH07Cn0KCmZ1bmN0aW9uIGhhbmRs
+ZU5hdkxpbmtDbGljayhldmVudCkgewogIGNvbnN0IHBhdGggPSBhYnNvbHV0ZVBhdGgoZXZlbnQuY3Vy
+cmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImhyZWYiKSk7CiAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0
+KGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJocmVmIikpOwogIGNvbnN0IGxpbmVOdW1i
+ZXIgPSBnZXRMaW5lKGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJocmVmIikpOwogIGlm
+IChvZmZzZXQgIT09IG51bGwpIHsKICAgIG5hdmlnYXRlKHBhdGgsIG9mZnNldCwgbGluZU51bWJlciwK
+ICAgICAgICAoKSA9PiB7IHB1c2hTdGF0ZShwYXRoLCBvZmZzZXQsIGxpbmVOdW1iZXIpIH0pOwogIH0g
+ZWxzZSB7CiAgICBuYXZpZ2F0ZShwYXRoLCBudWxsLCBudWxsLCAoKSA9PiB7IHB1c2hTdGF0ZShwYXRo
+LCBudWxsLCBudWxsKSB9KTsKICB9CiAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKfQoKZnVuY3Rpb24g
+aGFuZGxlUG9zdExpbmtDbGljayhldmVudCkgewogIC8vIERpcmVjdGluZyB0aGUgc2VydmVyIHRvIHBy
+b2R1Y2UgYW4gZWRpdDsgcmVxdWVzdCBpdCwgdGhlbiBkbyB3b3JrIHdpdGgKICAvLyB0aGUgcmVzcG9u
+c2UuCiAgY29uc3QgcGF0aCA9IGFic29sdXRlUGF0aChldmVudC5jdXJyZW50VGFyZ2V0LmdldEF0dHJp
+YnV0ZSgiaHJlZiIpKTsKICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aHIub3Bl
+bigiUE9TVCIsIHBhdGgpOwogIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBw
+bGljYXRpb24vanNvbiIpOwogIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgIGlmICh4aHIuc3Rh
+dHVzID09PSAyMDApIHsKICAgICAgLy8gTGlrZWx5IHJlcXVlc3QgbmV3IG5hdmlnYXRpb24gYW5kIGZp
+bGUgY29udGVudC4KICAgIH0gZWxzZSB7CiAgICAgIGFsZXJ0KCJSZXF1ZXN0IGZhaWxlZDsgc3RhdHVz
+IG9mICIgKyB4aHIuc3RhdHVzKTsKICAgIH0KICB9OwogIHhoci5vbmVycm9yID0gZnVuY3Rpb24oZSkg
+ewogICAgYWxlcnQoYENvdWxkIG5vdCBsb2FkICR7cGF0aH07IHByZXZpZXcgc2VydmVyIG1pZ2h0IGJl
+IGRpc2Nvbm5lY3RlZC5gKTsKICB9OwogIHhoci5zZW5kKCk7Cn0KCmZ1bmN0aW9uIGFkZENsaWNrSGFu
+ZGxlcnMocGFyZW50U2VsZWN0b3IpIHsKICBjb25zdCBwYXJlbnRFbGVtZW50ID0gZG9jdW1lbnQucXVl
+cnlTZWxlY3RvcihwYXJlbnRTZWxlY3Rvcik7CgogIGNvbnN0IG5hdkxpbmtzID0gcGFyZW50RWxlbWVu
+dC5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LWxpbmsiKTsKICBuYXZMaW5rcy5mb3JFYWNoKChsaW5rKSA9
+PiB7CiAgICBsaW5rLm9uY2xpY2sgPSBoYW5kbGVOYXZMaW5rQ2xpY2s7CiAgfSk7CgogIGNvbnN0IHJl
+Z2lvbnMgPSBwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZWdpb24iKTsKICByZWdpb25z
+LmZvckVhY2goKHJlZ2lvbikgPT4gewogICAgcmVnaW9uLm9uY2xpY2sgPSAoZXZlbnQpID0+IHsKICAg
+ICAgbG9hZFJlZ2lvbkV4cGxhbmF0aW9uKHJlZ2lvbik7CiAgICB9OwogIH0pOwoKICBjb25zdCBwb3N0
+TGlua3MgPSBwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wb3N0LWxpbmsiKTsKICBwb3N0
+TGlua3MuZm9yRWFjaCgobGluaykgPT4gewogICAgbGluay5vbmNsaWNrID0gaGFuZGxlUG9zdExpbmtD
+bGljazsKICB9KTsKfQoKZnVuY3Rpb24gd3JpdGVOYXZpZ2F0aW9uU3VidHJlZShwYXJlbnRFbGVtZW50
+LCB0cmVlKSB7CiAgY29uc3QgdWwgPSBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
+ZWF0ZUVsZW1lbnQoJ3VsJykpOwogIGZvciAoY29uc3QgZW50aXR5IG9mIHRyZWUpIHsKICAgIGNvbnN0
+IGxpID0gdWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKSk7CiAgICBpZiAo
+ZW50aXR5WyJ0eXBlIl0gPT0gImRpcmVjdG9yeSIpIHsKICAgICAgbGkuY2xhc3NMaXN0LmFkZCgiZGly
+Iik7CiAgICAgIGNvbnN0IGFycm93ID0gbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
+dCgnc3BhbicpKTsKICAgICAgYXJyb3cuY2xhc3NMaXN0LmFkZCgiYXJyb3ciKTsKICAgICAgYXJyb3cu
+aW5uZXJIVE1MID0gIiYjeDI1QkM7IjsKICAgICAgY29uc3QgaWNvbiA9IGxpLmFwcGVuZENoaWxkKGRv
+Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSk7CiAgICAgIGljb24uaW5uZXJIVE1MID0gIiYjeDFG
+NEMxOyI7CiAgICAgIGxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGVudGl0eVsi
+bmFtZSJdKSk7CiAgICAgIHdyaXRlTmF2aWdhdGlvblN1YnRyZWUobGksIGVudGl0eVsic3VidHJlZSJd
+KTsKICAgICAgYWRkQXJyb3dDbGlja0hhbmRsZXIoYXJyb3cpOwogICAgfSBlbHNlIHsKICAgICAgbGku
+aW5uZXJIVE1MID0gIiYjeDFGNEM0OyI7CiAgICAgIGNvbnN0IGEgPSBsaS5hcHBlbmRDaGlsZChkb2N1
+bWVudC5jcmVhdGVFbGVtZW50KCJhIikpOwogICAgICBhLmNsYXNzTGlzdC5hZGQoIm5hdi1saW5rIik7
+CiAgICAgIGEuZGF0YXNldC5uYW1lID0gZW50aXR5WyJwYXRoIl07CiAgICAgIGEuc2V0QXR0cmlidXRl
+KCJocmVmIiwgZW50aXR5WyJocmVmIl0pOwogICAgICBhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
+ZVRleHROb2RlKGVudGl0eVsibmFtZSJdKSk7CiAgICAgIGEub25jbGljayA9IGhhbmRsZU5hdkxpbmtD
+bGljazsKICAgICAgY29uc3QgZWRpdENvdW50ID0gZW50aXR5WyJlZGl0Q291bnQiXTsKICAgICAgaWYg
+KGVkaXRDb3VudCA+IDApIHsKICAgICAgICBjb25zdCBlZGl0c0JhZGdlID0gbGkuYXBwZW5kQ2hpbGQo
+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKTsKICAgICAgICBlZGl0c0JhZGdlLmNsYXNzTGlz
+dC5hZGQoImVkaXQtY291bnQiKTsKICAgICAgICBjb25zdCBlZGl0cyA9IGVkaXRDb3VudCA9PSAxID8g
+J2VkaXQnIDogJ2VkaXRzJzsKICAgICAgICBlZGl0c0JhZGdlLnNldEF0dHJpYnV0ZSgidGl0bGUiLCBg
+JHtlZGl0Q291bnR9ICR7ZWRpdHN9YCk7CiAgICAgICAgZWRpdHNCYWRnZS5hcHBlbmRDaGlsZChkb2N1
+bWVudC5jcmVhdGVUZXh0Tm9kZShlZGl0Q291bnQpKTsKICAgICAgfQogICAgfQogIH0KfQoKLy8gTG9h
+ZCB0aGUgbmF2aWdhdGlvbiB0cmVlIGludG8gdGhlICIubmF2LXRyZWUiIGRpdi4KZnVuY3Rpb24gbG9h
+ZE5hdmlnYXRpb25UcmVlKHJlZ2lvbikgewogIC8vIFJlcXVlc3QgdGhlIG5hdmlnYXRpb24gdHJlZSwg
+dGhlbiBkbyB3b3JrIHdpdGggdGhlIHJlc3BvbnNlLgogIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVx
+dWVzdCgpOwogIGNvbnN0IHBhdGggPSAiL19wcmV2aWV3L25hdmlnYXRpb25UcmVlLmpzb24iOwogIHho
+ci5vcGVuKCJHRVQiLCBwYXRoKTsKICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwg
+ImFwcGxpY2F0aW9uL2pzb24iKTsKICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoeGhy
+LnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZSh4aHIucmVz
+cG9uc2VUZXh0KTsKICAgICAgY29uc3QgbmF2VHJlZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5u
+YXYtdHJlZSIpOwogICAgICBuYXZUcmVlLmlubmVySFRNTCA9ICIiOwogICAgICB3cml0ZU5hdmlnYXRp
+b25TdWJ0cmVlKG5hdlRyZWUsIHJlc3BvbnNlKTsKICAgIH0gZWxzZSB7CiAgICAgIGFsZXJ0KGBSZXF1
+ZXN0IGZhaWxlZDsgc3RhdHVzIG9mICR7eGhyLnN0YXR1c31gKTsKICAgIH0KICB9OwogIHhoci5vbmVy
+cm9yID0gZnVuY3Rpb24oZSkgewogICAgYWxlcnQoYENvdWxkIG5vdCBsb2FkICR7cGF0aH07IHByZXZp
+ZXcgc2VydmVyIG1pZ2h0IGJlIGRpc2Nvbm5lY3RlZC5gKTsKICB9OwogIHhoci5zZW5kKCk7Cn0KCmZ1
+bmN0aW9uIHdyaXRlUmVnaW9uRXhwbGFuYXRpb24ocmVzcG9uc2UpIHsKICBjb25zdCBlZGl0UGFuZWwg
+PSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIpOwogIGVk
+aXRQYW5lbC5pbm5lckhUTUwgPSAiIjsKICBjb25zdCByZWdpb25Mb2NhdGlvbiA9IGRvY3VtZW50LmNy
+ZWF0ZUVsZW1lbnQoInAiKTsKICByZWdpb25Mb2NhdGlvbi5jbGFzc0xpc3QuYWRkKCJyZWdpb24tbG9j
+YXRpb24iKTsKICAvLyBJbnNlcnQgYSB6ZXJvLXdpZHRoIHNwYWNlIGFmdGVyIGVhY2ggIi8iLCB0byBh
+bGxvdyBsaW5lcyB0byB3cmFwIGFmdGVyIGVhY2gKICAvLyBkaXJlY3RvcnkgbmFtZS4KICBjb25zdCBw
+YXRoID0gcmVzcG9uc2VbInBhdGgiXS5yZXBsYWNlKC9cLy9nLCAiL1x1MjAwQiIpOwogIHJlZ2lvbkxv
+Y2F0aW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGAke3BhdGh9IGApKTsKICBj
+b25zdCByZWdpb25MaW5lID0gcmVnaW9uTG9jYXRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
+RWxlbWVudCgic3BhbiIpKTsKICByZWdpb25MaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
+eHROb2RlKGBsaW5lICR7cmVzcG9uc2VbImxpbmUiXX1gKSk7CiAgcmVnaW9uTGluZS5jbGFzc0xpc3Qu
+YWRkKCJub3dyYXAiKTsKICBlZGl0UGFuZWwuYXBwZW5kQ2hpbGQocmVnaW9uTG9jYXRpb24pOwogIGNv
+bnN0IGV4cGxhbmF0aW9uID0gZWRpdFBhbmVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
+bnQoInAiKSk7CiAgZXhwbGFuYXRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
+cmVzcG9uc2VbImV4cGxhbmF0aW9uIl0pKTsKICBjb25zdCBkZXRhaWxDb3VudCA9IHJlc3BvbnNlWyJk
+ZXRhaWxzIl0ubGVuZ3RoOwogIGlmIChkZXRhaWxDb3VudCA9PSAwKSB7CiAgICAvLyBIYXZpbmcgMCBk
+ZXRhaWxzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBleHBlY3RlZCBwb3NzaWJpbGl0eSwgYnV0IGhhbmRs
+aW5nCiAgICAvLyB0aGUgcG9zc2liaWxpdHkgcHJldmVudHMgYXdrd2FyZCB0ZXh0LCAiZm9yIDAgcmVh
+c29uczoiLgogICAgZXhwbGFuYXRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
+Ii4iKSk7CiAgfSBlbHNlIHsKICAgIGV4cGxhbmF0aW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
+ZVRleHROb2RlKAogICAgICAgIGRldGFpbENvdW50ID09IDEKICAgICAgICAgICAgPyBgIGZvciAke2Rl
+dGFpbENvdW50fSByZWFzb246YCA6IGAgZm9yICR7ZGV0YWlsQ291bnR9IHJlYXNvbnM6YCkpOwogICAg
+Y29uc3QgZGV0YWlsTGlzdCA9IGVkaXRQYW5lbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
+ZW50KCJvbCIpKTsKICAgIGZvciAoY29uc3QgZGV0YWlsIG9mIHJlc3BvbnNlWyJkZXRhaWxzIl0pIHsK
+ICAgICAgY29uc3QgZGV0YWlsSXRlbSA9IGRldGFpbExpc3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
+YXRlRWxlbWVudCgibGkiKSk7CiAgICAgIGRldGFpbEl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
+YXRlVGV4dE5vZGUoZGV0YWlsWyJkZXNjcmlwdGlvbiJdKSk7CiAgICAgIGlmIChkZXRhaWxbImxpbmsi
+XSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZGV0YWlsSXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
+cmVhdGVUZXh0Tm9kZSgiICgiKSk7CiAgICAgICAgY29uc3QgYSA9IGRldGFpbEl0ZW0uYXBwZW5kQ2hp
+bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKTsKICAgICAgICBhLmFwcGVuZENoaWxkKGRvY3Vt
+ZW50LmNyZWF0ZVRleHROb2RlKGRldGFpbFsibGluayJdWyJ0ZXh0Il0pKTsKICAgICAgICBhLnNldEF0
+dHJpYnV0ZSgiaHJlZiIsIGRldGFpbFsibGluayJdWyJocmVmIl0pOwogICAgICAgIGEuY2xhc3NMaXN0
+LmFkZCgibmF2LWxpbmsiKTsKICAgICAgICBkZXRhaWxJdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
+ZWF0ZVRleHROb2RlKCIpIikpOwogICAgICB9CiAgICB9CiAgfQogIGlmIChyZXNwb25zZVsiZWRpdHMi
+XSAhPT0gdW5kZWZpbmVkKSB7CiAgICBmb3IgKGNvbnN0IGVkaXQgb2YgcmVzcG9uc2VbImVkaXRzIl0p
+IHsKICAgICAgY29uc3QgZWRpdFBhcmFncmFwaCA9IGVkaXRQYW5lbC5hcHBlbmRDaGlsZChkb2N1bWVu
+dC5jcmVhdGVFbGVtZW50KCJwIikpOwogICAgICBjb25zdCBhID0gZWRpdFBhcmFncmFwaC5hcHBlbmRD
+aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpOwogICAgICBhLmFwcGVuZENoaWxkKGRvY3Vt
+ZW50LmNyZWF0ZVRleHROb2RlKGVkaXRbInRleHQiXSkpOwogICAgICBhLnNldEF0dHJpYnV0ZSgiaHJl
+ZiIsIGVkaXRbImhyZWYiXSk7CiAgICAgIGEuY2xhc3NMaXN0LmFkZCgicG9zdC1saW5rIik7CiAgICB9
+CiAgfQp9CgovLyBMb2FkIHRoZSBleHBsYW5hdGlvbiBmb3IgW3JlZ2lvbl0sIGludG8gdGhlICIucGFu
+ZWwtY29udGVudCIgZGl2LgpmdW5jdGlvbiBsb2FkUmVnaW9uRXhwbGFuYXRpb24ocmVnaW9uKSB7CiAg
+Ly8gUmVxdWVzdCB0aGUgcmVnaW9uLCB0aGVuIGRvIHdvcmsgd2l0aCB0aGUgcmVzcG9uc2UuCiAgY29u
+c3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlv
+bi5wYXRobmFtZTsKICBjb25zdCBvZmZzZXQgPSByZWdpb24uZGF0YXNldC5vZmZzZXQ7CiAgeGhyLm9w
+ZW4oIkdFVCIsIHBhdGggKyBgP3JlZ2lvbj1yZWdpb24mb2Zmc2V0PSR7b2Zmc2V0fWApOwogIHhoci5z
+ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwogIHhoci5v
+bmxvYWQgPSBmdW5jdGlvbigpIHsKICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKICAgICAgY29u
+c3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOwogICAgICB3cml0ZVJlZ2lv
+bkV4cGxhbmF0aW9uKHJlc3BvbnNlKTsKICAgICAgYWRkQ2xpY2tIYW5kbGVycygiLmVkaXQtcGFuZWwg
+LnBhbmVsLWNvbnRlbnQiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFsZXJ0KGBSZXF1ZXN0IGZhaWxlZDsg
+c3RhdHVzIG9mICR7eGhyLnN0YXR1c31gKTsKICAgIH0KICB9OwogIHhoci5vbmVycm9yID0gZnVuY3Rp
+b24oZSkgewogICAgYWxlcnQoYENvdWxkIG5vdCBsb2FkICR7cGF0aH07IHByZXZpZXcgc2VydmVyIG1p
+Z2h0IGJlIGRpc2Nvbm5lY3RlZC5gKTsKICB9OwogIHhoci5zZW5kKCk7Cn0KCmZ1bmN0aW9uIGRlYm91
+bmNlKGZuLCBkZWxheSkgewogIHZhciB0aW1lb3V0OwogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHZh
+ciBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgICB0aW1lb3V0ID0gbnVsbDsKICAgIH07CiAgICB2YXIg
+Y2FsbE5vdyA9ICF0aW1lb3V0OwogICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgdGltZW91dCA9
+IHNldFRpbWVvdXQobGF0ZXIsIGRlbGF5KTsKICAgIGlmIChjYWxsTm93KSBmbi5hcHBseSh0aGlzKTsK
+CX07Cn07CgovLyBSZXNpemUgdGhlIGZpeGVkLXNpemUgYW5kIGZpeGVkLXBvc2l0aW9uIG5hdmlnYXRp
+b24gYW5kIGluZm9ybWF0aW9uIHBhbmVscy4KZnVuY3Rpb24gcmVzaXplUGFuZWxzKCkgewogIGNvbnN0
+IG5hdklubmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm5hdi1pbm5lciIpOwogIGNvbnN0IGhl
+aWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICBuYXZJbm5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQg
+KyAicHgiOwoKICBjb25zdCBpbmZvUGFuZWxIZWlnaHQgPSBoZWlnaHQgLyAyIC0gNjsKICBjb25zdCBl
+ZGl0UGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZWRpdC1wYW5lbCIpOwogIGVkaXRQYW5l
+bC5zdHlsZS5oZWlnaHQgPSBpbmZvUGFuZWxIZWlnaHQgKyAicHgiOwoKICBjb25zdCBlZGl0TGlzdEhl
+aWdodCA9IGhlaWdodCAvIDIgLSA2OwogIGNvbnN0IGVkaXRMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxl
+Y3RvcigiLmVkaXQtbGlzdCIpOwogIGVkaXRMaXN0LnN0eWxlLmhlaWdodCA9IGVkaXRMaXN0SGVpZ2h0
+ICsgInB4IjsKfQoKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIChl
+dmVudCkgPT4gewogIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgY29uc3Qg
+b2Zmc2V0ID0gZ2V0T2Zmc2V0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICBjb25zdCBsaW5lTnVtYmVy
+ID0gZ2V0TGluZSh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LnF1
+ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQ7CiAgbG9hZE5hdmlnYXRpb25UcmVlKCk7CiAg
+aWYgKHBhdGggIT09ICIvIiAmJiBwYXRoICE9PSByb290KSB7CiAgICAvLyBUT0RPKHNyYXdsaW5zKTog
+cmVwbGFjZVN0YXRlPwogICAgbG9hZEZpbGUocGF0aCwgb2Zmc2V0LCBsaW5lTnVtYmVyLAogICAgICAg
+ICgpID0+IHsgcHVzaFN0YXRlKHBhdGgsIG9mZnNldCwgbGluZU51bWJlcikgfSk7CiAgfQogIHJlc2l6
+ZVBhbmVscygpOwp9KTsKCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIChldmVudCkg
+PT4gewogIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgY29uc3Qgb2Zmc2V0
+ID0gZ2V0T2Zmc2V0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICBjb25zdCBsaW5lTnVtYmVyID0gZ2V0
+TGluZSh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHBhdGgubGVuZ3RoID4gMSkgewogICAgbG9h
+ZEZpbGUocGF0aCwgb2Zmc2V0LCBsaW5lTnVtYmVyKTsKICB9IGVsc2UgewogICAgLy8gQmxhbmsgb3V0
+IHRoZSBwYWdlLCBmb3IgdGhlIGluZGV4IHNjcmVlbi4KICAgIHdyaXRlQ29kZUFuZFJlZ2lvbnMoeyJy
+ZWdpb25zIjogIiIsICJuYXZDb250ZW50IjogIiJ9KTsKICAgIHVwZGF0ZVBhZ2UoIiZuYnNwOyIsIG51
+bGwpOwogIH0KfSk7Cgp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgKGV2ZW50KSA9PiB7
+CiAgZGVib3VuY2UocmVzaXplUGFuZWxzLCAyMDApKCk7Cn0pOwoKLy8gV2hlbiBzY3JvbGxpbmcgdGhl
+IHBhZ2UsIGRldGVybWluZSB3aGV0aGVyIHRoZSBuYXZpZ2F0aW9uIGFuZCBpbmZvcm1hdGlvbgovLyBw
+YW5lbHMgbmVlZCB0byBiZSBmaXhlZCBpbiBwbGFjZSwgb3IgYWxsb3dlZCB0byBzY3JvbGwuCndpbmRv
+dy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoZXZlbnQpID0+IHsKICBjb25zdCBuYXZQYW5lbCA9
+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5uYXYtcGFuZWwiKTsKICBjb25zdCBuYXZJbm5lciA9IG5h
+dlBhbmVsLnF1ZXJ5U2VsZWN0b3IoIi5uYXYtaW5uZXIiKTsKICBjb25zdCBpbmZvUGFuZWwgPSBkb2N1
+bWVudC5xdWVyeVNlbGVjdG9yKCIuaW5mby1wYW5lbCIpOwogIGNvbnN0IHBhbmVsQ29udGFpbmVyID0g
+ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBhbmVsLWNvbnRhaW5lciIpOwogIGNvbnN0IGlubmVyVG9w
+T2Zmc2V0ID0gbmF2UGFuZWwub2Zmc2V0VG9wOwogIGlmICh3aW5kb3cucGFnZVlPZmZzZXQgPiBpbm5l
+clRvcE9mZnNldCkgewogICAgaWYgKCFuYXZJbm5lci5jbGFzc0xpc3QuY29udGFpbnMoImZpeGVkIikp
+IHsKICAgICAgY29uc3QgbmF2UGFuZWxXaWR0aCA9IG5hdlBhbmVsLm9mZnNldFdpZHRoIC0gMTQ7CiAg
+ICAgIG5hdlBhbmVsLnN0eWxlLndpZHRoID0gbmF2UGFuZWxXaWR0aCArICJweCI7CiAgICAgIC8vIFN1
+YnRyYWN0IDdweCBmb3IgbmF2LWlubmVyJ3MgcGFkZGluZy4KICAgICAgbmF2SW5uZXIuc3R5bGUud2lk
+dGggPSBuYXZQYW5lbFdpZHRoICsgNyArICJweCI7CiAgICAgIG5hdklubmVyLmNsYXNzTGlzdC5hZGQo
+ImZpeGVkIik7CiAgICB9CiAgICBpZiAoIXBhbmVsQ29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygi
+Zml4ZWQiKSkgewogICAgICBjb25zdCBpbmZvUGFuZWxXaWR0aCA9IGluZm9QYW5lbC5vZmZzZXRXaWR0
+aDsKICAgICAgaW5mb1BhbmVsLnN0eWxlLndpZHRoID0gaW5mb1BhbmVsV2lkdGggKyAicHgiOwogICAg
+ICBwYW5lbENvbnRhaW5lci5zdHlsZS53aWR0aCA9IGluZm9QYW5lbFdpZHRoICsgInB4IjsKICAgICAg
+cGFuZWxDb250YWluZXIuY2xhc3NMaXN0LmFkZCgiZml4ZWQiKTsKICAgIH0KICB9IGVsc2UgewogICAg
+aWYgKG5hdklubmVyLmNsYXNzTGlzdC5jb250YWlucygiZml4ZWQiKSkgewogICAgICBuYXZQYW5lbC5z
+dHlsZS53aWR0aCA9ICIiOwogICAgICBuYXZJbm5lci5zdHlsZS53aWR0aCA9ICIiOwogICAgICBuYXZJ
+bm5lci5jbGFzc0xpc3QucmVtb3ZlKCJmaXhlZCIpOwogICAgfQogICAgaWYgKHBhbmVsQ29udGFpbmVy
+LmNsYXNzTGlzdC5jb250YWlucygiZml4ZWQiKSkgewogICAgICBpbmZvUGFuZWwuc3R5bGUud2lkdGgg
+PSAiIjsKICAgICAgcGFuZWxDb250YWluZXIuc3R5bGUud2lkdGggPSAiIjsKICAgICAgcGFuZWxDb250
+YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZml4ZWQiKTsKICAgIH0KICB9CiAgZGVib3VuY2UocmVzaXpl
+UGFuZWxzLCAyMDApKCk7Cn0pOwo=
+''';
+
+String _migration_css;
+String _migration_css_base64 = '''
+LyogQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUg
+dGhlIEFVVEhPUlMgZmlsZSAgKi8KLyogZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVz
+ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgKi8KLyogQlNELXN0eWxlIGxpY2Vu
+c2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gICAgICAgICAgICAgICAgICAg
+Ki8KCmJvZHkgewogIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwogIGNvbG9yOiB3aGl0ZTsKICBmb250
+LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWY7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7
+Cn0KCmgxIHsKICBmb250LXNpemU6IDIuNGVtOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbWFyZ2luOiA4
+cHggOHB4IDAgOHB4Owp9CgpoMiN1bml0LW5hbWUgewogIGZvbnQtc2l6ZTogMS4yZW07CiAgZm9udC13
+ZWlnaHQ6IDYwMDsKICBtYXJnaW46IDhweCA4cHggMCA4cHg7Cn0KCi5ob3Jpem9udGFsIHsKICBkaXNw
+bGF5OiBmbGV4Owp9CgoucGFuZWwtaGVhZGluZyB7CiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2Vp
+Z2h0OiA2MDA7CiAgbWFyZ2luLXRvcDogMDsKICBwYWRkaW5nOiA3cHggN3B4IDAgN3B4Owp9CgoubmF2
+LWxpbmssIC5yZWdpb24gewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLm5hdi1wYW5lbCB7CiAgYmFja2dy
+b3VuZC1jb2xvcjogIzI4MmIyZTsKICBmbGV4OiAxIDEgMjcwcHg7CiAgZm9udC1zaXplOiAxNHB4Owog
+IC8qIDEwcHggdG8gbWF0Y2ggZXhhY3QgdG9wIG1hcmdpbiBvZiAuY29udGVudC4KICAgKiAwLjhlbSB0
+byBwYWlyIHdpdGggdGhlIC0wLjVlbSBtYXJnaW4gb2YgLmNvbnRlbnQsIHByb2R1Y2luZyBhIG5ldCBt
+YXJnaW4KICAgKiBiZXR3ZWVuIHRoZSB0d28gb2YgMC4zZW0uCiAgICovCiAgbWFyZ2luOiAxMHB4IDAu
+OGVtIDAgMDsKfQoKLm5hdi1pbm5lciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MmIyZTsKICBvdmVy
+ZmxvdzogYXV0bzsKICBwYWRkaW5nOiAwIDAgN3B4IDdweDsKfQoKLmZpeGVkIHsKICBwb3NpdGlvbjog
+Zml4ZWQ7CiAgdG9wOiAwOwp9CgoubmF2LWlubmVyIC5yb290IHsKICBtYXJnaW46IDA7Cn0KCi5uYXYt
+aW5uZXIgdWwgewogIHBhZGRpbmctbGVmdDogMTJweDsKfQoubmF2LWlubmVyID4gdWwgewogIHBhZGRp
+bmctbGVmdDogMDsKICBtYXJnaW4tdG9wOiAwOwp9CgoubmF2LWlubmVyIGxpIHsKICBsaXN0LXN0eWxl
+LXR5cGU6IG5vbmU7Cn0KCi5uYXYtaW5uZXIgbGkuZGlyIHsKICBtYXJnaW4tbGVmdDogNXB4Owp9Cgou
+bmF2LWlubmVyIGxpOm5vdCguZGlyKSB7CiAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgbWFyZ2luLWJvdHRv
+bTogM3B4Owp9CgoubmF2LWlubmVyIGxpLmRpciAuYXJyb3cgewogIGN1cnNvcjogcG9pbnRlcjsKICBk
+aXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMHB4OwogIG1hcmdpbi1yaWdodDogNHB4
+OwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2Utb3V0Owp9CgoubmF2LWlubmVyIGxpLmRp
+ciAuYXJyb3cuY29sbGFwc2VkIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOwp9CgoubmF2LWlu
+bmVyIHVsIHsKICBtYXgtaGVpZ2h0OiAyMDAwcHg7CiAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjVz
+IGVhc2Utb3V0Owp9CgoubmF2LWlubmVyIHVsLmNvbGxhcHNlZCB7CiAgbWF4LWhlaWdodDogMCAhaW1w
+b3J0YW50OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5uYXYtaW5uZXIgLm5hdi1saW5rIHsKICBjb2xv
+cjogIzMzY2NmZjsKfQoKLm5hdi1pbm5lciAuc2VsZWN0ZWQtZmlsZSB7CiAgY29sb3I6IHdoaXRlOwog
+IGN1cnNvcjogaW5oZXJpdDsKICBmb250LXdlaWdodDogNjAwOwogIHRleHQtZGVjb3JhdGlvbjogbm9u
+ZTsKfQoKLmVkaXQtY291bnQgewogIGJhY2tncm91bmQtY29sb3I6ICNjY2NjMDA7CiAgYm9yZGVyLXJh
+ZGl1czogMTVweDsKICBjb2xvcjogIzAwMDAwMDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9u
+dC1zaXplOiAxMXB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbWFyZ2luLWxlZnQ6IDVweDsKICBtaW4t
+d2lkdGg6IDI1cHg7CiAgcGFkZGluZzogNXB4IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouY29u
+dGVudCB7CiAgZmxleDogMCAxIGF1dG87CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAvKioKICAg
+KiBMZWZ0IG1hcmdpbiBvZmZzZXRzIHRoZSBtYXJnaW4gaW50cm9kdWNlZCBieSB0aGUgYWJzb2x1dGVs
+eSBwb3NpdGlvbmVkCiAgICogY2hpbGQgZGl2LgogICAqLwogIG1hcmdpbjogMTBweCAxMHB4IDEwcHgg
+LTAuNWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aGl0ZS1zcGFjZTogcHJlOwp9CgouY29kZSB7
+CiAgbGVmdDogMC41ZW07CiAgLyogSW5jcmVhc2UgbGluZSBoZWlnaHQgdG8gbWFrZSByb29tIGZvciBi
+b3JkZXJzIGluIG5vbi1udWxsYWJsZSB0eXBlCiAgICogcmVnaW9ucy4KICAgKi8KICBsaW5lLWhlaWdo
+dDogMS4zOwogIG1pbi1oZWlnaHQ6IDYwMHB4OwogIHBhZGRpbmctbGVmdDogNjJweDsKICBwb3NpdGlv
+bjogaW5oZXJpdDsKICB6LWluZGV4OiAxMDA7Cn0KCi5jb2RlLmhsanMgewogIGJhY2tncm91bmQtY29s
+b3I6IGluaGVyaXQ7Cn0KCi5jb2RlIC53ZWxjb21lIHsKICBmb250LWZhbWlseTogJ09wZW4gU2Fucycs
+IHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxOHB4OwogIG1hcmdpbi1yaWdodDogNjJweDsKfQoKLmNv
+ZGUgLm5hdi1saW5rIHsKICBjb2xvcjogaW5oZXJpdDsKICB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9u
+ZTsKfQoKLmNvZGUgLm5hdi1saW5rOnZpc2l0ZWQgewogIGNvbG9yOiBpbmhlcml0OwogIHRleHQtZGVj
+b3JhdGlvbi1saW5lOiBub25lOwp9CgouY29kZSAubmF2LWxpbms6aG92ZXIgewogIHRleHQtZGVjb3Jh
+dGlvbi1saW5lOiB1bmRlcmxpbmU7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLnJlZ2lvbnMgewogIGJh
+Y2tncm91bmQtY29sb3I6ICMyODJiMmU7CiAgcGFkZGluZzogMC41ZW0gMCAwLjVlbSAwLjVlbTsKICBw
+b3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogMC41ZW07CiAgdG9wOiAwOwp9CgoucmVnaW9ucyB0YWJs
+ZSB7CiAgYm9yZGVyLXNwYWNpbmc6IDA7Cn0KCi5yZWdpb25zIHRkIHsKICBib3JkZXI6IG5vbmU7CiAg
+LyogVGhlIGNvbnRlbnQgb2YgdGhlIHJlZ2lvbnMgaXMgbm90IHZpc2libGU7IHRoZSB1c2VyIGluc3Rl
+YWQgd2lsbCBzZWUgdGhlCiAgICogaGlnaGxpZ2h0ZWQgY29weSBvZiB0aGUgY29udGVudC4gKi8KICBj
+b2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTsKICBsaW5lLWhlaWdodDogMS4zOwogIHBhZGRpbmc6
+IDA7CiAgd2hpdGUtc3BhY2U6IHByZTsKfQoKLnJlZ2lvbnMgdGQ6ZW1wdHk6YWZ0ZXIgewogIGNvbnRl
+bnQ6ICJcMDBhMCI7Cn0KCi5yZWdpb25zIHRyLmhpZ2hsaWdodCB0ZDpsYXN0LWNoaWxkIHsKICBiYWNr
+Z3JvdW5kLWNvbG9yOiAjNDQ0NDQ0Owp9CgoucmVnaW9ucyB0ZC5saW5lLW5vIHsKICBib3JkZXItcmln
+aHQ6IHNvbGlkICMyODJiMmUgMnB4OwogIGNvbG9yOiAjOTk5OTk5OwogIGRpc3BsYXk6IGlubGluZS1i
+bG9jazsKICBwYWRkaW5nLXJpZ2h0OiA0cHg7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgdmlzaWJpbGl0
+eTogdmlzaWJsZTsKICB3aWR0aDogNTBweDsKfQoKLnJlZ2lvbnMgdHIuaGlnaGxpZ2h0IHRkLmxpbmUt
+bm8gewogIGJvcmRlci1yaWdodDogc29saWQgI2NjY2NjYyAycHg7Cn0KCi5yZWdpb24gewogIGRpc3Bs
+YXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmlzaWJpbGl0eTogdmlzaWJs
+ZTsKICB6LWluZGV4OiAyMDA7Cn0KCi5yZWdpb24uYWRkZWQtcmVnaW9uIHsKICBiYWNrZ3JvdW5kLWNv
+bG9yOiAjY2NmZmNjOwogIGNvbG9yOiAjMDAzMzAwOwp9CgoucmVnaW9uLnJlbW92ZWQtcmVnaW9uIHsK
+ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2NjY2OwogIGNvbG9yOiAjMDAxMTAwOwp9CgoucmVnaW9uLnVu
+Y2hhbmdlZC1yZWdpb24gewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBi
+b3JkZXItYm90dG9tOiBzb2xpZCAycHggI2NjY2NjYzsKICAvKiBJbnZpc2libGUgdGV4dDsgdXNlIHVu
+ZGVybHlpbmcgaGlnaGxpZ2h0aW5nLiAqLwogIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogIC8qIFJl
+ZHVjZSBsaW5lIGhlaWdodCB0byBtYWtlIHJvb20gZm9yIGJvcmRlci4gKi8KICBsaW5lLWhlaWdodDog
+MTsKfQoKLnRhcmdldCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkY5OTsKICBjb2xvcjogYmxhY2s7
+CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZpc2liaWxpdHk6IHZpc2libGU7Cn0KCi5pbmZvLXBhbmVs
+IHsKICBmbGV4OiAxIDEgMjcwcHg7CiAgZm9udC1zaXplOiAxNHB4OwogIG1hcmdpbjogMTBweCAwOwp9
+CgouaW5mby1wYW5lbCAuZWRpdC1wYW5lbCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MmIyZTsKICBv
+dmVyZmxvdzogYXV0bzsKfQoKLmluZm8tcGFuZWwgLnBhbmVsLWNvbnRlbnQgewogIGZvbnQtc2l6ZTog
+MTNweDsKICBwYWRkaW5nOiA3cHg7Cn0KCi5pbmZvLXBhbmVsIC5wYW5lbC1jb250ZW50ID4gOmZpcnN0
+LWNoaWxkIHsKICBtYXJnaW4tdG9wOiAwOwp9CgouaW5mby1wYW5lbCAucmVnaW9uLWxvY2F0aW9uIHsK
+ICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgdGV4dC1pbmRlbnQ6IC0xMnB4Owp9CgouaW5mby1wYW5lbCAu
+bm93cmFwIHsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouaW5mby1wYW5lbCB1bCwKLmluZm8tcGFu
+ZWwgb2wgewogIHBhZGRpbmctbGVmdDogMjBweDsKfQoKLmluZm8tcGFuZWwgYSB7CiAgY29sb3I6ICMz
+M2NjZmY7Cn0KCi5pbmZvLXBhbmVsIC5lZGl0LWxpc3QgewogIGJhY2tncm91bmQtY29sb3I6ICMyODJi
+MmU7CiAgbWFyZ2luLXRvcDogMTJweDsKICBvdmVyZmxvdzogYXV0bzsKfQoKLmVkaXQtbGlzdCAuZWRp
+dCB7CiAgbWFyZ2luOiAzcHggMDsKICBwYWRkaW5nLWxlZnQ6IDIxcHg7CiAgdGV4dC1pbmRlbnQ6IC0y
+MXB4Owp9CgouZWRpdC1saXN0IC5lZGl0LWxpbmsgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLmZvb3Rl
+ciB7CiAgcGFkZGluZzogOHB4IDhweCAxMDBweCA4cHg7Cn0K
+''';
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_link.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_link.dart
index 4a82dc2..342e125 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_link.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_link.dart
@@ -9,14 +9,14 @@
   /// The relative URL of this compilation unit on the preview server.
   final String url;
   final List<String> pathParts;
-  final int modificationCount;
+  final int editCount;
 
   /// The number of directories deep in which this compilation unit is found.
   ///
   /// A compilation unit in the root has a depth of 0.
   final int depth;
 
-  UnitLink(this.url, this.pathParts, this.modificationCount)
+  UnitLink(this.url, this.pathParts, this.editCount)
       : depth = pathParts.length - 1;
 
   String get relativePath => path.joinAll(pathParts);
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart
index fa26c56b..fd4e92e 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart
@@ -34,7 +34,7 @@
   /// Return the path context used to manipulate paths.
   path.Context get pathContext => migrationInfo.pathContext;
 
-  /// Builds an HTML view of the instrumentation information in [unitInfo].
+  /// Builds a JSON view of the instrumentation information in [unitInfo].
   String render() {
     Map<String, dynamic> response = {
       'thisUnit': migrationInfo.computeName(unitInfo),
@@ -45,33 +45,23 @@
     return jsonEncode(response);
   }
 
-  String _computeEditList() {
-    var content = StringBuffer();
-    var editCount = unitInfo.fixRegions.length;
-    // TODO(srawlins): Change the edit count to be badge-like (number in a
-    //  circle).
-    if (editCount == 1) {
-      content
-          .write('<p><strong>$editCount</strong> edit was made to this file. '
-              "Click the edit's checkbox to toggle its reviewed state.</p>");
-    } else {
-      content
-          .write('<p><strong>$editCount</strong> edits were made to this file. '
-              "Click an edit's checkbox to toggle its reviewed state.</p>");
-    }
-    for (var region in unitInfo.fixRegions) {
-      content.write('<p class="edit">');
-      // TODO(srawlins): Make checkboxes functional.
-      content.write('<input type="checkbox" title="Click to mark reviewed" '
-          'disabled="disabled"> ');
-      content.write('line ${region.lineNumber}: ');
-      content.write(_htmlEscape.convert(region.explanation));
-      content.write('.</p>');
-    }
-    return content.toString();
+  /// Returns the list of edits, as JSON.
+  Map<String, Object> _computeEditList() {
+    var response = <String, Object>{
+      'editCount': unitInfo.fixRegions.length,
+      'edits': [
+        for (var region in unitInfo.fixRegions)
+          {
+            'line': region.lineNumber,
+            'explanation': region.explanation,
+            'offset': region.offset,
+          },
+      ],
+    };
+    return response;
   }
 
-  /// Return the content of the file with navigation links and anchors added.
+  /// Returns the content of the file with navigation links and anchors added.
   ///
   /// The content of the file (not including added links and anchors) will be
   /// HTML-escaped.
@@ -145,19 +135,25 @@
     return navContent2.toString();
   }
 
-  /// Return the content of regions, based on the [unitInfo] for both
+  /// Returns the content of regions, based on the [unitInfo] for both
   /// unmodified and modified regions.
+  ///
+  /// The content of the file (not including added links and anchors) will be
+  /// HTML-escaped.
   String _computeRegionContent() {
     String content = unitInfo.content;
     StringBuffer regions = StringBuffer();
     int lineNumber = 1;
 
-    void writeSplitLines(String lines) {
+    void writeSplitLines(String lines,
+        {String perLineOpeningTag = '', String perLineClosingTag = ''}) {
       Iterator<String> lineIterator = LineSplitter.split(lines).iterator;
       lineIterator.moveNext();
 
       while (true) {
+        regions.write(perLineOpeningTag);
         regions.write(_htmlEscape.convert(lineIterator.current));
+        regions.write(perLineClosingTag);
         if (lineIterator.moveNext()) {
           // If we're not on the last element, end this table row, and start a
           // new table row.
@@ -169,6 +165,26 @@
           break;
         }
       }
+      if (lines.endsWith('\n')) {
+        lineNumber++;
+        regions.write('</td></tr>'
+            '<tr><td class="line-no">$lineNumber</td>'
+            '<td class="line-$lineNumber">');
+      }
+    }
+
+    /// Returns the CSS class for a region with a given [RegionType].
+    String classForRegion(RegionType type) {
+      switch (type) {
+        case RegionType.add:
+          return 'added-region';
+        case RegionType.remove:
+          return 'removed-region';
+        case RegionType.unchanged:
+          return 'unchanged-region';
+        default:
+          return null;
+      }
     }
 
     int previousOffset = 0;
@@ -181,14 +197,11 @@
         writeSplitLines(content.substring(previousOffset, offset));
         previousOffset = offset + length;
       }
-      String regionClass = region.regionType == RegionType.fix
-          ? 'fix-region'
-          : 'non-nullable-type-region';
-      regions.write('<span class="region $regionClass" ');
-      regions.write('data-offset="$offset" data-line="$lineNumber">');
-      regions.write(
-          _htmlEscape.convert(content.substring(offset, offset + length)));
-      regions.write('</span>');
+      String regionClass = classForRegion(region.regionType);
+      String regionSpanTag = '<span class="region $regionClass" '
+          'data-offset="$offset" data-line="$lineNumber">';
+      writeSplitLines(content.substring(offset, offset + length),
+          perLineOpeningTag: regionSpanTag, perLineClosingTag: '</span>');
     }
     if (previousOffset < content.length) {
       // Last region of unmodified content.
@@ -198,8 +211,8 @@
     return regions.toString();
   }
 
-  /// Return the URL that will navigate to the given [target] in the file at the
-  /// given [relativePath].
+  /// Returns the URL that will navigate to the given [target] in the file at
+  /// the given [relativePath].
   String _uriForRelativePath(String relativePath, NavigationTarget target) {
     var queryParams = {
       'offset': target.offset,
diff --git a/pkg/analysis_server/lib/src/edit/preview/exception_page.dart b/pkg/analysis_server/lib/src/edit/preview/exception_page.dart
index ae7c30b..1a03854 100644
--- a/pkg/analysis_server/lib/src/edit/preview/exception_page.dart
+++ b/pkg/analysis_server/lib/src/edit/preview/exception_page.dart
@@ -27,8 +27,9 @@
 <h1>500 Exception in preview</h1>
 <p>
 We're sorry, but you've encountered a bug in the preview tool. Please visit
-<a href='https://github.com/dart-lang/sdk/issues/new'></a> to report the issue
-and include the stack trace below.
+<a href='https://github.com/dart-lang/sdk/issues/new'>
+github.com/dart-lang/sdk/issues/new</a> to report the issue and include the
+stack trace below.
 </p>
 <h2>$message</h2>
 <p style="white-space: pre">
diff --git a/pkg/analysis_server/lib/src/edit/preview/highlight_css_page.dart b/pkg/analysis_server/lib/src/edit/preview/highlight_css_page.dart
index fd1570c..4cb330d 100644
--- a/pkg/analysis_server/lib/src/edit/preview/highlight_css_page.dart
+++ b/pkg/analysis_server/lib/src/edit/preview/highlight_css_page.dart
@@ -4,7 +4,8 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/src/edit/nnbd_migration/highlight_css.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/resources/resources.g.dart'
+    as resources;
 import 'package:analysis_server/src/edit/preview/preview_page.dart';
 import 'package:analysis_server/src/edit/preview/preview_site.dart';
 
@@ -17,7 +18,7 @@
 
   /// Initialize a newly created CSS page within the given [site].
   HighlightCssPage(PreviewSite site)
-      : super(site, PreviewSite.highlightCssPagePath.substring(1));
+      : super(site, PreviewSite.highlightCssPath.substring(1));
 
   @override
   void generateBody(Map<String, String> params) {
@@ -29,9 +30,8 @@
     buf.write(pageContent());
   }
 
-  /// Return the content of the page, decoding it if it hasn't been decoded
-  /// before.
+  /// Return the content of the page.
   String pageContent() {
-    return _pageContent ??= decodeHighlightCss();
+    return _pageContent ??= resources.highlight_css;
   }
 }
diff --git a/pkg/analysis_server/lib/src/edit/preview/highlight_js_page.dart b/pkg/analysis_server/lib/src/edit/preview/highlight_js_page.dart
index d89042c..a024eca 100644
--- a/pkg/analysis_server/lib/src/edit/preview/highlight_js_page.dart
+++ b/pkg/analysis_server/lib/src/edit/preview/highlight_js_page.dart
@@ -4,7 +4,8 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/src/edit/nnbd_migration/highlight_js.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/resources/resources.g.dart'
+    as resources;
 import 'package:analysis_server/src/edit/preview/preview_page.dart';
 import 'package:analysis_server/src/edit/preview/preview_site.dart';
 
@@ -17,7 +18,7 @@
 
   /// Initialize a newly created JS page within the given [site].
   HighlightJSPage(PreviewSite site)
-      : super(site, PreviewSite.highlightJSPagePath.substring(1));
+      : super(site, PreviewSite.highlightJsPath.substring(1));
 
   @override
   void generateBody(Map<String, String> params) {
@@ -29,9 +30,8 @@
     buf.write(pageContent());
   }
 
-  /// Return the content of the page, decoding it if it hasn't been decoded
-  /// before.
+  /// Return the content of the page.
   String pageContent() {
-    return _pageContent ??= decodeHighlightJs();
+    return _pageContent ??= resources.highlight_pack_js;
   }
 }
diff --git a/pkg/analysis_server/lib/src/edit/preview/navigation_tree_page.dart b/pkg/analysis_server/lib/src/edit/preview/navigation_tree_page.dart
new file mode 100644
index 0000000..e4c025f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/edit/preview/navigation_tree_page.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/edit/nnbd_migration/navigation_tree_renderer.dart';
+import 'package:analysis_server/src/edit/preview/preview_page.dart';
+import 'package:analysis_server/src/edit/preview/preview_site.dart';
+
+/// The JSON that is displayed for the navigation tree.
+class NavigationTreePage extends PreviewPage {
+  /// Initialize a newly created navigation tree page within the given [site].
+  NavigationTreePage(PreviewSite site)
+      : super(site, site.migrationInfo.includedRoot);
+
+  @override
+  // TODO(srawlins): Refactor JSON-returning pages like this to not inherit all
+  //  of the HTML logic from  [PreviewPage].
+  void generateBody(Map<String, String> params) {
+    throw UnsupportedError('generateBody');
+  }
+
+  @override
+  Future<void> generatePage(Map<String, String> params) async {
+    var renderer = NavigationTreeRenderer(site.migrationInfo, site.pathMapper);
+    buf.write(renderer.render());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/edit/preview/preview_site.dart b/pkg/analysis_server/lib/src/edit/preview/preview_site.dart
index 4b229ea..bce1e06 100644
--- a/pkg/analysis_server/lib/src/edit/preview/preview_site.dart
+++ b/pkg/analysis_server/lib/src/edit/preview/preview_site.dart
@@ -14,6 +14,7 @@
 import 'package:analysis_server/src/edit/preview/highlight_js_page.dart';
 import 'package:analysis_server/src/edit/preview/http_preview_server.dart';
 import 'package:analysis_server/src/edit/preview/index_file_page.dart';
+import 'package:analysis_server/src/edit/preview/navigation_tree_page.dart';
 import 'package:analysis_server/src/edit/preview/not_found_page.dart';
 import 'package:analysis_server/src/edit/preview/region_page.dart';
 import 'package:analysis_server/src/status/pages.dart';
@@ -23,10 +24,12 @@
 class PreviewSite extends Site implements AbstractGetHandler {
   /// The path of the CSS page used to style the semantic highlighting within a
   /// Dart file.
-  static const highlightCssPagePath = '/css/androidstudio.css';
+  static const highlightCssPath = '/highlight.css';
 
   /// The path of the JS page used to associate highlighting within a Dart file.
-  static const highlightJSPagePath = '/js/highlight.pack.js';
+  static const highlightJsPath = '/highlight.pack.js';
+
+  static const navigationTreePath = '/_preview/navigationTree.json';
 
   /// The state of the migration being previewed.
   final MigrationState migrationState;
@@ -94,14 +97,18 @@
     }
     String path = uri.path;
     try {
-      if (path == highlightCssPagePath) {
+      if (path == highlightCssPath) {
         // Note: `return await` needed due to
         // https://github.com/dart-lang/language/issues/791
         return await respond(request, HighlightCssPage(this));
-      } else if (path == highlightJSPagePath) {
+      } else if (path == highlightJsPath) {
         // Note: `return await` needed due to
         // https://github.com/dart-lang/language/issues/791
         return await respond(request, HighlightJSPage(this));
+      } else if (path == navigationTreePath) {
+        // Note: `return await` needed due to
+        // https://github.com/dart-lang/language/issues/791
+        return await respond(request, NavigationTreePage(this));
       } else if (path == '/' || path == migrationInfo.includedRoot) {
         // Note: `return await` needed due to
         // https://github.com/dart-lang/language/issues/791
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index 1ee19e8..004e3e8 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -247,7 +247,7 @@
 
     /// Helper to create refactors that execute commands provided with
     /// the current file, location and document version.
-    createRefactor(
+    Either2<Command, CodeAction> createRefactor(
       CodeActionKind actionKind,
       String name,
       RefactoringKind refactorKind, [
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_symbols.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_symbols.dart
index 018e384..79aa29b 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_symbols.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_symbols.dart
@@ -147,7 +147,7 @@
 
       // Adds a symbol and it's children recursively, supplying the parent
       // name as required by SymbolInformation.
-      addSymbol(Outline outline, {String parentName}) {
+      void addSymbol(Outline outline, {String parentName}) {
         allSymbols.add(_asSymbolInformation(
           parentName,
           clientSupportedSymbolKinds,
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
index 116a5ae..b25a5d8 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
@@ -159,7 +159,7 @@
         : error(ErrorCodes.MethodNotFound, 'Unknown method ${message.method}');
   }
 
-  registerHandler(MessageHandler handler) {
+  void registerHandler(MessageHandler handler) {
     assert(
         handler.handlesMessage != null,
         'Unable to register handler ${handler.runtimeType} because it does '
@@ -168,7 +168,7 @@
     _messageHandlers[handler.handlesMessage] = handler;
   }
 
-  reject(Method method, ErrorCodes code, String message) {
+  void reject(Method method, ErrorCodes code, String message) {
     registerHandler(RejectMessageHandler(server, method, code, message));
   }
 
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index eaa0423..12787be 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -192,7 +192,7 @@
   RefactoringWorkspace get refactoringWorkspace => _refactoringWorkspace ??=
       RefactoringWorkspace(driverMap.values, searchEngine);
 
-  addPriorityFile(String path) {
+  void addPriorityFile(String path) {
     final didAdd = priorityFiles.add(path);
     assert(didAdd);
     if (didAdd) {
@@ -381,7 +381,7 @@
     sendNotification(message);
   }
 
-  removePriorityFile(String path) {
+  void removePriorityFile(String path) {
     final didRemove = priorityFiles.remove(path);
     assert(didRemove);
     if (didRemove) {
@@ -569,7 +569,7 @@
     notifyDeclarationsTracker(path);
   }
 
-  _updateDriversPriorityFiles() {
+  void _updateDriversPriorityFiles() {
     driverMap.values.forEach((driver) {
       driver.priorityFiles = priorityFiles.toList();
     });
@@ -754,5 +754,5 @@
 
 class NullNotificationManager implements NotificationManager {
   @override
-  noSuchMethod(Invocation invocation) {}
+  dynamic noSuchMethod(Invocation invocation) {}
 }
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 40e2bae..100a4f5 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -753,6 +753,39 @@
       element.returnType,
     );
 
+lsp.FlutterOutline toFlutterOutline(
+        server.LineInfo lineInfo, server.FlutterOutline outline) =>
+    lsp.FlutterOutline(
+      outline.kind.name,
+      outline.label,
+      outline.className,
+      outline.variableName,
+      outline.attributes != null
+          ? outline.attributes
+              .map(
+                  (attribute) => toFlutterOutlineAttribute(lineInfo, attribute))
+              .toList()
+          : null,
+      outline.dartElement != null
+          ? toElement(lineInfo, outline.dartElement)
+          : null,
+      toRange(lineInfo, outline.offset, outline.length),
+      toRange(lineInfo, outline.codeOffset, outline.codeLength),
+      outline.children != null
+          ? outline.children.map((c) => toFlutterOutline(lineInfo, c)).toList()
+          : null,
+    );
+
+lsp.FlutterOutlineAttribute toFlutterOutlineAttribute(
+        server.LineInfo lineInfo, server.FlutterOutlineAttribute attribute) =>
+    lsp.FlutterOutlineAttribute(
+        attribute.name,
+        attribute.label,
+        attribute.valueLocation != null
+            ? toRange(lineInfo, attribute.valueLocation.offset,
+                attribute.valueLocation.length)
+            : null);
+
 lsp.FoldingRange toFoldingRange(
     server.LineInfo lineInfo, server.FoldingRegion region) {
   final range = toRange(lineInfo, region.offset, region.length);
@@ -823,39 +856,6 @@
           : null,
     );
 
-lsp.FlutterOutline toFlutterOutline(
-        server.LineInfo lineInfo, server.FlutterOutline outline) =>
-    lsp.FlutterOutline(
-      outline.kind.name,
-      outline.label,
-      outline.className,
-      outline.variableName,
-      outline.attributes != null
-          ? outline.attributes
-              .map(
-                  (attribute) => toFlutterOutlineAttribute(lineInfo, attribute))
-              .toList()
-          : null,
-      outline.dartElement != null
-          ? toElement(lineInfo, outline.dartElement)
-          : null,
-      toRange(lineInfo, outline.offset, outline.length),
-      toRange(lineInfo, outline.codeOffset, outline.codeLength),
-      outline.children != null
-          ? outline.children.map((c) => toFlutterOutline(lineInfo, c)).toList()
-          : null,
-    );
-
-lsp.FlutterOutlineAttribute toFlutterOutlineAttribute(
-        server.LineInfo lineInfo, server.FlutterOutlineAttribute attribute) =>
-    lsp.FlutterOutlineAttribute(
-        attribute.name,
-        attribute.label,
-        attribute.valueLocation != null
-            ? toRange(lineInfo, attribute.valueLocation.offset,
-                attribute.valueLocation.length)
-            : null);
-
 lsp.Position toPosition(server.CharacterLocation location) {
   // LSP is zero-based, but analysis server is 1-based.
   return lsp.Position(location.lineNumber - 1, location.columnNumber - 1);
@@ -977,7 +977,7 @@
 
 Map<String, List<lsp.TextEdit>> toWorkspaceEditChanges(
     List<FileEditInformation> edits) {
-  createEdit(FileEditInformation file) {
+  MapEntry<String, List<lsp.TextEdit>> createEdit(FileEditInformation file) {
     final edits =
         file.edits.map((edit) => toTextEdit(file.lineInfo, edit)).toList();
     return MapEntry(file.doc.uri, edits);
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index caf804c..e5b3c4d 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -325,7 +325,10 @@
       startLine = offsetLocation.lineNumber;
       startColumn = offsetLocation.columnNumber;
     }
-  } on AnalysisException {}
+  } on AnalysisException {
+    // TODO(brianwilkerson) It doesn't look like the code in the try block
+    //  should be able to throw an exception. Try removing the try statement.
+  }
   return Location(unitElement.source.fullName, range.offset, range.length,
       startLine, startColumn);
 }
diff --git a/pkg/analysis_server/lib/src/search/workspace_symbols.dart b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
index b28cb6a..63adfd4 100644
--- a/pkg/analysis_server/lib/src/search/workspace_symbols.dart
+++ b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
@@ -138,7 +138,10 @@
       for (var library in libraries) {
         library.declarations.forEach(addDeclaration);
       }
-    } on _MaxNumberOfDeclarationsError {}
+    } on _MaxNumberOfDeclarationsError {
+      // Uses an exception to short circuit the recursion when there are too
+      // many declarations.
+    }
 
     return declarations;
   }
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index def78bb..b0b94d2 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -901,7 +901,10 @@
       try {
         String oldPath = i == 0 ? path : '$path.$i';
         File(oldPath).renameSync('$path.${i + 1}');
-      } catch (e) {}
+      } catch (e) {
+        // If a file can't be renamed, then leave it and attempt to rename the
+        // remaining files.
+      }
     }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
index e1c138d..eebf652 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
@@ -74,7 +74,7 @@
     return const <CompletionSuggestion>[];
   }
 
-  _addSuggestionsForType(InterfaceType type, DartCompletionRequest request,
+  void _addSuggestionsForType(InterfaceType type, DartCompletionRequest request,
       {bool isFunctionalArgument = false}) {
     OpType opType = request.opType;
     if (!isFunctionalArgument) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 7193ac6..7c84590 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -48,7 +48,7 @@
 /**
  * A visitor for generating keyword suggestions.
  */
-class _KeywordVisitor extends GeneralizingAstVisitor {
+class _KeywordVisitor extends GeneralizingAstVisitor<void> {
   final DartCompletionRequest request;
   final Object entity;
   final List<CompletionSuggestion> suggestions;
@@ -64,7 +64,7 @@
       (body is BlockFunctionBody && body.beginToken.isSynthetic);
 
   @override
-  visitArgumentList(ArgumentList node) {
+  void visitArgumentList(ArgumentList node) {
     if (request is DartCompletionRequestImpl) {
       //TODO(danrubel) consider adding opType to the API then remove this cast
       OpType opType = (request as DartCompletionRequestImpl).opType;
@@ -102,7 +102,7 @@
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node) {
     if (identical(entity, node.asOperator) &&
         node.expression is ParenthesizedExpression) {
       _addSuggestion(Keyword.ASYNC, DART_RELEVANCE_HIGH);
@@ -112,7 +112,7 @@
   }
 
   @override
-  visitBlock(Block node) {
+  void visitBlock(Block node) {
     Statement prevStmt = OpType.getPreviousStatement(node, entity);
     if (prevStmt is TryStatement) {
       if (prevStmt.finallyBlock == null) {
@@ -154,7 +154,7 @@
   }
 
   @override
-  visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(ClassDeclaration node) {
     // Don't suggest class name
     if (entity == node.name) {
       return;
@@ -176,7 +176,7 @@
   }
 
   @override
-  visitCompilationUnit(CompilationUnit node) {
+  void visitCompilationUnit(CompilationUnit node) {
     var previousMember;
     for (var member in node.childEntities) {
       if (entity == member) {
@@ -245,7 +245,7 @@
   }
 
   @override
-  visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
     if (node.initializers.isNotEmpty) {
       if (entity is ConstructorInitializer) {
         _addSuggestion(Keyword.ASSERT);
@@ -272,26 +272,26 @@
   }
 
   @override
-  visitDefaultFormalParameter(DefaultFormalParameter node) {
+  void visitDefaultFormalParameter(DefaultFormalParameter node) {
     if (entity == node.defaultValue) {
       _addExpressionKeywords(node);
     }
   }
 
   @override
-  visitExpression(Expression node) {
+  void visitExpression(Expression node) {
     _addExpressionKeywords(node);
   }
 
   @override
-  visitExpressionFunctionBody(ExpressionFunctionBody node) {
+  void visitExpressionFunctionBody(ExpressionFunctionBody node) {
     if (entity == node.expression) {
       _addExpressionKeywords(node);
     }
   }
 
   @override
-  visitExtensionDeclaration(ExtensionDeclaration node) {
+  void visitExtensionDeclaration(ExtensionDeclaration node) {
     // Don't suggest extension name
     if (entity == node.name) {
       return;
@@ -306,7 +306,7 @@
   }
 
   @override
-  visitFieldDeclaration(FieldDeclaration node) {
+  void visitFieldDeclaration(FieldDeclaration node) {
     VariableDeclarationList fields = node.fields;
     if (entity != fields) {
       return;
@@ -334,7 +334,7 @@
   }
 
   @override
-  visitForEachParts(ForEachParts node) {
+  void visitForEachParts(ForEachParts node) {
     if (entity == node.inKeyword) {
       Token previous = node.findPrevious(node.inKeyword);
       if (previous is SyntheticStringToken && previous.lexeme == 'in') {
@@ -350,14 +350,14 @@
   }
 
   @override
-  visitForElement(ForElement node) {
+  void visitForElement(ForElement node) {
     _addCollectionElementKeywords();
     _addExpressionKeywords(node);
     return super.visitForElement(node);
   }
 
   @override
-  visitFormalParameterList(FormalParameterList node) {
+  void visitFormalParameterList(FormalParameterList node) {
     AstNode constructorDeclaration =
         node.thisOrAncestorOfType<ConstructorDeclaration>();
     if (constructorDeclaration != null) {
@@ -380,7 +380,7 @@
   }
 
   @override
-  visitForParts(ForParts node) {
+  void visitForParts(ForParts node) {
     // Actual: for (int x i^)
     // Parsed: for (int x; i^;)
     // Handle the degenerate case while typing - for (int x i^)
@@ -395,7 +395,7 @@
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     // Actual: for (va^)
     // Parsed: for (va^; ;)
     if (node.forLoopParts == entity) {
@@ -404,7 +404,7 @@
   }
 
   @override
-  visitFunctionExpression(FunctionExpression node) {
+  void visitFunctionExpression(FunctionExpression node) {
     if (entity == node.body) {
       FunctionBody body = node.body;
       if (!body.isAsynchronous) {
@@ -423,14 +423,14 @@
   }
 
   @override
-  visitIfElement(IfElement node) {
+  void visitIfElement(IfElement node) {
     _addCollectionElementKeywords();
     _addExpressionKeywords(node);
     return super.visitIfElement(node);
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  void visitIfStatement(IfStatement node) {
     if (_isPreviousTokenSynthetic(entity, TokenType.CLOSE_PAREN)) {
       // analyzer parser
       // Actual: if (x i^)
@@ -452,7 +452,7 @@
   }
 
   @override
-  visitImportDirective(ImportDirective node) {
+  void visitImportDirective(ImportDirective node) {
     if (entity == node.asKeyword) {
       if (node.deferredKeyword == null) {
         _addSuggestion(Keyword.DEFERRED, DART_RELEVANCE_HIGH);
@@ -469,7 +469,7 @@
   }
 
   @override
-  visitInstanceCreationExpression(InstanceCreationExpression node) {
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (entity == node.constructorName) {
       // no keywords in 'new ^' expression
     } else {
@@ -478,7 +478,7 @@
   }
 
   @override
-  visitIsExpression(IsExpression node) {
+  void visitIsExpression(IsExpression node) {
     if (entity == node.isOperator) {
       _addSuggestion(Keyword.IS, DART_RELEVANCE_HIGH);
     } else {
@@ -487,18 +487,18 @@
   }
 
   @override
-  visitLibraryIdentifier(LibraryIdentifier node) {
+  void visitLibraryIdentifier(LibraryIdentifier node) {
     // no suggestions
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  void visitListLiteral(ListLiteral node) {
     _addCollectionElementKeywords();
     super.visitListLiteral(node);
   }
 
   @override
-  visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(MethodDeclaration node) {
     if (entity == node.body) {
       if (isEmptyBody(node.body)) {
         _addClassBodyKeywords();
@@ -516,7 +516,7 @@
   }
 
   @override
-  visitMethodInvocation(MethodInvocation node) {
+  void visitMethodInvocation(MethodInvocation node) {
     if (entity == node.methodName || entity == node.argumentList) {
       // no keywords in '.' expressions or type argument lists
       // Note that we're checking the argumentList rather than the typeArgumentList
@@ -529,7 +529,7 @@
   }
 
   @override
-  visitMixinDeclaration(MixinDeclaration node) {
+  void visitMixinDeclaration(MixinDeclaration node) {
     // Don't suggest mixin name
     if (entity == node.name) {
       return;
@@ -551,19 +551,19 @@
   }
 
   @override
-  visitNamedExpression(NamedExpression node) {
+  void visitNamedExpression(NamedExpression node) {
     if (entity is SimpleIdentifier && entity == node.expression) {
       _addExpressionKeywords(node);
     }
   }
 
   @override
-  visitNode(AstNode node) {
+  void visitNode(AstNode node) {
     // ignored
   }
 
   @override
-  visitParenthesizedExpression(ParenthesizedExpression node) {
+  void visitParenthesizedExpression(ParenthesizedExpression node) {
     Expression expression = node.expression;
     if (expression is Identifier || expression is PropertyAccess) {
       if (entity == node.rightParenthesis) {
@@ -580,14 +580,14 @@
   }
 
   @override
-  visitPrefixedIdentifier(PrefixedIdentifier node) {
+  void visitPrefixedIdentifier(PrefixedIdentifier node) {
     if (entity != node.identifier) {
       _addExpressionKeywords(node);
     }
   }
 
   @override
-  visitPropertyAccess(PropertyAccess node) {
+  void visitPropertyAccess(PropertyAccess node) {
     // suggestions before '.' but not after
     if (entity != node.propertyName) {
       super.visitPropertyAccess(node);
@@ -595,37 +595,37 @@
   }
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     if (entity == node.expression) {
       _addExpressionKeywords(node);
     }
   }
 
   @override
-  visitSetOrMapLiteral(SetOrMapLiteral node) {
+  void visitSetOrMapLiteral(SetOrMapLiteral node) {
     _addCollectionElementKeywords();
     super.visitSetOrMapLiteral(node);
   }
 
   @override
-  visitSpreadElement(SpreadElement node) {
+  void visitSpreadElement(SpreadElement node) {
     _addExpressionKeywords(node);
     return super.visitSpreadElement(node);
   }
 
   @override
-  visitStringLiteral(StringLiteral node) {
+  void visitStringLiteral(StringLiteral node) {
     // ignored
   }
 
   @override
-  visitSwitchCase(SwitchCase node) {
+  void visitSwitchCase(SwitchCase node) {
     _addStatementKeywords(node);
     return super.visitSwitchCase(node);
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     if (entity == node.expression) {
       _addExpressionKeywords(node);
     } else if (entity == node.rightBracket) {
@@ -651,7 +651,7 @@
   }
 
   @override
-  visitTryStatement(TryStatement node) {
+  void visitTryStatement(TryStatement node) {
     var obj = entity;
     if (obj is CatchClause ||
         (obj is KeywordToken && obj.value() == Keyword.FINALLY)) {
@@ -663,7 +663,7 @@
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     if (entity == node.initializer) {
       _addExpressionKeywords(node);
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
index 6b1bb3f..403338c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
@@ -46,7 +46,7 @@
  * This class visits elements in a class and provides suggestions based upon
  * the visible static members in that class.
  */
-class _SuggestionBuilder extends GeneralizingElementVisitor {
+class _SuggestionBuilder extends GeneralizingElementVisitor<void> {
   /**
    * The library containing the unit in which the completion is requested.
    */
@@ -60,41 +60,41 @@
   _SuggestionBuilder(this.containingLibrary);
 
   @override
-  visitClassElement(ClassElement element) {
+  void visitClassElement(ClassElement element) {
     element.visitChildren(this);
   }
 
   @override
-  visitConstructorElement(ConstructorElement element) {
+  void visitConstructorElement(ConstructorElement element) {
     _addSuggestion(element);
   }
 
   @override
-  visitElement(Element element) {
+  void visitElement(Element element) {
     // ignored
   }
 
   @override
-  visitExtensionElement(ExtensionElement element) {
+  void visitExtensionElement(ExtensionElement element) {
     element.visitChildren(this);
   }
 
   @override
-  visitFieldElement(FieldElement element) {
+  void visitFieldElement(FieldElement element) {
     if (element.isStatic) {
       _addSuggestion(element);
     }
   }
 
   @override
-  visitMethodElement(MethodElement element) {
+  void visitMethodElement(MethodElement element) {
     if (element.isStatic && !element.isOperator) {
       _addSuggestion(element);
     }
   }
 
   @override
-  visitPropertyAccessorElement(PropertyAccessorElement element) {
+  void visitPropertyAccessorElement(PropertyAccessorElement element) {
     if (element.isStatic) {
       _addSuggestion(element);
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index a41beec..cd9e001 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -182,7 +182,7 @@
 /**
  * This class creates suggestions based upon top-level elements.
  */
-class LibraryElementSuggestionBuilder extends SimpleElementVisitor
+class LibraryElementSuggestionBuilder extends SimpleElementVisitor<void>
     with ElementSuggestionBuilder {
   @override
   final LibraryElement containingLibrary;
@@ -195,7 +195,7 @@
       this.containingLibrary, this.kind, this.typesOnly, this.instCreation);
 
   @override
-  visitClassElement(ClassElement element) {
+  void visitClassElement(ClassElement element) {
     if (instCreation) {
       element.visitChildren(this);
     } else {
@@ -204,7 +204,7 @@
   }
 
   @override
-  visitConstructorElement(ConstructorElement element) {
+  void visitConstructorElement(ConstructorElement element) {
     if (instCreation) {
       ClassElement classElem = element.enclosingElement;
       if (classElem != null) {
@@ -217,14 +217,14 @@
   }
 
   @override
-  visitExtensionElement(ExtensionElement element) {
+  void visitExtensionElement(ExtensionElement element) {
     if (!instCreation) {
       addSuggestion(element);
     }
   }
 
   @override
-  visitFunctionElement(FunctionElement element) {
+  void visitFunctionElement(FunctionElement element) {
     if (!typesOnly) {
       int relevance = element.library == containingLibrary
           ? DART_RELEVANCE_LOCAL_FUNCTION
@@ -234,14 +234,14 @@
   }
 
   @override
-  visitFunctionTypeAliasElement(FunctionTypeAliasElement element) {
+  void visitFunctionTypeAliasElement(FunctionTypeAliasElement element) {
     if (!instCreation) {
       addSuggestion(element);
     }
   }
 
   @override
-  visitPropertyAccessorElement(PropertyAccessorElement element) {
+  void visitPropertyAccessorElement(PropertyAccessorElement element) {
     if (!typesOnly) {
       PropertyInducingElement variable = element.variable;
       int relevance = variable.library == containingLibrary
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index 930181e..81e642d 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -109,6 +109,10 @@
           mixins: mixins, superclassConstraints: superclassConstraints);
       return builder.suggestions.toList();
     }
+    if (type is FunctionType) {
+      return [_SuggestionBuilder._createFunctionCallSuggestion()];
+    }
+
     return const <CompletionSuggestion>[];
   }
 }
@@ -291,33 +295,11 @@
         }
       }
       if (targetType.isDartCoreFunction) {
-        _addFunctionCallSuggestion();
+        addCompletionSuggestion(_createFunctionCallSuggestion());
       }
     }
   }
 
-  void _addFunctionCallSuggestion() {
-    const callString = 'call()';
-    final element = protocol.Element(
-        protocol.ElementKind.METHOD, callString, protocol.Element.makeFlags(),
-        location: null,
-        typeParameters: null,
-        parameters: null,
-        returnType: 'void');
-    addCompletionSuggestion(CompletionSuggestion(
-      CompletionSuggestionKind.INVOCATION,
-      DART_RELEVANCE_HIGH,
-      callString,
-      callString.length,
-      0,
-      false,
-      false,
-      displayText: callString,
-      element: element,
-      returnType: 'void',
-    ));
-  }
-
   /**
    * Get a list of [InterfaceType]s that should be searched to find the
    * possible completions for an object having type [type].
@@ -355,4 +337,26 @@
     }
     return result;
   }
+
+  static CompletionSuggestion _createFunctionCallSuggestion() {
+    const callString = 'call()';
+    final element = protocol.Element(
+        protocol.ElementKind.METHOD, callString, protocol.Element.makeFlags(),
+        location: null,
+        typeParameters: null,
+        parameters: null,
+        returnType: 'void');
+    return CompletionSuggestion(
+      CompletionSuggestionKind.INVOCATION,
+      DART_RELEVANCE_HIGH,
+      callString,
+      callString.length,
+      0,
+      false,
+      false,
+      displayText: callString,
+      element: element,
+      returnType: 'void',
+    );
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
index 4d966a0..4d1e6da 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
@@ -42,23 +42,23 @@
   }
 }
 
-class _UriSuggestionBuilder extends SimpleAstVisitor {
+class _UriSuggestionBuilder extends SimpleAstVisitor<void> {
   final DartCompletionRequest request;
   final List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
 
   _UriSuggestionBuilder(this.request);
 
   @override
-  visitExportDirective(ExportDirective node) {
+  void visitExportDirective(ExportDirective node) {
     visitNamespaceDirective(node);
   }
 
   @override
-  visitImportDirective(ImportDirective node) {
+  void visitImportDirective(ImportDirective node) {
     visitNamespaceDirective(node);
   }
 
-  visitNamespaceDirective(NamespaceDirective node) {
+  void visitNamespaceDirective(NamespaceDirective node) {
     StringLiteral uri = node.uri;
     if (uri is SimpleStringLiteral) {
       int offset = request.offset;
@@ -99,7 +99,7 @@
   }
 
   @override
-  visitSimpleStringLiteral(SimpleStringLiteral node) {
+  void visitSimpleStringLiteral(SimpleStringLiteral node) {
     AstNode parent = node.parent;
     if (parent is NamespaceDirective && parent.uri == node) {
       String partialUri = _extractPartialUri(node);
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 25823b5..8c2f968 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -2703,10 +2703,12 @@
     var changeBuilder = _newDartChangeBuilder();
     await changeBuilder.addFileEdit(file, (builder) {
       if (variableList.type == null) {
-        builder.addReplacement(range.token(variableList.keyword), (builder) {
-          var type = variable.declaredElement.type;
-          builder.writeType(type);
-        });
+        final type = variable.declaredElement.type;
+        if (!type.isDynamic) {
+          builder.addReplacement(range.token(variableList.keyword), (builder) {
+            builder.writeType(type);
+          });
+        }
       }
 
       var indent = utils.getNodePrefix(statement);
@@ -3000,7 +3002,7 @@
     int listLoc = childArg.offset;
     String childArgSrc = getNodeText(childArg);
     if (!childArgSrc.contains(eol)) {
-      builder.addSimpleInsertion(listLoc, '<Widget>[');
+      builder.addSimpleInsertion(listLoc, '[');
       builder.addSimpleInsertion(listLoc + childArg.length, ']');
     } else {
       int newlineLoc = childArgSrc.lastIndexOf(eol);
@@ -3014,13 +3016,12 @@
           getText(namedExp.offset, childArg.offset - namedExp.offset);
       String prefix = separator.contains(eol) ? '' : '$eol$indentNew';
       if (prefix.isEmpty) {
-        builder.addSimpleInsertion(
-            namedExp.offset + 'child:'.length, ' <Widget>[');
+        builder.addSimpleInsertion(namedExp.offset + 'child:'.length, ' [');
         int argOffset = childArg.offset;
         builder
             .addDeletion(range.startOffsetEndOffset(argOffset - 2, argOffset));
       } else {
-        builder.addSimpleInsertion(listLoc, '<Widget>[');
+        builder.addSimpleInsertion(listLoc, '[');
       }
       String newChildArgSrc =
           _replaceSourceIndent(childArgSrc, indentOld, indentNew);
@@ -3160,13 +3161,13 @@
   }
 }
 
-class _SimpleIdentifierRecursiveAstVisitor extends RecursiveAstVisitor {
+class _SimpleIdentifierRecursiveAstVisitor extends RecursiveAstVisitor<void> {
   final _SimpleIdentifierVisitor visitor;
 
   _SimpleIdentifierRecursiveAstVisitor(this.visitor);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     visitor(node);
   }
 }
@@ -3175,13 +3176,13 @@
  * A visitor used to find all of the classes that define members referenced via
  * `super`.
  */
-class _SuperclassReferenceFinder extends RecursiveAstVisitor {
+class _SuperclassReferenceFinder extends RecursiveAstVisitor<void> {
   final List<ClassElement> referencedClasses = <ClassElement>[];
 
   _SuperclassReferenceFinder();
 
   @override
-  visitSuperExpression(SuperExpression node) {
+  void visitSuperExpression(SuperExpression node) {
     AstNode parent = node.parent;
     if (parent is BinaryExpression) {
       _addElement(parent.staticElement);
diff --git a/pkg/analysis_server/lib/src/services/correction/base_processor.dart b/pkg/analysis_server/lib/src/services/correction/base_processor.dart
index c8eb22c..bdf20ee 100644
--- a/pkg/analysis_server/lib/src/services/correction/base_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/base_processor.dart
@@ -1623,7 +1623,7 @@
 /// Copied from lib/src/services/correction/base_processor.dart, but [hasReturn]
 /// was added.
 // TODO(brianwilkerson) Decide whether to unify the two classes.
-class _ReturnTypeComputer extends RecursiveAstVisitor {
+class _ReturnTypeComputer extends RecursiveAstVisitor<void> {
   final TypeSystem typeSystem;
 
   DartType returnType;
@@ -1634,10 +1634,10 @@
   _ReturnTypeComputer(this.typeSystem);
 
   @override
-  visitBlockFunctionBody(BlockFunctionBody node) {}
+  void visitBlockFunctionBody(BlockFunctionBody node) {}
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     hasReturn = true;
     // prepare expression
     Expression expression = node.expression;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 597ba77..cba9fee 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -1489,9 +1489,6 @@
       var changeBuilder = _newDartChangeBuilder();
       await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
         builder.addSimpleReplacement(range.node(named.name), 'children:');
-        if (expression.typeArguments == null) {
-          builder.addSimpleInsertion(expression.offset, '<Widget>');
-        }
       });
       _addFixFromBuilder(changeBuilder, DartFixKind.CONVERT_FLUTTER_CHILD);
     }
@@ -3412,9 +3409,15 @@
   }
 
   Future<void> _addFix_removeEmptyCatch() async {
+    var catchClause = node.parent as CatchClause;
+    var tryStatement = catchClause.parent as TryStatement;
+    if (tryStatement.catchClauses.length == 1 &&
+        tryStatement.finallyBlock == null) {
+      return;
+    }
     var changeBuilder = _newDartChangeBuilder();
     await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
-      builder.addDeletion(utils.getLinesRange(range.node(node.parent)));
+      builder.addDeletion(utils.getLinesRange(range.node(catchClause)));
     });
     _addFixFromBuilder(changeBuilder, DartFixKind.REMOVE_EMPTY_CATCH);
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index fd6cd4f..4a4aa85 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -1503,11 +1503,11 @@
 /**
  * Visitor that collects defined [LocalElement]s.
  */
-class _LocalElementsCollector extends RecursiveAstVisitor {
+class _LocalElementsCollector extends RecursiveAstVisitor<void> {
   final elements = <LocalElement>[];
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     if (node.inDeclarationContext()) {
       Element element = node.staticElement;
       if (element is LocalElement) {
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index b3a757e..be5ac64 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -82,16 +82,10 @@
   return '$nodeKind:${element.accept(SignatureElementVisitor.instance)}';
 }
 
-class CodedBufferWriter {
-  CodedBufferWriter(var v);
-
-  toBuffer() {}
-}
-
 /// This visitor writes out Kythe facts and edges as specified by the Kythe
 /// Schema here https://kythe.io/docs/schema/.  This visitor handles all nodes,
 /// facts and edges.
-class KytheDartVisitor extends GeneralizingAstVisitor with OutputUtils {
+class KytheDartVisitor extends GeneralizingAstVisitor<void> with OutputUtils {
   @override
   final ResourceProvider resourceProvider;
   @override
@@ -117,7 +111,7 @@
   String get enclosingFilePath => _enclosingFilePath;
 
   @override
-  visitAnnotation(Annotation node) {
+  void visitAnnotation(Annotation node) {
     // TODO(jwren) To get the full set of cross refs correct, additional ref
     // edges are needed, example: from "A" in "A.namedConstructor()"
 
@@ -164,7 +158,7 @@
   }
 
   @override
-  visitAssignmentExpression(AssignmentExpression node) {
+  void visitAssignmentExpression(AssignmentExpression node) {
     //
     // operator
     // NOTE: usage node only written out if assignment is not the '=' operator,
@@ -188,7 +182,7 @@
   }
 
   @override
-  visitBinaryExpression(BinaryExpression node) {
+  void visitBinaryExpression(BinaryExpression node) {
     //
     // operators such as +, -, *, /
     //
@@ -209,7 +203,7 @@
   }
 
   @override
-  visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(ClassDeclaration node) {
     return _withEnclosingElement(node.declaredElement, () {
       // record/ class node
       addNodeAndFacts(schema.RECORD_KIND,
@@ -279,7 +273,7 @@
   }
 
   @override
-  visitClassTypeAlias(ClassTypeAlias node) {
+  void visitClassTypeAlias(ClassTypeAlias node) {
     return _withEnclosingElement(node.declaredElement, () {
       // record/ class node
       addNodeAndFacts(schema.RECORD_KIND,
@@ -344,7 +338,7 @@
   }
 
   @override
-  visitCompilationUnit(CompilationUnit node) {
+  void visitCompilationUnit(CompilationUnit node) {
     _enclosingFilePath = _getPath(resourceProvider, node.declaredElement);
     _enclosingUnitFeatureSet = node.featureSet;
     return _withEnclosingElement(node.declaredElement, () {
@@ -397,7 +391,7 @@
   }
 
   @override
-  visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
     return _withEnclosingElement(node.declaredElement, () {
       // function/ constructor node
       var constructorVName = addNodeAndFacts(schema.FUNCTION_KIND,
@@ -437,7 +431,7 @@
   }
 
   @override
-  visitDeclaredIdentifier(DeclaredIdentifier node) {
+  void visitDeclaredIdentifier(DeclaredIdentifier node) {
     _handleVariableDeclaration(node.declaredElement, node.identifier,
         subKind: schema.LOCAL_SUBKIND, type: node.declaredElement.type);
 
@@ -445,7 +439,7 @@
   }
 
   @override
-  visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     // constant node
     var constDeclVName =
         addNodeAndFacts(schema.CONSTANT_KIND, element: node.declaredElement);
@@ -464,7 +458,7 @@
   }
 
   @override
-  visitEnumDeclaration(EnumDeclaration node) {
+  void visitEnumDeclaration(EnumDeclaration node) {
     return _withEnclosingElement(node.declaredElement, () {
       // record/ enum node
       addNodeAndFacts(schema.RECORD_KIND,
@@ -495,7 +489,7 @@
   }
 
   @override
-  visitFieldFormalParameter(FieldFormalParameter node) {
+  void visitFieldFormalParameter(FieldFormalParameter node) {
     // identifier
     // Specified as Element, not var, so that the type can be changed in the
     // if-block.
@@ -518,7 +512,7 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     return _withEnclosingElement(node.declaredElement, () {
       // function node
       var functionVName = addNodeAndFacts(schema.FUNCTION_KIND,
@@ -554,13 +548,13 @@
   }
 
   @override
-  visitFunctionExpression(FunctionExpression node) {
+  void visitFunctionExpression(FunctionExpression node) {
     return _withEnclosingElement(
         node.declaredElement, () => super.visitFunctionExpression(node));
   }
 
   @override
-  visitFunctionTypeAlias(FunctionTypeAlias node) {
+  void visitFunctionTypeAlias(FunctionTypeAlias node) {
     //
     // return type
     //
@@ -587,7 +581,7 @@
   }
 
   @override
-  visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
+  void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     // TODO(jwren) Missing graph coverage on FunctionTypedFormalParameters
     // visit children
     _safelyVisit(node.documentationComment);
@@ -598,7 +592,7 @@
   }
 
   @override
-  visitImportDirective(ImportDirective node) {
+  void visitImportDirective(ImportDirective node) {
     // uri
     _handleUriReference(node.uri, node.uriElement);
 
@@ -620,7 +614,7 @@
   }
 
   @override
-  visitIndexExpression(IndexExpression node) {
+  void visitIndexExpression(IndexExpression node) {
     //
     // index method ref/call
     //
@@ -638,7 +632,7 @@
   }
 
   @override
-  visitInstanceCreationExpression(InstanceCreationExpression node) {
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
     //
     // constructorName
     //
@@ -671,7 +665,7 @@
   }
 
   @override
-  visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(MethodDeclaration node) {
     return _withEnclosingElement(node.declaredElement, () {
       // function node
       var methodVName = addNodeAndFacts(schema.FUNCTION_KIND,
@@ -725,7 +719,7 @@
   }
 
   @override
-  visitMethodInvocation(MethodInvocation node) {
+  void visitMethodInvocation(MethodInvocation node) {
     var element = node.methodName?.staticElement;
 
     // anchor- ref/call
@@ -738,7 +732,7 @@
   }
 
   @override
-  visitSimpleFormalParameter(SimpleFormalParameter node) {
+  void visitSimpleFormalParameter(SimpleFormalParameter node) {
     // parameter node
     var paramVName = addNodeAndFacts(schema.VARIABLE_KIND,
         element: node.declaredElement,
@@ -800,7 +794,7 @@
   }
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     // Most simple identifiers are "ref" edges.  In cases some cases, there may
     // be other ref/* edges.
 
@@ -827,17 +821,17 @@
   }
 
   @override
-  visitSuperExpression(SuperExpression node) {
+  void visitSuperExpression(SuperExpression node) {
     _handleThisOrSuper(node);
   }
 
   @override
-  visitThisExpression(ThisExpression node) {
+  void visitThisExpression(ThisExpression node) {
     _handleThisOrSuper(node);
   }
 
   @override
-  visitUriBasedDirective(UriBasedDirective node) {
+  void visitUriBasedDirective(UriBasedDirective node) {
     _handleUriReference(node.uri, node.uriElement);
 
     // visit children
@@ -845,7 +839,7 @@
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     var isLocal = _enclosingVName != _enclosingClassVName &&
         _enclosingVName != _enclosingFileVName;
 
@@ -893,7 +887,7 @@
     return null;
   }
 
-  _handleRefCallEdge(
+  void _handleRefCallEdge(
     Element element, {
     SyntacticEntity syntacticEntity,
     int start = _notFound,
@@ -1046,7 +1040,7 @@
     }
   }
 
-  _handleVariableDeclarationListAnnotations(
+  void _handleVariableDeclarationListAnnotations(
       VariableDeclarationList variableDeclarationList, KytheVName refVName) {
     assert(refVName != null);
     for (var varDecl in variableDeclarationList.variables) {
@@ -1075,7 +1069,7 @@
     }
   }
 
-  _withEnclosingElement(Element element, Function() f) {
+  void _withEnclosingElement(Element element, Function() f) {
     Element outerEnclosingElement = _enclosingElement;
     Element outerEnclosingClassElement = _enclosingClassElement;
     var outerEnclosingVName = _enclosingVName;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 17b436a..767eaa3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -587,13 +587,13 @@
   }
 }
 
-class _TokenLocalElementVisitor extends RecursiveAstVisitor {
+class _TokenLocalElementVisitor extends RecursiveAstVisitor<void> {
   final Map<Token, Element> map;
 
   _TokenLocalElementVisitor(this.map);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     Element element = node.staticElement;
     if (element is LocalVariableElement) {
       map[node.token] = element;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index c58b0a3..012cef0 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -140,7 +140,7 @@
   List<RefactoringMethodParameter> get parameters => _parameters;
 
   @override
-  void set parameters(List<RefactoringMethodParameter> parameters) {
+  set parameters(List<RefactoringMethodParameter> parameters) {
     _parameters = parameters.toList();
   }
 
@@ -1076,7 +1076,7 @@
   bool _isFirstSelectedNode(AstNode node) => identical(firstSelectedNode, node);
 }
 
-class _GetSourcePatternVisitor extends GeneralizingAstVisitor {
+class _GetSourcePatternVisitor extends GeneralizingAstVisitor<void> {
   final SourceRange partRange;
   final _SourcePattern pattern;
   final List<SourceEdit> replaceEdits;
@@ -1084,7 +1084,7 @@
   _GetSourcePatternVisitor(this.partRange, this.pattern, this.replaceEdits);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     SourceRange nodeRange = range.node(node);
     if (partRange.covers(nodeRange)) {
       Element element = _getLocalElement(node);
@@ -1119,16 +1119,16 @@
   }
 }
 
-class _HasAwaitVisitor extends GeneralizingAstVisitor {
+class _HasAwaitVisitor extends GeneralizingAstVisitor<void> {
   bool result = false;
 
   @override
-  visitAwaitExpression(AwaitExpression node) {
+  void visitAwaitExpression(AwaitExpression node) {
     result = true;
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     if (node.awaitKeyword != null) {
       result = true;
     }
@@ -1136,14 +1136,14 @@
   }
 }
 
-class _HasReturnStatementVisitor extends RecursiveAstVisitor {
+class _HasReturnStatementVisitor extends RecursiveAstVisitor<void> {
   bool hasReturn = false;
 
   @override
-  visitBlockFunctionBody(BlockFunctionBody node) {}
+  void visitBlockFunctionBody(BlockFunctionBody node) {}
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     hasReturn = true;
   }
 }
@@ -1318,7 +1318,7 @@
   }
 }
 
-class _IsUsedAfterSelectionVisitor extends GeneralizingAstVisitor {
+class _IsUsedAfterSelectionVisitor extends GeneralizingAstVisitor<void> {
   final ExtractMethodRefactoringImpl ref;
   final Element element;
   bool result = false;
@@ -1326,7 +1326,7 @@
   _IsUsedAfterSelectionVisitor(this.ref, this.element);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     Element nodeElement = node.staticElement;
     if (identical(nodeElement, element)) {
       int nodeOffset = node.offset;
@@ -1350,7 +1350,7 @@
   _Occurrence(this.range, this.isSelection);
 }
 
-class _ReturnTypeComputer extends RecursiveAstVisitor {
+class _ReturnTypeComputer extends RecursiveAstVisitor<void> {
   final TypeSystem typeSystem;
 
   DartType returnType;
@@ -1358,10 +1358,10 @@
   _ReturnTypeComputer(this.typeSystem);
 
   @override
-  visitBlockFunctionBody(BlockFunctionBody node) {}
+  void visitBlockFunctionBody(BlockFunctionBody node) {}
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     // prepare expression
     Expression expression = node.expression;
     if (expression == null) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index 3ace708..98f64e3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -660,14 +660,14 @@
   }
 }
 
-class _ReturnsValidatorVisitor extends RecursiveAstVisitor {
+class _ReturnsValidatorVisitor extends RecursiveAstVisitor<void> {
   final RefactoringStatus result;
   int _numReturns = 0;
 
   _ReturnsValidatorVisitor(this.result);
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     _numReturns++;
     if (_numReturns == 2) {
       result.addError('Ambiguous return value.', newLocation_fromNode(node));
@@ -765,7 +765,7 @@
 /**
  * A visitor that fills [_SourcePart] with fields, parameters and variables.
  */
-class _VariablesVisitor extends GeneralizingAstVisitor {
+class _VariablesVisitor extends GeneralizingAstVisitor<void> {
   /**
    * The [ExecutableElement] being inlined.
    */
@@ -786,7 +786,7 @@
   _VariablesVisitor(this.methodElement, this.bodyRange, this.result);
 
   @override
-  visitNode(AstNode node) {
+  void visitNode(AstNode node) {
     SourceRange nodeRange = range.node(node);
     if (!bodyRange.intersects(nodeRange)) {
       return null;
@@ -795,7 +795,7 @@
   }
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     SourceRange nodeRange = range.node(node);
     if (bodyRange.covers(nodeRange)) {
       _addMemberQualifier(node);
@@ -805,7 +805,7 @@
   }
 
   @override
-  visitThisExpression(ThisExpression node) {
+  void visitThisExpression(ThisExpression node) {
     int offset = node.offset;
     if (bodyRange.contains(offset)) {
       result.addExplicitThisOffset(offset);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index 1e016e3eb..ab909d8 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -87,7 +87,7 @@
    * variable. The expression used to initiate the refactoring will always be
    * replaced.
    */
-  void set extractAll(bool extractAll);
+  set extractAll(bool extractAll);
 
   /**
    * The lengths of the expressions that would be replaced by a reference to the
@@ -100,7 +100,7 @@
   /**
    * The name that the local variable should be given.
    */
-  void set name(String name);
+  set name(String name);
 
   /**
    * The proposed names for the local variable.
@@ -157,14 +157,14 @@
   /**
    * True if a getter should be created rather than a method.
    */
-  void set createGetter(bool createGetter);
+  set createGetter(bool createGetter);
 
   /**
    * True if all occurrences of the expression or statements should be replaced
    * by an invocation of the method. The expression or statements used to
    * initiate the refactoring will always be replaced.
    */
-  void set extractAll(bool extractAll);
+  set extractAll(bool extractAll);
 
   /**
    * The lengths of the expressions or statements that would be replaced by an
@@ -178,7 +178,7 @@
   /**
    * The name that the method should be given.
    */
-  void set name(String name);
+  set name(String name);
 
   /**
    * The proposed names for the method.
@@ -201,7 +201,7 @@
   /**
    * The parameters that should be defined for the method.
    */
-  void set parameters(List<RefactoringMethodParameter> parameters);
+  set parameters(List<RefactoringMethodParameter> parameters);
 
   /**
    * The proposed return type for the method.
@@ -211,7 +211,7 @@
   /**
    * The return type that should be defined for the method.
    */
-  void set returnType(String returnType);
+  set returnType(String returnType);
 
   /**
    * Validates that the [name] is a valid identifier and is appropriate for a
@@ -248,7 +248,7 @@
   /**
    * The name that the class should be given.
    */
-  void set name(String name);
+  set name(String name);
 
   /**
    * Validates that the [name] is a valid identifier and is appropriate for a
@@ -313,13 +313,13 @@
    * True if the method being inlined should be removed.
    * It is an error if this field is `true` and [inlineAll] is `false`.
    */
-  void set deleteSource(bool deleteSource);
+  set deleteSource(bool deleteSource);
 
   /**
    * True if all invocations of the method should be inlined, or false if only
    * the invocation site used to create this refactoring should be inlined.
    */
-  void set inlineAll(bool inlineAll);
+  set inlineAll(bool inlineAll);
 
   /**
    * True if the declaration of the method is selected.
@@ -352,7 +352,7 @@
   /**
    * The new file path to which the given file is being moved.
    */
-  void set newFile(String newName);
+  set newFile(String newName);
 }
 
 /**
@@ -436,14 +436,6 @@
   }
 }
 
-class RenameRefactoringElement {
-  final Element element;
-  final int offset;
-  final int length;
-
-  RenameRefactoringElement(this.element, this.offset, this.length);
-}
-
 /**
  * Abstract [Refactoring] for renaming some [Element].
  */
@@ -489,6 +481,33 @@
     return null;
   }
 
+  /**
+   * Returns the human-readable description of the kind of element being renamed
+   * (such as “class” or “function type alias”).
+   */
+  String get elementKindName;
+
+  /**
+   * Sets the new name for the [Element].
+   */
+  set newName(String newName);
+
+  /**
+   * Returns the old name of the [Element] being renamed.
+   */
+  String get oldName;
+
+  /**
+   * Validates that the [newName] is a valid identifier and is appropriate for
+   * the type of the [Element] being renamed.
+   *
+   * It does not perform all the checks (such as checking for conflicts with any
+   * existing names in any of the scopes containing the current name), as many
+   * of these checks require search engine. Use [checkFinalConditions] for this
+   * level of checking.
+   */
+  RefactoringStatus checkNewName();
+
   /// Given a node/element, finds the best element to rename (for example
   /// the class when on the `new` keyword).
   static RenameRefactoringElement getElementToRename(
@@ -523,31 +542,12 @@
 
     return RenameRefactoringElement(element, offset, length);
   }
+}
 
-  /**
-   * Returns the human-readable description of the kind of element being renamed
-   * (such as “class” or “function type alias”).
-   */
-  String get elementKindName;
+class RenameRefactoringElement {
+  final Element element;
+  final int offset;
+  final int length;
 
-  /**
-   * Sets the new name for the [Element].
-   */
-  void set newName(String newName);
-
-  /**
-   * Returns the old name of the [Element] being renamed.
-   */
-  String get oldName;
-
-  /**
-   * Validates that the [newName] is a valid identifier and is appropriate for
-   * the type of the [Element] being renamed.
-   *
-   * It does not perform all the checks (such as checking for conflicts with any
-   * existing names in any of the scopes containing the current name), as many
-   * of these checks require search engine. Use [checkFinalConditions] for this
-   * level of checking.
-   */
-  RefactoringStatus checkNewName();
+  RenameRefactoringElement(this.element, this.offset, this.length);
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index 2ccb2d1..405acd4 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -356,7 +356,7 @@
   _LocalElementsCollector(this.name);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     Element element = node.staticElement;
     if (element is LocalElement && element.name == name) {
       elements.add(element);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
index 93a587d..ffa3029 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
@@ -212,7 +212,7 @@
   _LocalElementsCollector(this.name);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     Element element = node.staticElement;
     if (element is LocalElement && element.name == name) {
       elements.add(element);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
index 2646ae3..e11f8cc 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -107,7 +107,7 @@
   }
 }
 
-class _ConflictValidatorVisitor extends RecursiveAstVisitor {
+class _ConflictValidatorVisitor extends RecursiveAstVisitor<void> {
   final RefactoringStatus result;
   final String newName;
   final LocalElement target;
@@ -122,7 +122,7 @@
   );
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     Element nodeElement = node.staticElement;
     if (nodeElement != null && nodeElement.name == newName) {
       // Duplicate declaration.
diff --git a/pkg/analysis_server/lib/src/services/search/element_visitors.dart b/pkg/analysis_server/lib/src/services/search/element_visitors.dart
index fdb3beb..668bd2d 100644
--- a/pkg/analysis_server/lib/src/services/search/element_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/search/element_visitors.dart
@@ -52,13 +52,13 @@
 /**
  * A visitor that finds the deep-most [Element] that contains the [nameOffset].
  */
-class _ElementByNameOffsetVisitor extends GeneralizingElementVisitor {
+class _ElementByNameOffsetVisitor extends GeneralizingElementVisitor<void> {
   final int nameOffset;
 
   _ElementByNameOffsetVisitor(this.nameOffset);
 
   @override
-  visitElement(Element element) {
+  void visitElement(Element element) {
     if (element.nameOffset != -1 &&
         !element.isSynthetic &&
         element.nameOffset == nameOffset) {
@@ -71,7 +71,7 @@
 /**
  * A [GeneralizingElementVisitor] adapter for [ElementProcessor].
  */
-class _ElementVisitorAdapter extends GeneralizingElementVisitor {
+class _ElementVisitorAdapter extends GeneralizingElementVisitor<void> {
   final BoolElementProcessor processor;
 
   _ElementVisitorAdapter(this.processor);
@@ -88,7 +88,7 @@
 /**
  * A [GeneralizingElementVisitor] for visiting top-level elements.
  */
-class _TopLevelElementsVisitor extends GeneralizingElementVisitor {
+class _TopLevelElementsVisitor extends GeneralizingElementVisitor<void> {
   final VoidElementProcessor processor;
 
   _TopLevelElementsVisitor(this.processor);
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index bbac385..fd77f0e 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -116,7 +116,7 @@
     int listLoc = childArg.offset;
     String childArgSrc = getNodeText(childArg);
     if (!childArgSrc.contains(eol)) {
-      _addInsertEdit(listLoc, '<Widget>[');
+      _addInsertEdit(listLoc, '[');
       _addInsertEdit(listLoc + childArg.length, ']');
     } else {
       int newlineLoc = childArgSrc.lastIndexOf(eol);
@@ -130,10 +130,10 @@
           getText(namedExp.offset, childArg.offset - namedExp.offset);
       String prefix = separator.contains(eol) ? '' : '$eol$indentNew';
       if (prefix.isEmpty) {
-        _addInsertEdit(namedExp.offset + 'child:'.length, ' <Widget>[');
+        _addInsertEdit(namedExp.offset + 'child:'.length, ' [');
         _addRemoveEdit(SourceRange(childArg.offset - 2, 2));
       } else {
-        _addInsertEdit(listLoc, '<Widget>[');
+        _addInsertEdit(listLoc, '[');
       }
       String newChildArgSrc = childArgSrc.replaceAll(
           RegExp('^$indentOld', multiLine: true), '$indentNew');
@@ -157,7 +157,7 @@
     int listLoc = childArg.offset;
     String childArgSrc = getNodeText(childArg);
     if (!childArgSrc.contains(eol)) {
-      builder.addSimpleInsertion(listLoc, '<Widget>[');
+      builder.addSimpleInsertion(listLoc, '[');
       builder.addSimpleInsertion(listLoc + childArg.length, ']');
     } else {
       int newlineLoc = childArgSrc.lastIndexOf(eol);
@@ -171,11 +171,10 @@
           getText(namedExp.offset, childArg.offset - namedExp.offset);
       String prefix = separator.contains(eol) ? '' : '$eol$indentNew';
       if (prefix.isEmpty) {
-        builder.addSimpleInsertion(
-            namedExp.offset + 'child:'.length, ' <Widget>[');
+        builder.addSimpleInsertion(namedExp.offset + 'child:'.length, ' [');
         builder.addDeletion(SourceRange(childArg.offset - 2, 2));
       } else {
-        builder.addSimpleInsertion(listLoc, '<Widget>[');
+        builder.addSimpleInsertion(listLoc, '[');
       }
       String newChildArgSrc = childArgSrc.replaceAll(
           RegExp('^$indentOld', multiLine: true), '$indentNew');
diff --git a/pkg/analysis_server/lib/starter.dart b/pkg/analysis_server/lib/starter.dart
index f6c8dd0..b4dd93b 100644
--- a/pkg/analysis_server/lib/starter.dart
+++ b/pkg/analysis_server/lib/starter.dart
@@ -22,12 +22,12 @@
    * An optional manager to handle file systems which may not always be
    * available.
    */
-  void set detachableFileSystemManager(DetachableFileSystemManager manager);
+  set detachableFileSystemManager(DetachableFileSystemManager manager);
 
   /**
    * Set the instrumentation [service] that is to be used by the analysis server.
    */
-  void set instrumentationService(InstrumentationService service);
+  set instrumentationService(InstrumentationService service);
 
   /**
    * Use the given command-line [arguments] to start this server.
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 31b2358..c36ecd8 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -2,7 +2,7 @@
 publish_to: none
 
 environment:
-  sdk: '>=2.2.2 <3.0.0'
+  sdk: '>=2.6.0 <3.0.0'
 
 dependencies:
   analyzer: any
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 4b10bed..8b08981 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -217,11 +217,12 @@
  * Wraps the given [_ElementVisitorFunction] into an instance of
  * [engine.GeneralizingElementVisitor].
  */
-class _ElementVisitorFunctionWrapper extends GeneralizingElementVisitor {
+class _ElementVisitorFunctionWrapper extends GeneralizingElementVisitor<void> {
   final _ElementVisitorFunction function;
   _ElementVisitorFunctionWrapper(this.function);
+
   @override
-  visitElement(Element element) {
+  void visitElement(Element element) {
     function(element);
     super.visitElement(element);
   }
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index df6ef6c..28ea93d 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -10,11 +10,11 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/ast/element_locator.dart';
-import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:test/test.dart';
 
 import 'abstract_context.dart';
@@ -144,7 +144,7 @@
   _ElementsByNameFinder(this.name);
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     if (node.name == name && node.inDeclarationContext()) {
       elements.add(node.staticElement);
     }
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index a319a18..afe13b2 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -14,7 +14,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
   });
@@ -33,7 +33,7 @@
     createProject();
   }
 
-  test_afterAnalysisComplete() async {
+  Future<void> test_afterAnalysisComplete() async {
     addTestFile('''
 main() {
   print(42)
@@ -44,7 +44,7 @@
     expect(errors, hasLength(1));
   }
 
-  test_errorInPart() async {
+  Future<void> test_errorInPart() async {
     String libPath = join(testFolder, 'main.dart');
     String partPath = join(testFolder, 'main_part.dart');
     newFile(libPath, content: r'''
@@ -68,7 +68,7 @@
   }
 
   @failingTest
-  test_fileWithoutContext() {
+  Future<void> test_fileWithoutContext() async {
     // Broken under the new driver.
     String file = convertPath('/outside.dart');
     newFile(file, content: '''
@@ -76,10 +76,10 @@
   print(42);
 }
 ''');
-    return _checkInvalid(file);
+    await _checkInvalid(file);
   }
 
-  test_hasErrors() async {
+  Future<void> test_hasErrors() async {
     addTestFile('''
 main() {
   print(42)
@@ -96,7 +96,7 @@
     }
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = _createGetErrorsRequest('test.dart');
     var response = await waitResponse(request);
     expect(
@@ -105,7 +105,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = _createGetErrorsRequest(convertPath('/foo/../bar/test.dart'));
     var response = await waitResponse(request);
     expect(
@@ -114,7 +114,7 @@
     );
   }
 
-  test_noErrors() async {
+  Future<void> test_noErrors() async {
     addTestFile('''
 main() {
   print(42);
@@ -124,7 +124,7 @@
     expect(errors, isEmpty);
   }
 
-  Future _checkInvalid(String file) async {
+  Future<void> _checkInvalid(String file) async {
     Request request = _createGetErrorsRequest(file);
     Response response = await serverChannel.sendRequest(request);
     expect(response.error, isNotNull);
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index b5319f5..619e0eb 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -12,7 +12,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHoverTest);
   });
@@ -40,7 +40,7 @@
     createProject();
   }
 
-  test_class_declaration() async {
+  Future<void> test_class_declaration() async {
     addTestFile('''
 class A<E> {}
 class I1<K, V> {}
@@ -58,7 +58,7 @@
     expect(hover.propagatedType, isNull);
   }
 
-  test_class_declaration_abstract() async {
+  Future<void> test_class_declaration_abstract() async {
     addTestFile('''
 class A {}
 abstract class B extends A {}
@@ -69,7 +69,7 @@
     expect(hover.propagatedType, isNull);
   }
 
-  test_constructor_named() async {
+  Future<void> test_constructor_named() async {
     addTestFile('''
 library my.library;
 class A {
@@ -100,7 +100,7 @@
     }
   }
 
-  test_constructor_noKeyword_const() async {
+  Future<void> test_constructor_noKeyword_const() async {
     addTestFile('''
 library my.library;
 class A {
@@ -127,7 +127,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_constructor_noKeyword_new() async {
+  Future<void> test_constructor_noKeyword_new() async {
     addTestFile('''
 library my.library;
 class A {}
@@ -152,7 +152,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_constructor_synthetic() async {
+  Future<void> test_constructor_synthetic() async {
     addTestFile('''
 library my.library;
 class A {
@@ -178,7 +178,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_constructor_synthetic_withTypeArgument() async {
+  Future<void> test_constructor_synthetic_withTypeArgument() async {
     addTestFile('''
 library my.library;
 class A<T> {}
@@ -220,7 +220,7 @@
     }
   }
 
-  test_dartdoc_block() async {
+  Future<void> test_dartdoc_block() async {
     addTestFile('''
 /**
  * doc aaa
@@ -233,7 +233,7 @@
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
   }
 
-  test_dartdoc_inherited_fromInterface() async {
+  Future<void> test_dartdoc_inherited_fromInterface() async {
     addTestFile('''
 class A {
   /// my doc
@@ -248,7 +248,7 @@
     expect(hover.dartdoc, '''my doc\n\nCopied from `A`.''');
   }
 
-  test_dartdoc_inherited_fromSuper_direct() async {
+  Future<void> test_dartdoc_inherited_fromSuper_direct() async {
     addTestFile('''
 class A {
   /// my doc
@@ -263,7 +263,7 @@
     expect(hover.dartdoc, '''my doc\n\nCopied from `A`.''');
   }
 
-  test_dartdoc_inherited_fromSuper_indirect() async {
+  Future<void> test_dartdoc_inherited_fromSuper_indirect() async {
     addTestFile('''
 class A {
   /// my doc
@@ -279,7 +279,7 @@
     expect(hover.dartdoc, '''my doc\n\nCopied from `A`.''');
   }
 
-  test_dartdoc_inherited_preferSuper() async {
+  Future<void> test_dartdoc_inherited_preferSuper() async {
     addTestFile('''
 class A {
   /// my doc
@@ -298,7 +298,7 @@
     expect(hover.dartdoc, '''my doc\n\nCopied from `A`.''');
   }
 
-  test_dartdoc_line() async {
+  Future<void> test_dartdoc_line() async {
     addTestFile('''
 /// doc aaa
 /// doc bbb
@@ -309,7 +309,7 @@
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
   }
 
-  test_enum_declaration() async {
+  Future<void> test_enum_declaration() async {
     addTestFile('''
 enum MyEnum {AAA, BBB, CCC}
 ''');
@@ -319,7 +319,7 @@
     expect(hover.propagatedType, isNull);
   }
 
-  test_extensionDeclaration() async {
+  Future<void> test_extensionDeclaration() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 class A {}
@@ -333,7 +333,7 @@
     expect(hover.propagatedType, isNull);
   }
 
-  test_function_topLevel_declaration() async {
+  Future<void> test_function_topLevel_declaration() async {
     addTestFile('''
 library my.library;
 /// doc aaa
@@ -356,7 +356,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_getter_synthetic() async {
+  Future<void> test_getter_synthetic() async {
     addTestFile('''
 library my.library;
 class A {
@@ -381,7 +381,7 @@
     expect(hover.propagatedType, isNull);
   }
 
-  test_integerLiteral() async {
+  Future<void> test_integerLiteral() async {
     addTestFile('''
 main() {
   foo(123);
@@ -406,7 +406,7 @@
     expect(hover.parameter, 'Object myParameter');
   }
 
-  test_integerLiteral_promoted() async {
+  Future<void> test_integerLiteral_promoted() async {
     addTestFile('''
 main() {
   foo(123);
@@ -431,7 +431,7 @@
     expect(hover.parameter, 'double myParameter');
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = AnalysisGetHoverParams('test.dart', 0).toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -440,7 +440,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         AnalysisGetHoverParams(convertPath('/foo/../bar/test.dart'), 0)
             .toRequest('0');
@@ -451,7 +451,7 @@
     );
   }
 
-  test_localVariable_declaration() async {
+  Future<void> test_localVariable_declaration() async {
     addTestFile('''
 library my.library;
 class A {
@@ -475,7 +475,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_localVariable_reference_withPropagatedType() async {
+  Future<void> test_localVariable_reference_withPropagatedType() async {
     addTestFile('''
 library my.library;
 main() {
@@ -496,7 +496,7 @@
     expect(hover.propagatedType, null);
   }
 
-  test_method_declaration() async {
+  Future<void> test_method_declaration() async {
     addTestFile('''
 library my.library;
 class A {
@@ -521,7 +521,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_method_reference() async {
+  Future<void> test_method_reference() async {
     addTestFile('''
 library my.library;
 class A {
@@ -549,7 +549,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_method_reference_deprecated() async {
+  Future<void> test_method_reference_deprecated() async {
     addTestFile('''
 class A {
   @deprecated
@@ -567,7 +567,7 @@
     expect(hover.isDeprecated, isTrue);
   }
 
-  test_method_reference_genericMethod() async {
+  Future<void> test_method_reference_genericMethod() async {
     addTestFile('''
 library my.library;
 
@@ -599,7 +599,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_mixin_declaration() async {
+  Future<void> test_mixin_declaration() async {
     addTestFile('''
 mixin A on B, C implements D, E {}
 class B {}
@@ -614,7 +614,7 @@
   }
 
   @failingTest
-  test_mixin_reference() async {
+  Future<void> test_mixin_reference() async {
     addTestFile('''
 mixin A {}
 abstract class B {}
@@ -626,7 +626,7 @@
     expect(hover.propagatedType, isNull);
   }
 
-  test_noHoverInfo() async {
+  Future<void> test_noHoverInfo() async {
     addTestFile('''
 library my.library;
 main() {
@@ -637,7 +637,7 @@
     expect(hover, isNull);
   }
 
-  test_nonNullable() async {
+  Future<void> test_nonNullable() async {
     createAnalysisOptionsFile(experiments: ['non-nullable']);
     addTestFile('''
 int? f(double? a) => null;
@@ -651,7 +651,7 @@
     expect(hover.staticType, 'int? Function(double?)');
   }
 
-  test_parameter_declaration_fieldFormal() async {
+  Future<void> test_parameter_declaration_fieldFormal() async {
     addTestFile('''
 class A {
   /// The field documentation.
@@ -672,7 +672,7 @@
     expect(hover.staticType, 'int');
   }
 
-  test_parameter_declaration_required() async {
+  Future<void> test_parameter_declaration_required() async {
     addTestFile('''
 library my.library;
 class A {
@@ -696,7 +696,7 @@
     expect(hover.parameter, isNull);
   }
 
-  test_parameter_reference_fieldFormal() async {
+  Future<void> test_parameter_reference_fieldFormal() async {
     addTestFile('''
 class A {
   /// The field documentation.
diff --git a/pkg/analysis_server/test/analysis/get_navigation_test.dart b/pkg/analysis_server/test/analysis/get_navigation_test.dart
index 186b5cf..4454b8a 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -12,7 +12,7 @@
 import '../mocks.dart';
 import 'notification_navigation_test.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetNavigationTest);
   });
@@ -32,7 +32,7 @@
     createProject();
   }
 
-  test_beforeAnalysisComplete() async {
+  Future<void> test_beforeAnalysisComplete() async {
     addTestFile('''
 main() {
   var test = 0;
@@ -44,7 +44,7 @@
     assertHasTarget('test = 0');
   }
 
-  test_fieldType() async {
+  Future<void> test_fieldType() async {
     // This test mirrors test_navigation() from
     // test/integration/analysis/get_navigation_test.dart
     String text = r'''
@@ -65,7 +65,7 @@
     expect(target.startColumn, 7);
   }
 
-  test_fileDoesNotExist() async {
+  Future<void> test_fileDoesNotExist() async {
     String file = convertPath('$projectPath/doesNotExist.dart');
     Request request = _createGetNavigationRequest(file, 0, 100);
     Response response = await serverChannel.sendRequest(request);
@@ -75,7 +75,7 @@
     expect(response.result['regions'], isEmpty);
   }
 
-  test_fileOutsideOfRoot() async {
+  Future<void> test_fileOutsideOfRoot() async {
     testFile = convertPath('/outside.dart');
     addTestFile('''
 main() {
@@ -88,7 +88,7 @@
     assertHasTarget('test = 0');
   }
 
-  test_importDirective() async {
+  Future<void> test_importDirective() async {
     addTestFile('''
 import 'dart:math';
 
@@ -102,7 +102,7 @@
     expect(testTargets[0].kind, ElementKind.LIBRARY);
   }
 
-  test_importKeyword() async {
+  Future<void> test_importKeyword() async {
     addTestFile('''
 import 'dart:math';
 
@@ -116,7 +116,7 @@
     expect(testTargets[0].kind, ElementKind.LIBRARY);
   }
 
-  test_importUri() async {
+  Future<void> test_importUri() async {
     addTestFile('''
 import 'dart:math';
 
@@ -130,7 +130,7 @@
     expect(testTargets[0].kind, ElementKind.LIBRARY);
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = _createGetNavigationRequest('test.dart', 0, 0);
     var response = await waitResponse(request);
     expect(
@@ -139,7 +139,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         _createGetNavigationRequest(convertPath('/foo/../bar/test.dart'), 0, 0);
     var response = await waitResponse(request);
@@ -149,7 +149,7 @@
     );
   }
 
-  test_multipleRegions() async {
+  Future<void> test_multipleRegions() async {
     addTestFile('''
 main() {
   var aaa = 1;
@@ -179,7 +179,7 @@
     assertNoRegionAt('ddd)');
   }
 
-  test_operator_index() async {
+  Future<void> test_operator_index() async {
     addTestFile('''
 class A {
   A operator [](index) => null;
@@ -225,7 +225,7 @@
     }
   }
 
-  test_zeroLength_end() async {
+  Future<void> test_zeroLength_end() async {
     addTestFile('''
 main() {
   var test = 0;
@@ -238,7 +238,7 @@
     assertHasTarget('test = 0');
   }
 
-  test_zeroLength_start() async {
+  Future<void> test_zeroLength_start() async {
     addTestFile('''
 main() {
   var test = 0;
@@ -256,7 +256,7 @@
         .toRequest(requestId);
   }
 
-  _getNavigation(String file, int offset, int length) async {
+  Future<void> _getNavigation(String file, int offset, int length) async {
     Request request = _createGetNavigationRequest(file, offset, length);
     Response response = await serverChannel.sendRequest(request);
     AnalysisGetNavigationResult result =
diff --git a/pkg/analysis_server/test/analysis/get_signature_test.dart b/pkg/analysis_server/test/analysis/get_signature_test.dart
index b990b53..c8b33f2 100644
--- a/pkg/analysis_server/test/analysis/get_signature_test.dart
+++ b/pkg/analysis_server/test/analysis/get_signature_test.dart
@@ -13,7 +13,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisSignatureTest);
   });
@@ -50,7 +50,7 @@
     createProject();
   }
 
-  test_constructor() async {
+  Future<void> test_constructor() async {
     addTestFile('''
 /// MyClass doc
 class MyClass {
@@ -71,7 +71,7 @@
         equals(ParameterInfo(ParameterKind.NAMED, 'length', 'int')));
   }
 
-  test_constructor_factory() async {
+  Future<void> test_constructor_factory() async {
     addTestFile('''
 /// MyClass doc
 class MyClass {
@@ -96,7 +96,7 @@
         equals(ParameterInfo(ParameterKind.NAMED, 'length', 'int')));
   }
 
-  test_constructor_named() async {
+  Future<void> test_constructor_named() async {
     addTestFile('''
 /// MyClass doc
 class MyClass {
@@ -117,7 +117,7 @@
         equals(ParameterInfo(ParameterKind.NAMED, 'length', 'int')));
   }
 
-  test_does_not_walk_up_over_closure() async {
+  Future<void> test_does_not_walk_up_over_closure() async {
     addTestFile('''
 one(String name, int length) {}
 main() {
@@ -132,7 +132,7 @@
         equals(RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION));
   }
 
-  test_error_file_not_analyzed() async {
+  Future<void> test_error_file_not_analyzed() async {
     var result = await prepareRawSignatureAt(0,
         file: convertPath('/not/in/project.dart'));
     expect(result.error, isNotNull);
@@ -140,7 +140,7 @@
         result.error.code, equals(RequestErrorCode.GET_SIGNATURE_INVALID_FILE));
   }
 
-  test_error_function_unknown() async {
+  Future<void> test_error_function_unknown() async {
     addTestFile('''
 someFunc(/*^*/);
 ''');
@@ -150,7 +150,7 @@
         equals(RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION));
   }
 
-  test_error_offset_invalid() async {
+  Future<void> test_error_offset_invalid() async {
     addTestFile('''
 a() {}
 ''');
@@ -160,7 +160,7 @@
         equals(RequestErrorCode.GET_SIGNATURE_INVALID_OFFSET));
   }
 
-  test_function_expression() async {
+  Future<void> test_function_expression() async {
     addTestFile('''
 /// f doc
 int Function(String) f(String s) => (int i) => int.parse(s) + i;
@@ -176,7 +176,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 's', 'String')));
   }
 
-  test_function_from_other_file() async {
+  Future<void> test_function_from_other_file() async {
     newFile('/project/bin/other.dart', content: '''
 /// one doc
 one(String name, int length) {}
@@ -200,7 +200,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 'length', 'int')));
   }
 
-  test_function_irrelevant_parens() async {
+  Future<void> test_function_irrelevant_parens() async {
     addTestFile('''
 /// one doc
 one(String name, int length) {}
@@ -218,7 +218,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 'length', 'int')));
   }
 
-  test_function_named() async {
+  Future<void> test_function_named() async {
     addTestFile('''
 /// one doc
 one(String name, {int length}) {}
@@ -236,7 +236,7 @@
         equals(ParameterInfo(ParameterKind.NAMED, 'length', 'int')));
   }
 
-  test_function_named_with_default_int() async {
+  Future<void> test_function_named_with_default_int() async {
     addTestFile('''
 /// one doc
 one(String name, {int length = 1}) {}
@@ -256,7 +256,7 @@
             defaultValue: '1')));
   }
 
-  test_function_named_with_default_string() async {
+  Future<void> test_function_named_with_default_string() async {
     addTestFile('''
 /// one doc
 one(String name, {String email = "a@b.c"}) {}
@@ -276,7 +276,7 @@
             defaultValue: '"a@b.c"')));
   }
 
-  test_function_nested_call_inner() async {
+  Future<void> test_function_nested_call_inner() async {
     // eg. foo(bar(1, 2));
     addTestFile('''
 /// one doc
@@ -295,7 +295,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 'two', 'String')));
   }
 
-  test_function_nested_call_outer() async {
+  Future<void> test_function_nested_call_outer() async {
     // eg. foo(bar(1, 2));
     addTestFile('''
 /// one doc
@@ -314,7 +314,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 'one', 'String')));
   }
 
-  test_function_no_dart_doc() async {
+  Future<void> test_function_no_dart_doc() async {
     addTestFile('''
 one(String name, int length) {}
 main() {
@@ -331,7 +331,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 'length', 'int')));
   }
 
-  test_function_optional() async {
+  Future<void> test_function_optional() async {
     addTestFile('''
 /// one doc
 one(String name, [int length]) {}
@@ -349,7 +349,7 @@
         equals(ParameterInfo(ParameterKind.OPTIONAL, 'length', 'int')));
   }
 
-  test_function_optional_with_default() async {
+  Future<void> test_function_optional_with_default() async {
     addTestFile('''
 /// one doc
 one(String name, [int length = 11]) {}
@@ -369,7 +369,7 @@
             defaultValue: '11')));
   }
 
-  test_function_required() async {
+  Future<void> test_function_required() async {
     addTestFile('''
 /// one doc
 one(String name, int length) {}
@@ -387,7 +387,7 @@
         equals(ParameterInfo(ParameterKind.REQUIRED, 'length', 'int')));
   }
 
-  test_function_zero_arguments() async {
+  Future<void> test_function_zero_arguments() async {
     addTestFile('''
 /// one doc
 one() {}
@@ -401,7 +401,7 @@
     expect(result.parameters, hasLength(0));
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = AnalysisGetSignatureParams('test.dart', 0).toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -410,7 +410,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         AnalysisGetSignatureParams(convertPath('/foo/../bar/test.dart'), 0)
             .toRequest('0');
@@ -421,7 +421,7 @@
     );
   }
 
-  test_method_instance() async {
+  Future<void> test_method_instance() async {
     addTestFile('''
 /// MyClass doc
 class MyClass {
@@ -445,7 +445,7 @@
         equals(ParameterInfo(ParameterKind.NAMED, 'length', 'int')));
   }
 
-  test_method_static() async {
+  Future<void> test_method_static() async {
     addTestFile('''
 /// MyClass doc
 class MyClass {
diff --git a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
index cd24ef5..194e306 100644
--- a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
@@ -15,7 +15,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NewAnalysisOptionsFileNotificationTest);
     defineReflectiveTests(OldAnalysisOptionsFileNotificationTest);
@@ -74,7 +74,7 @@
     super.tearDown();
   }
 
-  test_error_filter() async {
+  Future<void> test_error_filter() async {
     addOptionsFile('''
 analyzer:
   errors:
@@ -101,7 +101,7 @@
     expect(testFileErrors, isEmpty);
   }
 
-  test_error_filter_removed() async {
+  Future<void> test_error_filter_removed() async {
     addOptionsFile('''
 analyzer:
   errors:
@@ -144,7 +144,7 @@
     expect(testFileErrors, hasLength(1));
   }
 
-  test_lint_options_changes() async {
+  Future<void> test_lint_options_changes() async {
     addOptionsFile('''
 linter:
   rules:
@@ -171,7 +171,7 @@
     verifyLintsEnabled(['camel_case_types']);
   }
 
-  test_lint_options_unsupported() async {
+  Future<void> test_lint_options_unsupported() async {
     addOptionsFile('''
 linter:
   rules:
@@ -189,7 +189,7 @@
 //    expect(optionsFileErrors.first.type, AnalysisErrorType.STATIC_WARNING);
   }
 
-  test_options_file_added() async {
+  Future<void> test_options_file_added() async {
     addTestFile(testSource);
     setAnalysisRoot();
 
@@ -214,7 +214,7 @@
     verifyLintsEnabled(['camel_case_types']);
   }
 
-  test_options_file_parse_error() async {
+  Future<void> test_options_file_parse_error() async {
     addOptionsFile('''
 ; #bang
 ''');
@@ -228,7 +228,7 @@
 //    expect(optionsFileErrors.first.type, AnalysisErrorType.COMPILE_TIME_ERROR);
   }
 
-  test_options_file_removed() async {
+  Future<void> test_options_file_removed() async {
     addOptionsFile('''
 linter:
   rules:
diff --git a/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart b/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
index 7d27ab9..f8427e9 100644
--- a/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationAnalyzedFilesTest);
   });
@@ -56,7 +56,7 @@
     createProject();
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('''
 class A {}
 ''');
@@ -65,7 +65,7 @@
     assertHasFile(testFile);
   }
 
-  test_beforeAnalysis() async {
+  Future<void> test_beforeAnalysis() async {
     addTestFile('''
 class A {}
 ''');
@@ -73,7 +73,7 @@
     assertHasFile(testFile);
   }
 
-  test_beforeAnalysis_excludeYamlFiles() async {
+  Future<void> test_beforeAnalysis_excludeYamlFiles() async {
     File yamlFile = getFolder(projectPath).getChildAssumingFile('sample.yaml');
     yamlFile.writeAsStringSync('');
     addTestFile('''
@@ -84,7 +84,7 @@
     assertHasNoFile(yamlFile.path);
   }
 
-  test_insignificant_change() async {
+  Future<void> test_insignificant_change() async {
     // Making a change that doesn't affect the set of reachable files should
     // not trigger the notification to be re-sent.
     addTestFile('class A {}');
@@ -97,7 +97,7 @@
     expect(analyzedFilesReceived, isFalse);
   }
 
-  test_resubscribe_no_changes() async {
+  Future<void> test_resubscribe_no_changes() async {
     // Unsubscribing and resubscribing should cause the notification to be
     // re-sent, even if nothing has changed.
     addTestFile('class A {}');
@@ -112,7 +112,7 @@
     assertHasFile(testFile);
   }
 
-  test_significant_change() async {
+  Future<void> test_significant_change() async {
     // Making a change that *does* affect the set of reachable files should
     // trigger the notification to be re-sent.
     addTestFile('class A {}');
diff --git a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
index f234b5b..e3873d3 100644
--- a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
@@ -12,7 +12,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationClosingLabelsTest);
   });
@@ -64,7 +64,7 @@
     addAnalysisSubscription(AnalysisService.CLOSING_LABELS, testFile);
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile(sampleCode);
     await waitForTasksFinished();
     expect(lastLabels, isNull);
@@ -74,7 +74,7 @@
     expect(lastLabels, expectedResults);
   }
 
-  test_afterUpdate() async {
+  Future<void> test_afterUpdate() async {
     addTestFile('');
     // Currently required to get notifications on updates
     setPriorityFiles([testFile]);
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index 1b4af4a..425090c 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -15,7 +15,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NotificationErrorsTest);
   });
@@ -48,7 +48,7 @@
     ];
   }
 
-  test_analysisOptionsFile() async {
+  Future<void> test_analysisOptionsFile() async {
     String filePath = join(projectPath, 'analysis_options.yaml');
     String analysisOptionsFile = newFile(filePath, content: '''
 linter:
@@ -72,7 +72,7 @@
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
   }
 
-  test_androidManifestFile() async {
+  Future<void> test_androidManifestFile() async {
     String filePath = join(projectPath, 'android', 'AndroidManifest.xml');
     String manifestFile = newFile(filePath, content: '''
 <manifest
@@ -103,7 +103,7 @@
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
   }
 
-  test_androidManifestFile_dotDirectoryIgnored() async {
+  Future<void> test_androidManifestFile_dotDirectoryIgnored() async {
     String filePath =
         join(projectPath, 'ios', '.symlinks', 'AndroidManifest.xml');
     String manifestFile = newFile(filePath, content: '''
@@ -131,7 +131,7 @@
     expect(errors, isNull);
   }
 
-  test_dotFolder_priority() async {
+  Future<void> test_dotFolder_priority() async {
     // Files inside dotFolders should not generate error notifications even
     // if they are added to priority (priority affects only priority, not what
     // is analyzed).
@@ -155,7 +155,7 @@
     expect(filesErrors[brokenFile], isNull);
   }
 
-  test_dotFolder_unopenedFile() async {
+  Future<void> test_dotFolder_unopenedFile() async {
     // Files inside dotFolders are not analyzed. Sending requests that cause
     // them to be opened (such as hovers) should not result in error notifications
     // because there is no event that would flush them and they'd remain in the
@@ -179,7 +179,7 @@
     expect(filesErrors[brokenFile], isNull);
   }
 
-  test_importError() async {
+  Future<void> test_importError() async {
     createProject();
 
     addTestFile('''
@@ -197,7 +197,7 @@
     expect(error.message, startsWith("Target of URI doesn't exist"));
   }
 
-  test_lintError() async {
+  Future<void> test_lintError() async {
     var camelCaseTypesLintName = 'camel_case_types';
 
     newFile(join(projectPath, '.analysis_options'), content: '''
@@ -232,7 +232,7 @@
     expect(error.message, lint.description);
   }
 
-  test_notInAnalysisRoot() async {
+  Future<void> test_notInAnalysisRoot() async {
     createProject();
     String otherFile = newFile('/other.dart', content: 'UnknownType V;').path;
     addTestFile('''
@@ -245,7 +245,7 @@
     expect(filesErrors[otherFile], isNull);
   }
 
-  test_overlay_dotFolder() async {
+  Future<void> test_overlay_dotFolder() async {
     // Files inside dotFolders should not generate error notifications even
     // if they have overlays added.
     createProject();
@@ -272,7 +272,7 @@
     expect(filesErrors[brokenFile], isNull);
   }
 
-  test_overlay_newFile() async {
+  Future<void> test_overlay_newFile() async {
     // Overlays added for files that don't exist on disk should still generate
     // error notifications. Removing the overlay if the file is not on disk
     // should clear the errors.
@@ -307,7 +307,7 @@
     expect(filesErrors[brokenFile], isEmpty);
   }
 
-  test_overlay_newFileSavedBeforeRemoving() async {
+  Future<void> test_overlay_newFileSavedBeforeRemoving() async {
     // Overlays added for files that don't exist on disk should still generate
     // error notifications. If the file is subsequently saved to disk before the
     // overlay is removed, the errors should not be flushed when the overlay is
@@ -347,7 +347,7 @@
     expect(filesErrors[brokenFile], hasLength(greaterThan(0)));
   }
 
-  test_ParserError() async {
+  Future<void> test_ParserError() async {
     createProject();
     addTestFile('library lib');
     await waitForTasksFinished();
@@ -363,7 +363,7 @@
     expect(error.message, isNotNull);
   }
 
-  test_pubspecFile() async {
+  Future<void> test_pubspecFile() async {
     String filePath = join(projectPath, 'pubspec.yaml');
     String pubspecFile = newFile(filePath, content: '''
 version: 1.3.2
@@ -397,7 +397,7 @@
     expect(errors, hasLength(0));
   }
 
-  test_StaticWarning() async {
+  Future<void> test_StaticWarning() async {
     createProject();
     addTestFile('''
 main() {
diff --git a/pkg/analysis_server/test/analysis/notification_folding_test.dart b/pkg/analysis_server/test/analysis/notification_folding_test.dart
index 5fe6591..892e2af 100644
--- a/pkg/analysis_server/test/analysis/notification_folding_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_folding_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationFoldingTest);
   });
@@ -62,7 +62,7 @@
     addAnalysisSubscription(AnalysisService.FOLDING, testFile);
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile(sampleCode);
     await waitForTasksFinished();
     expect(lastRegions, isNull);
@@ -72,7 +72,7 @@
     expect(lastRegions, expectedResults);
   }
 
-  test_afterUpdate() async {
+  Future<void> test_afterUpdate() async {
     addTestFile('');
     // Currently required to get notifications on updates
     setPriorityFiles([testFile]);
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index d11be59..3e2f9f8 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationHighlightsTest);
     defineReflectiveTests(HighlightsWithControlFlowCollectionsTest);
@@ -24,7 +24,7 @@
 
 @reflectiveTest
 class AnalysisNotificationHighlightsTest extends HighlightsTestSupport {
-  test_ANNOTATION_hasArguments() async {
+  Future<void> test_ANNOTATION_hasArguments() async {
     addTestFile('''
 class AAA {
   const AAA(a, b, c);
@@ -36,7 +36,7 @@
     assertHasRegion(HighlightRegionType.ANNOTATION, ') main', ')'.length);
   }
 
-  test_ANNOTATION_noArguments() async {
+  Future<void> test_ANNOTATION_noArguments() async {
     addTestFile('''
 const AAA = 42;
 @AAA main() {}
@@ -45,7 +45,7 @@
     assertHasRegion(HighlightRegionType.ANNOTATION, '@AAA');
   }
 
-  test_BUILT_IN_abstract() async {
+  Future<void> test_BUILT_IN_abstract() async {
     addTestFile('''
 abstract class A {};
 abstract class B = Object with A;
@@ -58,7 +58,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'abstract = 42');
   }
 
-  test_BUILT_IN_as() async {
+  Future<void> test_BUILT_IN_as() async {
     addTestFile('''
 import 'dart:math' as math;
 main() {
@@ -71,7 +71,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'as = 42');
   }
 
-  test_BUILT_IN_async() async {
+  Future<void> test_BUILT_IN_async() async {
     addTestFile('''
 fa() async {}
 fb() async* {}
@@ -85,7 +85,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'async = false');
   }
 
-  test_BUILT_IN_await() async {
+  Future<void> test_BUILT_IN_await() async {
     addTestFile('''
 main() async {
   await 42;
@@ -99,7 +99,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'await for');
   }
 
-  test_BUILT_IN_deferred() async {
+  Future<void> test_BUILT_IN_deferred() async {
     addTestFile('''
 import 'dart:math' deferred as math;
 main() {
@@ -110,7 +110,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'deferred = 42');
   }
 
-  test_BUILT_IN_export() async {
+  Future<void> test_BUILT_IN_export() async {
     addTestFile('''
 export "dart:math";
 main() {
@@ -121,7 +121,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'export = 42');
   }
 
-  test_BUILT_IN_external() async {
+  Future<void> test_BUILT_IN_external() async {
     addTestFile('''
 class A {
   external A();
@@ -137,7 +137,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'external = 42');
   }
 
-  test_BUILT_IN_factory() async {
+  Future<void> test_BUILT_IN_factory() async {
     addTestFile('''
 class A {
   factory A() => null;
@@ -150,7 +150,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'factory = 42');
   }
 
-  test_BUILT_IN_get() async {
+  Future<void> test_BUILT_IN_get() async {
     addTestFile('''
 get aaa => 1;
 class A {
@@ -176,7 +176,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'hide = 42');
   }
 
-  test_BUILT_IN_implements() async {
+  Future<void> test_BUILT_IN_implements() async {
     addTestFile('''
 class A {}
 class B implements A {}
@@ -199,7 +199,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'import = 42');
   }
 
-  test_BUILT_IN_library() async {
+  Future<void> test_BUILT_IN_library() async {
     addTestFile('''
 library lib;
 main() {
@@ -225,7 +225,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'native = 42');
   }
 
-  test_BUILT_IN_on_inMixin() async {
+  Future<void> test_BUILT_IN_on_inMixin() async {
     addTestFile('''
 mixin M on N {}
 class N {}
@@ -234,7 +234,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'on N');
   }
 
-  test_BUILT_IN_on_inTry() async {
+  Future<void> test_BUILT_IN_on_inTry() async {
     addTestFile('''
 main() {
   try {
@@ -247,7 +247,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'on = 42');
   }
 
-  test_BUILT_IN_operator() async {
+  Future<void> test_BUILT_IN_operator() async {
     addTestFile('''
 class A {
   operator +(x) => null;
@@ -260,7 +260,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'operator = 42');
   }
 
-  test_BUILT_IN_part() async {
+  Future<void> test_BUILT_IN_part() async {
     addTestFile('''
 part "my_part.dart";
 main() {
@@ -272,7 +272,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'part = 42');
   }
 
-  test_BUILT_IN_partOf() async {
+  Future<void> test_BUILT_IN_partOf() async {
     addTestFile('''
 part of lib;
 main() {
@@ -286,7 +286,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'of = 2');
   }
 
-  test_BUILT_IN_set() async {
+  Future<void> test_BUILT_IN_set() async {
     addTestFile('''
 set aaa(x) {}
 class A
@@ -312,7 +312,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'show = 42');
   }
 
-  test_BUILT_IN_static() async {
+  Future<void> test_BUILT_IN_static() async {
     addTestFile('''
 class A {
   static aaa;
@@ -327,7 +327,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'static = 42');
   }
 
-  test_BUILT_IN_sync() async {
+  Future<void> test_BUILT_IN_sync() async {
     addTestFile('''
 fa() sync {}
 fb() sync* {}
@@ -341,7 +341,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'sync = false');
   }
 
-  test_BUILT_IN_typedef() async {
+  Future<void> test_BUILT_IN_typedef() async {
     addTestFile('''
 typedef A();
 main() {
@@ -352,7 +352,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'typedef = 42');
   }
 
-  test_BUILT_IN_yield() async {
+  Future<void> test_BUILT_IN_yield() async {
     addTestFile('''
 main() async* {
   yield 42;
@@ -362,7 +362,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'yield 42');
   }
 
-  test_BUILT_IN_yieldStar() async {
+  Future<void> test_BUILT_IN_yieldStar() async {
     addTestFile('''
 main() async* {
   yield* [];
@@ -372,7 +372,7 @@
     assertHasStringRegion(HighlightRegionType.BUILT_IN, 'yield*');
   }
 
-  test_CLASS() async {
+  Future<void> test_CLASS() async {
     addTestFile('''
 class AAA {}
 AAA aaa;
@@ -382,7 +382,7 @@
     assertHasRegion(HighlightRegionType.CLASS, 'AAA aaa');
   }
 
-  test_CLASS_notDynamic() async {
+  Future<void> test_CLASS_notDynamic() async {
     addTestFile('''
 dynamic f() {}
 ''');
@@ -390,7 +390,7 @@
     assertNoRegion(HighlightRegionType.CLASS, 'dynamic f()');
   }
 
-  test_CLASS_notVoid() async {
+  Future<void> test_CLASS_notVoid() async {
     addTestFile('''
 void f() {}
 ''');
@@ -398,7 +398,7 @@
     assertNoRegion(HighlightRegionType.CLASS, 'void f()');
   }
 
-  test_COMMENT() async {
+  Future<void> test_COMMENT() async {
     addTestFile('''
 /**
  * documentation comment
@@ -418,7 +418,7 @@
     assertHasRegion(HighlightRegionType.COMMENT_BLOCK, '/* b', 19);
   }
 
-  test_CONSTRUCTOR_explicitNew() async {
+  Future<void> test_CONSTRUCTOR_explicitNew() async {
     addTestFile('''
 class AAA<T> {
   AAA() {}
@@ -438,7 +438,7 @@
     assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'name(42)');
   }
 
-  test_CONSTRUCTOR_implicitNew() async {
+  Future<void> test_CONSTRUCTOR_implicitNew() async {
     addTestFile('''
 class AAA<T> {
   AAA() {}
@@ -472,7 +472,7 @@
     assertHasStringRegion(HighlightRegionType.DIRECTIVE, "part 'part.dart';");
   }
 
-  test_DIRECTIVE_partOf() async {
+  Future<void> test_DIRECTIVE_partOf() async {
     addTestFile('''
 part of lib;
 ''');
@@ -481,7 +481,7 @@
     assertHasStringRegion(HighlightRegionType.DIRECTIVE, 'part of lib;');
   }
 
-  test_DYNAMIC_LOCAL_VARIABLE() async {
+  Future<void> test_DYNAMIC_LOCAL_VARIABLE() async {
     addTestFile('''
 f() {}
 main(p) {
@@ -495,7 +495,7 @@
     assertHasRegion(HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE, 'v;');
   }
 
-  test_DYNAMIC_PARAMETER() async {
+  Future<void> test_DYNAMIC_PARAMETER() async {
     addTestFile('''
 main(p) {
   print(p);
@@ -506,7 +506,7 @@
     assertHasRegion(HighlightRegionType.DYNAMIC_PARAMETER_REFERENCE, 'p);');
   }
 
-  test_DYNAMIC_VARIABLE_field() async {
+  Future<void> test_DYNAMIC_VARIABLE_field() async {
     addTestFile('''
 class A {
   var f;
@@ -520,7 +520,7 @@
     assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'f = 1');
   }
 
-  test_ENUM() async {
+  Future<void> test_ENUM() async {
     addTestFile('''
 enum MyEnum {A, B, C}
 MyEnum value;
@@ -530,7 +530,7 @@
     assertHasRegion(HighlightRegionType.ENUM, 'MyEnum value;');
   }
 
-  test_ENUM_CONSTANT() async {
+  Future<void> test_ENUM_CONSTANT() async {
     addTestFile('''
 enum MyEnum {AAA, BBB}
 main() {
@@ -545,7 +545,7 @@
     assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB);');
   }
 
-  test_FUNCTION_TYPE_ALIAS() async {
+  Future<void> test_FUNCTION_TYPE_ALIAS() async {
     addTestFile('''
 typedef FFF(p);
 main(FFF fff) {
@@ -556,7 +556,7 @@
     assertHasRegion(HighlightRegionType.FUNCTION_TYPE_ALIAS, 'FFF fff)');
   }
 
-  test_GETTER() async {
+  Future<void> test_GETTER() async {
     addTestFile('''
 get aaa => null;
 class A {
@@ -581,7 +581,7 @@
     assertHasRegion(HighlightRegionType.STATIC_GETTER_REFERENCE, 'ccc;');
   }
 
-  test_IDENTIFIER_DEFAULT() async {
+  Future<void> test_IDENTIFIER_DEFAULT() async {
     addTestFile('''
 main() {
   aaa = 42;
@@ -595,7 +595,7 @@
     assertHasRegion(HighlightRegionType.IDENTIFIER_DEFAULT, 'CCC ccc');
   }
 
-  test_IMPORT_PREFIX() async {
+  Future<void> test_IMPORT_PREFIX() async {
     addTestFile('''
 import 'dart:math' as ma;
 main() {
@@ -607,7 +607,7 @@
     assertHasRegion(HighlightRegionType.IMPORT_PREFIX, 'ma.max');
   }
 
-  test_INSTANCE_FIELD() async {
+  Future<void> test_INSTANCE_FIELD() async {
     addTestFile('''
 class A {
   int aaa = 1;
@@ -627,7 +627,7 @@
     assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'bbb = 5');
   }
 
-  test_INSTANCE_FIELD_dynamic() async {
+  Future<void> test_INSTANCE_FIELD_dynamic() async {
     addTestFile('''
 class A {
   var f;
@@ -639,7 +639,7 @@
     assertHasRegion(HighlightRegionType.INSTANCE_FIELD_REFERENCE, 'f);');
   }
 
-  test_KEYWORD() async {
+  Future<void> test_KEYWORD() async {
     addTestFile('''
 main() {
   assert(true);
@@ -703,7 +703,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'with A;');
   }
 
-  test_KEYWORD_ifElse_statement() async {
+  Future<void> test_KEYWORD_ifElse_statement() async {
     addTestFile('''
 f(a, b) {
   if (a < b) {} else {}
@@ -714,7 +714,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_KEYWORD_mixin() async {
+  Future<void> test_KEYWORD_mixin() async {
     addTestFile('''
 mixin M {}
 ''');
@@ -722,7 +722,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'mixin');
   }
 
-  test_KEYWORD_void() async {
+  Future<void> test_KEYWORD_void() async {
     addTestFile('''
 void main() {
 }
@@ -731,7 +731,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'void main()');
   }
 
-  test_LABEL() async {
+  Future<void> test_LABEL() async {
     addTestFile('''
 main() {
 myLabel:
@@ -745,7 +745,7 @@
     assertHasRegion(HighlightRegionType.LABEL, 'myLabel;');
   }
 
-  test_LIBRARY_NAME_libraryDirective() async {
+  Future<void> test_LIBRARY_NAME_libraryDirective() async {
     addTestFile('''
 library my.lib.name;
 ''');
@@ -753,7 +753,7 @@
     assertHasStringRegion(HighlightRegionType.LIBRARY_NAME, 'my.lib.name');
   }
 
-  test_LIBRARY_NAME_partOfDirective() async {
+  Future<void> test_LIBRARY_NAME_partOfDirective() async {
     _addLibraryForTestPart();
     addTestFile('''
 part of my.lib.name;
@@ -762,45 +762,45 @@
     assertHasStringRegion(HighlightRegionType.LIBRARY_NAME, 'my.lib.name');
   }
 
-  test_LITERAL_BOOLEAN() async {
+  Future<void> test_LITERAL_BOOLEAN() async {
     addTestFile('var V = true;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.LITERAL_BOOLEAN, 'true;');
   }
 
-  test_LITERAL_DOUBLE() async {
+  Future<void> test_LITERAL_DOUBLE() async {
     addTestFile('var V = 4.2;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.LITERAL_DOUBLE, '4.2;', '4.2'.length);
   }
 
-  test_LITERAL_INTEGER() async {
+  Future<void> test_LITERAL_INTEGER() async {
     addTestFile('var V = 42;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.LITERAL_INTEGER, '42;');
   }
 
-  test_LITERAL_LIST() async {
+  Future<void> test_LITERAL_LIST() async {
     addTestFile('var V = <int>[1, 2, 3];');
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_LIST, '<int>[1, 2, 3]');
   }
 
-  test_LITERAL_MAP() async {
+  Future<void> test_LITERAL_MAP() async {
     addTestFile("var V = const <int, String>{1: 'a', 2: 'b', 3: 'c'};");
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_MAP,
         "const <int, String>{1: 'a', 2: 'b', 3: 'c'}");
   }
 
-  test_LITERAL_STRING() async {
+  Future<void> test_LITERAL_STRING() async {
     addTestFile('var V = "abc";');
     await prepareHighlights();
     assertHasRegion(
         HighlightRegionType.LITERAL_STRING, '"abc";', '"abc"'.length);
   }
 
-  test_LOCAL_FUNCTION() async {
+  Future<void> test_LOCAL_FUNCTION() async {
     addTestFile('''
 main() {
   fff() {}
@@ -814,7 +814,7 @@
     assertHasRegion(HighlightRegionType.LOCAL_FUNCTION_REFERENCE, 'fff;');
   }
 
-  test_LOCAL_VARIABLE() async {
+  Future<void> test_LOCAL_VARIABLE() async {
     addTestFile('''
 main() {
   int vvv = 0;
@@ -828,7 +828,7 @@
     assertHasRegion(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, 'vvv = 1;');
   }
 
-  test_METHOD() async {
+  Future<void> test_METHOD() async {
     addTestFile('''
 class A {
   aaa() {}
@@ -851,7 +851,7 @@
     assertHasRegion(HighlightRegionType.STATIC_METHOD_REFERENCE, 'bbb;');
   }
 
-  test_METHOD_bestType() async {
+  Future<void> test_METHOD_bestType() async {
     addTestFile('''
 main(p) {
   if (p is List) {
@@ -863,7 +863,7 @@
     assertHasRegion(HighlightRegionType.INSTANCE_METHOD_REFERENCE, 'add(null)');
   }
 
-  test_PARAMETER() async {
+  Future<void> test_PARAMETER() async {
     addTestFile('''
 main(int p) {
   p;
@@ -876,7 +876,7 @@
     assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'p = 42');
   }
 
-  test_PARAMETER_named() async {
+  Future<void> test_PARAMETER_named() async {
     addTestFile('''
 class C {
   final int aaa;
@@ -893,7 +893,7 @@
     assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'bbb: 2');
   }
 
-  test_SETTER_DECLARATION() async {
+  Future<void> test_SETTER_DECLARATION() async {
     addTestFile('''
 set aaa(x) {}
 class A {
@@ -915,7 +915,7 @@
     assertHasRegion(HighlightRegionType.STATIC_SETTER_REFERENCE, 'ccc = 3');
   }
 
-  test_STATIC_FIELD() async {
+  Future<void> test_STATIC_FIELD() async {
     addTestFile('''
 class A {
   static aaa = 1;
@@ -935,7 +935,7 @@
     assertHasRegion(HighlightRegionType.STATIC_SETTER_REFERENCE, 'ccc = 3');
   }
 
-  test_TOP_LEVEL_FUNCTION() async {
+  Future<void> test_TOP_LEVEL_FUNCTION() async {
     addTestFile('''
 fff(p) {}
 main() {
@@ -982,7 +982,7 @@
     assertNoRegion(HighlightRegionType.TYPE_NAME_DYNAMIC, 'dynamic = 42');
   }
 
-  test_TYPE_PARAMETER() async {
+  Future<void> test_TYPE_PARAMETER() async {
     addTestFile('''
 class A<T> {
   T fff;
@@ -996,7 +996,8 @@
     assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T p)');
   }
 
-  test_UNRESOLVED_INSTANCE_MEMBER_REFERENCE_dynamicVarTarget() async {
+  Future<void>
+      test_UNRESOLVED_INSTANCE_MEMBER_REFERENCE_dynamicVarTarget() async {
     addTestFile('''
 main(p) {
   p.aaa;
@@ -1020,7 +1021,8 @@
     assertHasRegion(type, 'ddd()');
   }
 
-  test_UNRESOLVED_INSTANCE_MEMBER_REFERENCE_nonDynamicTarget() async {
+  Future<void>
+      test_UNRESOLVED_INSTANCE_MEMBER_REFERENCE_nonDynamicTarget() async {
     addTestFile('''
 import 'dart:math' as math;
 main(String str) {
@@ -1165,7 +1167,7 @@
   }
 
   @failingTest
-  test_KEYWORD_awaitForIn_list() async {
+  Future<void> test_KEYWORD_awaitForIn_list() async {
     addTestFile('''
 f(a) async {
   return [await for(var b in a) b];
@@ -1178,7 +1180,7 @@
   }
 
   @failingTest
-  test_KEYWORD_awaitForIn_map() async {
+  Future<void> test_KEYWORD_awaitForIn_map() async {
     addTestFile('''
 f(a) async {
   return {await for(var b in a) b : 0};
@@ -1191,7 +1193,7 @@
   }
 
   @failingTest
-  test_KEYWORD_awaitForIn_set() async {
+  Future<void> test_KEYWORD_awaitForIn_set() async {
     addTestFile('''
 f(a) async {
   return {await for(var b in a) b};
@@ -1203,7 +1205,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'in');
   }
 
-  test_KEYWORD_const_list() async {
+  Future<void> test_KEYWORD_const_list() async {
     addTestFile('''
 var v = const [];
 ''');
@@ -1211,7 +1213,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'const');
   }
 
-  test_KEYWORD_const_map() async {
+  Future<void> test_KEYWORD_const_map() async {
     addTestFile('''
 var v = const {0 : 1};
 ''');
@@ -1219,7 +1221,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'const');
   }
 
-  test_KEYWORD_const_set() async {
+  Future<void> test_KEYWORD_const_set() async {
     addTestFile('''
 var v = const {0};
 ''');
@@ -1227,7 +1229,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'const');
   }
 
-  test_KEYWORD_if_list() async {
+  Future<void> test_KEYWORD_if_list() async {
     addTestFile('''
 f(a, b) {
   return [if (a < b) 'a'];
@@ -1237,7 +1239,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'if');
   }
 
-  test_KEYWORD_if_map() async {
+  Future<void> test_KEYWORD_if_map() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a' : 1};
@@ -1247,7 +1249,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'if');
   }
 
-  test_KEYWORD_if_set() async {
+  Future<void> test_KEYWORD_if_set() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a'};
@@ -1257,7 +1259,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'if');
   }
 
-  test_KEYWORD_ifElse_list() async {
+  Future<void> test_KEYWORD_ifElse_list() async {
     addTestFile('''
 f(a, b) {
   return [if (a < b) 'a' else 'b'];
@@ -1268,7 +1270,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_KEYWORD_ifElse_map() async {
+  Future<void> test_KEYWORD_ifElse_map() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a' : 1 else 'b' : 2};
@@ -1279,7 +1281,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_KEYWORD_ifElse_set() async {
+  Future<void> test_KEYWORD_ifElse_set() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a' else 'b'};
@@ -1290,13 +1292,13 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_LITERAL_LIST() async {
+  Future<void> test_LITERAL_LIST() async {
     addTestFile('var V = <int>[1, 2, 3];');
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_LIST, '<int>[1, 2, 3]');
   }
 
-  test_LITERAL_MAP() async {
+  Future<void> test_LITERAL_MAP() async {
     addTestFile("var V = const <int, String>{1: 'a', 2: 'b', 3: 'c'};");
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_MAP,
@@ -1316,7 +1318,7 @@
     super.createProject(packageRoots: packageRoots);
   }
 
-  test_KEYWORD_late() async {
+  Future<void> test_KEYWORD_late() async {
     addTestFile('''
 class C {
   late int x;
@@ -1326,7 +1328,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'late');
   }
 
-  test_KEYWORD_required() async {
+  Future<void> test_KEYWORD_required() async {
     addTestFile('''
 void f({required int x}) {}
 ''');
diff --git a/pkg/analysis_server/test/analysis/notification_highlights_test.dart b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
index 46dc6f6..0009354 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationHighlightsTest);
     defineReflectiveTests(HighlightsWithControlFlowCollectionsTest);
@@ -24,7 +24,7 @@
 
 @reflectiveTest
 class AnalysisNotificationHighlightsTest extends HighlightsTestSupport {
-  test_ANNOTATION_hasArguments() async {
+  Future<void> test_ANNOTATION_hasArguments() async {
     addTestFile('''
 class AAA {
   const AAA(a, b, c);
@@ -36,7 +36,7 @@
     assertHasRegion(HighlightRegionType.ANNOTATION, ') main', ')'.length);
   }
 
-  test_ANNOTATION_noArguments() async {
+  Future<void> test_ANNOTATION_noArguments() async {
     addTestFile('''
 const AAA = 42;
 @AAA main() {}
@@ -45,7 +45,7 @@
     assertHasRegion(HighlightRegionType.ANNOTATION, '@AAA');
   }
 
-  test_BUILT_IN_abstract() async {
+  Future<void> test_BUILT_IN_abstract() async {
     addTestFile('''
 abstract class A {};
 abstract class B = Object with A;
@@ -58,7 +58,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'abstract = 42');
   }
 
-  test_BUILT_IN_as() async {
+  Future<void> test_BUILT_IN_as() async {
     addTestFile('''
 import 'dart:math' as math;
 main() {
@@ -71,7 +71,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'as = 42');
   }
 
-  test_BUILT_IN_async() async {
+  Future<void> test_BUILT_IN_async() async {
     addTestFile('''
 fa() async {}
 fb() async* {}
@@ -85,7 +85,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'async = false');
   }
 
-  test_BUILT_IN_await() async {
+  Future<void> test_BUILT_IN_await() async {
     addTestFile('''
 main() async {
   await 42;
@@ -99,7 +99,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'await for');
   }
 
-  test_BUILT_IN_deferred() async {
+  Future<void> test_BUILT_IN_deferred() async {
     addTestFile('''
 import 'dart:math' deferred as math;
 main() {
@@ -110,7 +110,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'deferred = 42');
   }
 
-  test_BUILT_IN_export() async {
+  Future<void> test_BUILT_IN_export() async {
     addTestFile('''
 export "dart:math";
 main() {
@@ -121,7 +121,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'export = 42');
   }
 
-  test_BUILT_IN_external() async {
+  Future<void> test_BUILT_IN_external() async {
     addTestFile('''
 class A {
   external A();
@@ -137,7 +137,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'external = 42');
   }
 
-  test_BUILT_IN_factory() async {
+  Future<void> test_BUILT_IN_factory() async {
     addTestFile('''
 class A {
   factory A() => null;
@@ -150,7 +150,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'factory = 42');
   }
 
-  test_BUILT_IN_get() async {
+  Future<void> test_BUILT_IN_get() async {
     addTestFile('''
 get aaa => 1;
 class A {
@@ -176,7 +176,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'hide = 42');
   }
 
-  test_BUILT_IN_implements() async {
+  Future<void> test_BUILT_IN_implements() async {
     addTestFile('''
 class A {}
 class B implements A {}
@@ -199,7 +199,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'import = 42');
   }
 
-  test_BUILT_IN_library() async {
+  Future<void> test_BUILT_IN_library() async {
     addTestFile('''
 library lib;
 main() {
@@ -225,7 +225,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'native = 42');
   }
 
-  test_BUILT_IN_on_inMixin() async {
+  Future<void> test_BUILT_IN_on_inMixin() async {
     addTestFile('''
 mixin M on N {}
 class N {}
@@ -234,7 +234,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'on N');
   }
 
-  test_BUILT_IN_on_inTry() async {
+  Future<void> test_BUILT_IN_on_inTry() async {
     addTestFile('''
 main() {
   try {
@@ -247,7 +247,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'on = 42');
   }
 
-  test_BUILT_IN_operator() async {
+  Future<void> test_BUILT_IN_operator() async {
     addTestFile('''
 class A {
   operator +(x) => null;
@@ -260,7 +260,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'operator = 42');
   }
 
-  test_BUILT_IN_part() async {
+  Future<void> test_BUILT_IN_part() async {
     addTestFile('''
 part "my_part.dart";
 main() {
@@ -272,7 +272,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'part = 42');
   }
 
-  test_BUILT_IN_partOf() async {
+  Future<void> test_BUILT_IN_partOf() async {
     addTestFile('''
 part of lib;
 main() {
@@ -286,7 +286,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'of = 2');
   }
 
-  test_BUILT_IN_set() async {
+  Future<void> test_BUILT_IN_set() async {
     addTestFile('''
 set aaa(x) {}
 class A
@@ -312,7 +312,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'show = 42');
   }
 
-  test_BUILT_IN_static() async {
+  Future<void> test_BUILT_IN_static() async {
     addTestFile('''
 class A {
   static aaa;
@@ -327,7 +327,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'static = 42');
   }
 
-  test_BUILT_IN_sync() async {
+  Future<void> test_BUILT_IN_sync() async {
     addTestFile('''
 fa() sync {}
 fb() sync* {}
@@ -341,7 +341,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'sync = false');
   }
 
-  test_BUILT_IN_typedef() async {
+  Future<void> test_BUILT_IN_typedef() async {
     addTestFile('''
 typedef A();
 main() {
@@ -352,7 +352,7 @@
     assertNoRegion(HighlightRegionType.BUILT_IN, 'typedef = 42');
   }
 
-  test_BUILT_IN_yield() async {
+  Future<void> test_BUILT_IN_yield() async {
     addTestFile('''
 main() async* {
   yield 42;
@@ -362,7 +362,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'yield 42');
   }
 
-  test_BUILT_IN_yieldStar() async {
+  Future<void> test_BUILT_IN_yieldStar() async {
     addTestFile('''
 main() async* {
   yield* [];
@@ -372,7 +372,7 @@
     assertHasStringRegion(HighlightRegionType.BUILT_IN, 'yield*');
   }
 
-  test_CLASS() async {
+  Future<void> test_CLASS() async {
     addTestFile('''
 class AAA {}
 AAA aaa;
@@ -382,7 +382,7 @@
     assertHasRegion(HighlightRegionType.CLASS, 'AAA aaa');
   }
 
-  test_CLASS_notDynamic() async {
+  Future<void> test_CLASS_notDynamic() async {
     addTestFile('''
 dynamic f() {}
 ''');
@@ -390,7 +390,7 @@
     assertNoRegion(HighlightRegionType.CLASS, 'dynamic f()');
   }
 
-  test_CLASS_notVoid() async {
+  Future<void> test_CLASS_notVoid() async {
     addTestFile('''
 void f() {}
 ''');
@@ -398,7 +398,7 @@
     assertNoRegion(HighlightRegionType.CLASS, 'void f()');
   }
 
-  test_COMMENT() async {
+  Future<void> test_COMMENT() async {
     addTestFile('''
 /**
  * documentation comment
@@ -418,7 +418,7 @@
     assertHasRegion(HighlightRegionType.COMMENT_BLOCK, '/* b', 19);
   }
 
-  test_CONSTRUCTOR_explicitNew() async {
+  Future<void> test_CONSTRUCTOR_explicitNew() async {
     addTestFile('''
 class AAA<T> {
   AAA() {}
@@ -438,7 +438,7 @@
     assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'name(42)');
   }
 
-  test_CONSTRUCTOR_implicitNew() async {
+  Future<void> test_CONSTRUCTOR_implicitNew() async {
     addTestFile('''
 class AAA<T> {
   AAA() {}
@@ -472,7 +472,7 @@
     assertHasStringRegion(HighlightRegionType.DIRECTIVE, "part 'part.dart';");
   }
 
-  test_DIRECTIVE_partOf() async {
+  Future<void> test_DIRECTIVE_partOf() async {
     addTestFile('''
 part of lib;
 ''');
@@ -481,7 +481,7 @@
     assertHasStringRegion(HighlightRegionType.DIRECTIVE, 'part of lib;');
   }
 
-  test_DYNAMIC_TYPE() async {
+  Future<void> test_DYNAMIC_TYPE() async {
     addTestFile('''
 f() {}
 main(p) {
@@ -498,7 +498,7 @@
     assertNoRegion(HighlightRegionType.DYNAMIC_TYPE, 'v3 =');
   }
 
-  test_ENUM() async {
+  Future<void> test_ENUM() async {
     addTestFile('''
 enum MyEnum {A, B, C}
 MyEnum value;
@@ -508,7 +508,7 @@
     assertHasRegion(HighlightRegionType.ENUM, 'MyEnum value;');
   }
 
-  test_ENUM_CONSTANT() async {
+  Future<void> test_ENUM_CONSTANT() async {
     addTestFile('''
 enum MyEnum {AAA, BBB}
 main() {
@@ -523,7 +523,7 @@
     assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB);');
   }
 
-  test_FIELD() async {
+  Future<void> test_FIELD() async {
     addTestFile('''
 class A {
   int aaa = 1;
@@ -543,7 +543,7 @@
     assertHasRegion(HighlightRegionType.FIELD, 'bbb = 5');
   }
 
-  test_FIELD_STATIC() async {
+  Future<void> test_FIELD_STATIC() async {
     addTestFile('''
 class A {
   static aaa = 1;
@@ -563,7 +563,7 @@
     assertHasRegion(HighlightRegionType.FIELD_STATIC, 'ccc = 3');
   }
 
-  test_FUNCTION() async {
+  Future<void> test_FUNCTION() async {
     addTestFile('''
 fff(p) {}
 main() {
@@ -575,7 +575,7 @@
     assertHasRegion(HighlightRegionType.FUNCTION, 'fff(42)');
   }
 
-  test_FUNCTION_TYPE_ALIAS() async {
+  Future<void> test_FUNCTION_TYPE_ALIAS() async {
     addTestFile('''
 typedef FFF(p);
 main(FFF fff) {
@@ -586,7 +586,7 @@
     assertHasRegion(HighlightRegionType.FUNCTION_TYPE_ALIAS, 'FFF fff)');
   }
 
-  test_GETTER_DECLARATION() async {
+  Future<void> test_GETTER_DECLARATION() async {
     addTestFile('''
 get aaa => null;
 class A {
@@ -604,7 +604,7 @@
     assertHasRegion(HighlightRegionType.FIELD, 'bbb;');
   }
 
-  test_IDENTIFIER_DEFAULT() async {
+  Future<void> test_IDENTIFIER_DEFAULT() async {
     addTestFile('''
 main() {
   aaa = 42;
@@ -618,7 +618,7 @@
     assertHasRegion(HighlightRegionType.IDENTIFIER_DEFAULT, 'CCC ccc');
   }
 
-  test_IMPORT_PREFIX() async {
+  Future<void> test_IMPORT_PREFIX() async {
     addTestFile('''
 import 'dart:math' as ma;
 main() {
@@ -630,7 +630,7 @@
     assertHasRegion(HighlightRegionType.IMPORT_PREFIX, 'ma.max');
   }
 
-  test_KEYWORD() async {
+  Future<void> test_KEYWORD() async {
     addTestFile('''
 main() {
   assert(true);
@@ -694,7 +694,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'with A;');
   }
 
-  test_KEYWORD_ifElse_statement() async {
+  Future<void> test_KEYWORD_ifElse_statement() async {
     addTestFile('''
 f(a, b) {
   if (a < b) {} else {}
@@ -705,7 +705,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_KEYWORD_mixin() async {
+  Future<void> test_KEYWORD_mixin() async {
     addTestFile('''
 mixin M {}
 ''');
@@ -713,7 +713,7 @@
     assertHasRegion(HighlightRegionType.BUILT_IN, 'mixin');
   }
 
-  test_KEYWORD_void() async {
+  Future<void> test_KEYWORD_void() async {
     addTestFile('''
 void main() {
 }
@@ -722,7 +722,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'void main()');
   }
 
-  test_LABEL() async {
+  Future<void> test_LABEL() async {
     addTestFile('''
 main() {
 myLabel:
@@ -736,45 +736,45 @@
     assertHasRegion(HighlightRegionType.LABEL, 'myLabel;');
   }
 
-  test_LITERAL_BOOLEAN() async {
+  Future<void> test_LITERAL_BOOLEAN() async {
     addTestFile('var V = true;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.LITERAL_BOOLEAN, 'true;');
   }
 
-  test_LITERAL_DOUBLE() async {
+  Future<void> test_LITERAL_DOUBLE() async {
     addTestFile('var V = 4.2;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.LITERAL_DOUBLE, '4.2;', '4.2'.length);
   }
 
-  test_LITERAL_INTEGER() async {
+  Future<void> test_LITERAL_INTEGER() async {
     addTestFile('var V = 42;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.LITERAL_INTEGER, '42;');
   }
 
-  test_LITERAL_LIST() async {
+  Future<void> test_LITERAL_LIST() async {
     addTestFile('var V = <int>[1, 2, 3];');
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_LIST, '<int>[1, 2, 3]');
   }
 
-  test_LITERAL_MAP() async {
+  Future<void> test_LITERAL_MAP() async {
     addTestFile("var V = const <int, String>{1: 'a', 2: 'b', 3: 'c'};");
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_MAP,
         "const <int, String>{1: 'a', 2: 'b', 3: 'c'}");
   }
 
-  test_LITERAL_STRING() async {
+  Future<void> test_LITERAL_STRING() async {
     addTestFile('var V = "abc";');
     await prepareHighlights();
     assertHasRegion(
         HighlightRegionType.LITERAL_STRING, '"abc";', '"abc"'.length);
   }
 
-  test_LOCAL_VARIABLE() async {
+  Future<void> test_LOCAL_VARIABLE() async {
     addTestFile('''
 main() {
   int vvv = 0;
@@ -788,7 +788,7 @@
     assertHasRegion(HighlightRegionType.LOCAL_VARIABLE, 'vvv = 1;');
   }
 
-  test_METHOD() async {
+  Future<void> test_METHOD() async {
     addTestFile('''
 class A {
   aaa() {}
@@ -810,7 +810,7 @@
     assertHasRegion(HighlightRegionType.METHOD_STATIC, 'bbb;');
   }
 
-  test_METHOD_bestType() async {
+  Future<void> test_METHOD_bestType() async {
     addTestFile('''
 main(p) {
   if (p is List) {
@@ -822,7 +822,7 @@
     assertHasRegion(HighlightRegionType.METHOD, 'add(null)');
   }
 
-  test_PARAMETER() async {
+  Future<void> test_PARAMETER() async {
     addTestFile('''
 main(int p) {
   p;
@@ -835,7 +835,7 @@
     assertHasRegion(HighlightRegionType.PARAMETER, 'p = 42');
   }
 
-  test_SETTER_DECLARATION() async {
+  Future<void> test_SETTER_DECLARATION() async {
     addTestFile('''
 set aaa(x) {}
 class A {
@@ -882,7 +882,7 @@
     assertNoRegion(HighlightRegionType.TYPE_NAME_DYNAMIC, 'dynamic = 42');
   }
 
-  test_TYPE_PARAMETER() async {
+  Future<void> test_TYPE_PARAMETER() async {
     addTestFile('''
 class A<T> {
   T fff;
@@ -1014,7 +1014,7 @@
   }
 
   @failingTest
-  test_KEYWORD_awaitForIn_list() async {
+  Future<void> test_KEYWORD_awaitForIn_list() async {
     addTestFile('''
 f(a) async {
   return [await for(var b in a) b];
@@ -1027,7 +1027,7 @@
   }
 
   @failingTest
-  test_KEYWORD_awaitForIn_map() async {
+  Future<void> test_KEYWORD_awaitForIn_map() async {
     addTestFile('''
 f(a) async {
   return {await for(var b in a) b : 0};
@@ -1040,7 +1040,7 @@
   }
 
   @failingTest
-  test_KEYWORD_awaitForIn_set() async {
+  Future<void> test_KEYWORD_awaitForIn_set() async {
     addTestFile('''
 f(a) async {
   return {await for(var b in a) b};
@@ -1052,7 +1052,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'in');
   }
 
-  test_KEYWORD_const_list() async {
+  Future<void> test_KEYWORD_const_list() async {
     addTestFile('''
 var v = const [];
 ''');
@@ -1060,7 +1060,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'const');
   }
 
-  test_KEYWORD_const_map() async {
+  Future<void> test_KEYWORD_const_map() async {
     addTestFile('''
 var v = const {0 : 1};
 ''');
@@ -1068,7 +1068,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'const');
   }
 
-  test_KEYWORD_const_set() async {
+  Future<void> test_KEYWORD_const_set() async {
     addTestFile('''
 var v = const {0};
 ''');
@@ -1076,7 +1076,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'const');
   }
 
-  test_KEYWORD_if_list() async {
+  Future<void> test_KEYWORD_if_list() async {
     addTestFile('''
 f(a, b) {
   return [if (a < b) 'a'];
@@ -1086,7 +1086,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'if');
   }
 
-  test_KEYWORD_if_map() async {
+  Future<void> test_KEYWORD_if_map() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a' : 1};
@@ -1096,7 +1096,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'if');
   }
 
-  test_KEYWORD_if_set() async {
+  Future<void> test_KEYWORD_if_set() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a'};
@@ -1106,7 +1106,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'if');
   }
 
-  test_KEYWORD_ifElse_list() async {
+  Future<void> test_KEYWORD_ifElse_list() async {
     addTestFile('''
 f(a, b) {
   return [if (a < b) 'a' else 'b'];
@@ -1117,7 +1117,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_KEYWORD_ifElse_map() async {
+  Future<void> test_KEYWORD_ifElse_map() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a' : 1 else 'b' : 2};
@@ -1128,7 +1128,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_KEYWORD_ifElse_set() async {
+  Future<void> test_KEYWORD_ifElse_set() async {
     addTestFile('''
 f(a, b) {
   return {if (a < b) 'a' else 'b'};
@@ -1139,13 +1139,13 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'else');
   }
 
-  test_LITERAL_LIST_withControlFlow() async {
+  Future<void> test_LITERAL_LIST_withControlFlow() async {
     addTestFile('var V = <int>[1, 2, 3];');
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_LIST, '<int>[1, 2, 3]');
   }
 
-  test_LITERAL_MAP_withControlFlow() async {
+  Future<void> test_LITERAL_MAP_withControlFlow() async {
     addTestFile("var V = const <int, String>{1: 'a', 2: 'b', 3: 'c'};");
     await prepareHighlights();
     assertHasStringRegion(HighlightRegionType.LITERAL_MAP,
@@ -1165,7 +1165,7 @@
     super.createProject(packageRoots: packageRoots);
   }
 
-  test_KEYWORD_late() async {
+  Future<void> test_KEYWORD_late() async {
     addTestFile('''
 class C {
   late int x;
@@ -1175,7 +1175,7 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'late');
   }
 
-  test_KEYWORD_required() async {
+  Future<void> test_KEYWORD_required() async {
     addTestFile('''
 void f({required int x}) {}
 ''');
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
index 7b50e07..fb1b6c5 100644
--- a/pkg/analysis_server/test/analysis/notification_implemented_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationImplementedTest);
   });
@@ -122,7 +122,7 @@
     addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('''
 class A {}
 class B extends A {}
@@ -132,7 +132,7 @@
     assertHasImplementedClass('A {');
   }
 
-  test_afterIncrementalResolution() async {
+  Future<void> test_afterIncrementalResolution() async {
     subscribeForImplemented();
     addTestFile('''
 class A {}
@@ -151,7 +151,7 @@
     assertHasImplementedClass('A  {');
   }
 
-  test_class_extended() async {
+  Future<void> test_class_extended() async {
     addTestFile('''
 class A {}
 class B extends A {}
@@ -160,7 +160,7 @@
     assertHasImplementedClass('A {');
   }
 
-  test_class_implemented() async {
+  Future<void> test_class_implemented() async {
     addTestFile('''
 class A {}
 class B implements A {}
@@ -169,7 +169,7 @@
     assertHasImplementedClass('A {');
   }
 
-  test_class_inMixin() async {
+  Future<void> test_class_inMixin() async {
     addTestFile('''
 class A {} // ref
 class B {} // ref
@@ -184,7 +184,7 @@
     assertHasImplementedClass('D {} // ref');
   }
 
-  test_class_mixed() async {
+  Future<void> test_class_mixed() async {
     addTestFile('''
 class A {}
 class B = Object with A;
@@ -193,7 +193,7 @@
     assertHasImplementedClass('A {');
   }
 
-  test_field_withField() async {
+  Future<void> test_field_withField() async {
     addTestFile('''
 class A {
   int f; // A
@@ -206,7 +206,7 @@
     assertHasImplementedMember('f; // A');
   }
 
-  test_field_withGetter() async {
+  Future<void> test_field_withGetter() async {
     addTestFile('''
 class A {
   int f; // A
@@ -219,7 +219,7 @@
     assertHasImplementedMember('f; // A');
   }
 
-  test_field_withSetter() async {
+  Future<void> test_field_withSetter() async {
     addTestFile('''
 class A {
   int f; // A
@@ -232,7 +232,7 @@
     assertHasImplementedMember('f; // A');
   }
 
-  test_getter_withField() async {
+  Future<void> test_getter_withField() async {
     addTestFile('''
 class A {
   get f => null; // A
@@ -245,7 +245,7 @@
     assertHasImplementedMember('f => null; // A');
   }
 
-  test_getter_withGetter() async {
+  Future<void> test_getter_withGetter() async {
     addTestFile('''
 class A {
   get f => null; // A
@@ -258,7 +258,7 @@
     assertHasImplementedMember('f => null; // A');
   }
 
-  test_method_withMethod() async {
+  Future<void> test_method_withMethod() async {
     addTestFile('''
 class A {
   m() {} // A
@@ -272,7 +272,7 @@
     assertNoImplementedMember('m() {} // B');
   }
 
-  test_method_withMethod_indirectSubclass() async {
+  Future<void> test_method_withMethod_indirectSubclass() async {
     addTestFile('''
 class A {
   m() {} // A
@@ -287,7 +287,7 @@
     assertHasImplementedMember('m() {} // A');
   }
 
-  test_method_withMethod_private_differentLib() async {
+  Future<void> test_method_withMethod_private_differentLib() async {
     newFile(join(testFolder, 'lib.dart'), content: r'''
 import 'test.dart';
 class B extends A {
@@ -303,7 +303,7 @@
     assertNoImplementedMember('_m() {} // A');
   }
 
-  test_method_withMethod_private_sameLibrary() async {
+  Future<void> test_method_withMethod_private_sameLibrary() async {
     addTestFile('''
 class A {
   _m() {} // A
@@ -317,7 +317,7 @@
     assertNoImplementedMember('_m() {} // B');
   }
 
-  test_method_withMethod_wasAbstract() async {
+  Future<void> test_method_withMethod_wasAbstract() async {
     addTestFile('''
 abstract class A {
   m(); // A
@@ -330,7 +330,7 @@
     assertHasImplementedMember('m(); // A');
   }
 
-  test_mixin_implemented() async {
+  Future<void> test_mixin_implemented() async {
     addTestFile('''
 mixin M { // ref
   void foo() {} // ref
@@ -347,7 +347,7 @@
     assertNoImplementedMember('bar() {} // ref');
   }
 
-  test_mixin_mixed() async {
+  Future<void> test_mixin_mixed() async {
     addTestFile('''
 mixin M { // ref
   void foo() {} // ref
@@ -364,7 +364,7 @@
     assertNoImplementedMember('bar() {} // ref');
   }
 
-  test_setter_withField() async {
+  Future<void> test_setter_withField() async {
     addTestFile('''
 class A {
   set f(_) {} // A
@@ -377,7 +377,7 @@
     assertHasImplementedMember('f(_) {} // A');
   }
 
-  test_setter_withSetter() async {
+  Future<void> test_setter_withSetter() async {
     addTestFile('''
 class A {
   set f(_) {} // A
@@ -390,7 +390,7 @@
     assertHasImplementedMember('f(_) {} // A');
   }
 
-  test_static_field_instanceStatic() async {
+  Future<void> test_static_field_instanceStatic() async {
     addTestFile('''
 class A {
   int F = 0;
@@ -403,7 +403,7 @@
     assertNoImplementedMember('F = 0');
   }
 
-  test_static_field_staticInstance() async {
+  Future<void> test_static_field_staticInstance() async {
     addTestFile('''
 class A {
   static int F = 0;
@@ -416,7 +416,7 @@
     assertNoImplementedMember('F = 0');
   }
 
-  test_static_field_staticStatic() async {
+  Future<void> test_static_field_staticStatic() async {
     addTestFile('''
 class A {
   static int F = 0;
@@ -429,7 +429,7 @@
     assertNoImplementedMember('F = 0');
   }
 
-  test_static_method_instanceStatic() async {
+  Future<void> test_static_method_instanceStatic() async {
     addTestFile('''
 class A {
   int m() => 0;
@@ -442,7 +442,7 @@
     assertNoImplementedMember('m() => 0');
   }
 
-  test_static_method_staticInstance() async {
+  Future<void> test_static_method_staticInstance() async {
     addTestFile('''
 class A {
   static int m() => 0;
@@ -455,7 +455,7 @@
     assertNoImplementedMember('m() => 0');
   }
 
-  test_static_method_staticStatic() async {
+  Future<void> test_static_method_staticStatic() async {
     addTestFile('''
 class A {
   static int m() => 0;
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 6ddeec3..a76f198 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationNavigationTest);
   });
@@ -206,7 +206,7 @@
     createProject();
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('''
 class AAA {}
 AAA aaa;
@@ -216,7 +216,7 @@
     assertHasRegionTarget('AAA aaa;', 'AAA {}');
   }
 
-  test_annotationConstructor_implicit() async {
+  Future<void> test_annotationConstructor_implicit() async {
     addTestFile('''
 class A {
 }
@@ -229,7 +229,7 @@
     assertHasTarget('A {');
   }
 
-  test_annotationConstructor_importPrefix() async {
+  Future<void> test_annotationConstructor_importPrefix() async {
     newFile(join(testFolder, 'my_annotation.dart'), content: r'''
 library an;
 class MyAnnotation {
@@ -258,7 +258,7 @@
     }
   }
 
-  test_annotationConstructor_named() async {
+  Future<void> test_annotationConstructor_named() async {
     addTestFile('''
 class A {
   const A.named(p);
@@ -278,7 +278,7 @@
     }
   }
 
-  test_annotationConstructor_unnamed() async {
+  Future<void> test_annotationConstructor_unnamed() async {
     addTestFile('''
 class A {
   const A();
@@ -292,7 +292,7 @@
     assertHasTarget('A();', 0);
   }
 
-  test_annotationField() async {
+  Future<void> test_annotationField() async {
     addTestFile('''
 const myan = new Object();
 @myan // ref
@@ -304,7 +304,7 @@
     assertHasTarget('myan = new Object();');
   }
 
-  test_annotationField_importPrefix() async {
+  Future<void> test_annotationField_importPrefix() async {
     newFile(join(testFolder, 'mayn.dart'), content: r'''
 library an;
 const myan = new Object();
@@ -319,7 +319,7 @@
     assertHasRegion('myan // ref');
   }
 
-  test_class_fromSDK() async {
+  Future<void> test_class_fromSDK() async {
     addTestFile('''
 int V = 42;
 ''');
@@ -331,7 +331,7 @@
     expect(target.startColumn, greaterThan(0));
   }
 
-  test_constructor_named() async {
+  Future<void> test_constructor_named() async {
     addTestFile('''
 class A {
   A.named(BBB p) {}
@@ -349,7 +349,7 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
-  test_constructor_unnamed() async {
+  Future<void> test_constructor_unnamed() async {
     addTestFile('''
 class A {
   A(BBB p) {}
@@ -364,7 +364,7 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
-  test_extension_on() async {
+  Future<void> test_extension_on() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 class C //1
@@ -377,7 +377,7 @@
     assertHasTarget('C //1');
   }
 
-  test_factoryRedirectingConstructor_implicit() async {
+  Future<void> test_factoryRedirectingConstructor_implicit() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -390,7 +390,8 @@
     assertHasTarget('B {');
   }
 
-  test_factoryRedirectingConstructor_implicit_withTypeArgument() async {
+  Future<void>
+      test_factoryRedirectingConstructor_implicit_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -409,7 +410,7 @@
     }
   }
 
-  test_factoryRedirectingConstructor_named() async {
+  Future<void> test_factoryRedirectingConstructor_named() async {
     addTestFile('''
 class A {
   factory A() = B.named;
@@ -429,7 +430,8 @@
     }
   }
 
-  test_factoryRedirectingConstructor_named_withTypeArgument() async {
+  Future<void>
+      test_factoryRedirectingConstructor_named_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -454,7 +456,7 @@
     }
   }
 
-  test_factoryRedirectingConstructor_unnamed() async {
+  Future<void> test_factoryRedirectingConstructor_unnamed() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -468,7 +470,8 @@
     assertHasTarget('B() {}', 0);
   }
 
-  test_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
+  Future<void>
+      test_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -489,7 +492,7 @@
     }
   }
 
-  test_factoryRedirectingConstructor_unresolved() async {
+  Future<void> test_factoryRedirectingConstructor_unresolved() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -499,7 +502,7 @@
     // don't check regions, but there should be no exceptions
   }
 
-  test_fieldFormalParameter() async {
+  Future<void> test_fieldFormalParameter() async {
     addTestFile('''
 class AAA {
   int fff = 123;
@@ -510,7 +513,7 @@
     assertHasRegionTarget('fff);', 'fff = 123');
   }
 
-  test_fieldFormalParameter_unresolved() async {
+  Future<void> test_fieldFormalParameter_unresolved() async {
     addTestFile('''
 class AAA {
   AAA(this.fff);
@@ -520,7 +523,7 @@
     assertNoRegion('fff);', 3);
   }
 
-  test_identifier_resolved() async {
+  Future<void> test_identifier_resolved() async {
     addTestFile('''
 class AAA {}
 main() {
@@ -534,7 +537,7 @@
     assertHasRegionTarget('main() {', 'main() {');
   }
 
-  test_identifier_unresolved() async {
+  Future<void> test_identifier_unresolved() async {
     addTestFile('''
 main() {
   print(vvv);
@@ -544,7 +547,7 @@
     assertNoRegionString('vvv');
   }
 
-  test_identifier_whenStrayImportDirective() async {
+  Future<void> test_identifier_whenStrayImportDirective() async {
     addTestFile('''
 main() {
   int aaa = 42;
@@ -556,7 +559,7 @@
     assertHasRegionTarget('aaa);', 'aaa = 42');
   }
 
-  test_inComment() async {
+  Future<void> test_inComment() async {
     addTestFile('''
 class FirstClass {}
 class SecondClass {
@@ -573,7 +576,7 @@
     assertHasRegionTarget('FirstClass(', 'FirstClass {');
   }
 
-  test_instanceCreation_implicit() async {
+  Future<void> test_instanceCreation_implicit() async {
     addTestFile('''
 class A {
 }
@@ -586,7 +589,7 @@
     assertHasTarget('A {');
   }
 
-  test_instanceCreation_implicit_withTypeArgument() async {
+  Future<void> test_instanceCreation_implicit_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B<T> {}
@@ -605,7 +608,7 @@
     }
   }
 
-  test_instanceCreation_named() async {
+  Future<void> test_instanceCreation_named() async {
     addTestFile('''
 class A {
   A.named() {}
@@ -625,7 +628,7 @@
     }
   }
 
-  test_instanceCreation_named_withTypeArgument() async {
+  Future<void> test_instanceCreation_named_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B<T> {
@@ -650,7 +653,7 @@
     }
   }
 
-  test_instanceCreation_unnamed() async {
+  Future<void> test_instanceCreation_unnamed() async {
     addTestFile('''
 class A {
   A() {}
@@ -664,7 +667,7 @@
     assertHasTarget('A() {}', 0);
   }
 
-  test_instanceCreation_unnamed_withTypeArgument() async {
+  Future<void> test_instanceCreation_unnamed_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B<T> {
@@ -685,7 +688,7 @@
     }
   }
 
-  test_instanceCreation_withImportPrefix_named() async {
+  Future<void> test_instanceCreation_withImportPrefix_named() async {
     addTestFile('''
 import 'dart:async' as ppp;
 main() {
@@ -701,7 +704,7 @@
     assertHasRegion('value(42)');
   }
 
-  test_library() async {
+  Future<void> test_library() async {
     addTestFile('''
 library my.lib;
 ''');
@@ -724,7 +727,7 @@
     assertNoRegionAt('TEST');
   }
 
-  test_operator_arithmetic() async {
+  Future<void> test_operator_arithmetic() async {
     addTestFile('''
 class A {
   A operator +(other) => null;
@@ -762,7 +765,7 @@
     assertHasOperatorRegion('/= 6', 2, '/(other) => null', 1);
   }
 
-  test_operator_index() async {
+  Future<void> test_operator_index() async {
     addTestFile('''
 class A {
   A operator +(other) => null;
@@ -788,7 +791,7 @@
     assertHasOperatorRegion('+= 2;', 2, '+(other)', 1);
   }
 
-  test_partOf() async {
+  Future<void> test_partOf() async {
     var libCode = 'library lib; part "test.dart";';
     var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
     addTestFile('part of lib;');
@@ -797,7 +800,7 @@
     assertHasFileTarget(libFile, libCode.indexOf('lib;'), 'lib'.length);
   }
 
-  test_redirectingConstructorInvocation() async {
+  Future<void> test_redirectingConstructorInvocation() async {
     addTestFile('''
 class A {
   A() {}
@@ -820,7 +823,7 @@
     }
   }
 
-  test_string_export() async {
+  Future<void> test_string_export() async {
     var libCode = 'library lib;';
     var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
     addTestFile('export "lib.dart";');
@@ -835,7 +838,7 @@
     assertNoRegionString('"no.dart"');
   }
 
-  test_string_import() async {
+  Future<void> test_string_import() async {
     var libCode = 'library lib;';
     var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
     addTestFile('import "lib.dart";');
@@ -844,7 +847,7 @@
     assertHasFileTarget(libFile, libCode.indexOf('lib;'), 'lib'.length);
   }
 
-  test_string_import_noUri() async {
+  Future<void> test_string_import_noUri() async {
     addTestFile('import ;');
     await prepareNavigation();
     assertNoRegionAt('import ;');
@@ -856,7 +859,7 @@
     assertNoRegionString('"no.dart"');
   }
 
-  test_string_part() async {
+  Future<void> test_string_part() async {
     var unitCode = 'part of lib;  f() {}';
     var unitFile =
         newFile('$projectPath/bin/test_unit.dart', content: unitCode).path;
@@ -869,7 +872,7 @@
     assertHasFileTarget(unitFile, 0, 0);
   }
 
-  test_string_part_invalidUri() async {
+  Future<void> test_string_part_invalidUri() async {
     addTestFile('''
 part ":[invalid]";
 ''');
@@ -886,7 +889,7 @@
     assertNoRegionString('"test_unit.dart"');
   }
 
-  test_superConstructorInvocation() async {
+  Future<void> test_superConstructorInvocation() async {
     addTestFile('''
 class A {
   A() {}
@@ -912,7 +915,7 @@
     }
   }
 
-  test_superConstructorInvocation_synthetic() async {
+  Future<void> test_superConstructorInvocation_synthetic() async {
     addTestFile('''
 class A {
 }
@@ -925,7 +928,7 @@
     assertHasTarget('A {');
   }
 
-  test_targetElement() async {
+  Future<void> test_targetElement() async {
     addTestFile('''
 class AAA {}
 main() {
@@ -937,7 +940,7 @@
     expect(testTarget.kind, ElementKind.CLASS);
   }
 
-  test_type_dynamic() async {
+  Future<void> test_type_dynamic() async {
     addTestFile('''
 main() {
   dynamic v = null;
@@ -947,7 +950,7 @@
     assertNoRegionAt('dynamic');
   }
 
-  test_type_void() async {
+  Future<void> test_type_void() async {
     addTestFile('''
 void main() {
 }
@@ -956,7 +959,7 @@
     assertNoRegionAt('void');
   }
 
-  test_var_declaredVariable() async {
+  Future<void> test_var_declaredVariable() async {
     addTestFile('''
 class C {}
 f(List<C> items) {
@@ -968,7 +971,7 @@
     expect(testTarget.kind, ElementKind.CLASS);
   }
 
-  test_var_localVariable_multiple_inferred_different() async {
+  Future<void> test_var_localVariable_multiple_inferred_different() async {
     addTestFile('''
 class A {}
 class B {}
@@ -980,7 +983,7 @@
     assertNoRegionAt('var');
   }
 
-  test_var_localVariable_multiple_inferred_same() async {
+  Future<void> test_var_localVariable_multiple_inferred_same() async {
     addTestFile('''
 class C {}
 void f() {
@@ -992,7 +995,7 @@
     expect(testTarget.kind, ElementKind.CLASS);
   }
 
-  test_var_localVariable_single_inferred() async {
+  Future<void> test_var_localVariable_single_inferred() async {
     addTestFile('''
 class C {}
 f() {
@@ -1004,7 +1007,7 @@
     expect(testTarget.kind, ElementKind.CLASS);
   }
 
-  test_var_localVariable_single_notInferred() async {
+  Future<void> test_var_localVariable_single_notInferred() async {
     addTestFile('''
 f() {
   var x;
@@ -1014,7 +1017,7 @@
     assertNoRegionAt('var');
   }
 
-  test_var_topLevelVariable_multiple_inferred_different() async {
+  Future<void> test_var_topLevelVariable_multiple_inferred_different() async {
     addTestFile('''
 class A {}
 class B {}
@@ -1024,7 +1027,7 @@
     assertNoRegionAt('var');
   }
 
-  test_var_topLevelVariable_multiple_inferred_same() async {
+  Future<void> test_var_topLevelVariable_multiple_inferred_same() async {
     addTestFile('''
 class C {}
 var a = new C(), b = new C();
@@ -1034,7 +1037,7 @@
     expect(testTarget.kind, ElementKind.CLASS);
   }
 
-  test_var_topLevelVariable_single_inferred() async {
+  Future<void> test_var_topLevelVariable_single_inferred() async {
     addTestFile('''
 class C {}
 var c = new C();
@@ -1044,7 +1047,7 @@
     expect(testTarget.kind, ElementKind.CLASS);
   }
 
-  test_var_topLevelVariable_single_notInferred() async {
+  Future<void> test_var_topLevelVariable_single_notInferred() async {
     addTestFile('''
 var x;
 ''');
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index c47b466..ffa0f8b 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationOccurrencesTest);
   });
@@ -99,7 +99,7 @@
     createProject();
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('''
 main() {
   var vvv = 42;
@@ -115,7 +115,7 @@
     assertHasOffset('vvv);');
   }
 
-  test_field() async {
+  Future<void> test_field() async {
     addTestFile('''
 class A {
   int fff;
@@ -134,7 +134,7 @@
     assertHasOffset('fff); // print');
   }
 
-  test_field_unresolved() async {
+  Future<void> test_field_unresolved() async {
     addTestFile('''
 class A {
   A(this.noSuchField);
@@ -144,7 +144,7 @@
     await prepareOccurrences();
   }
 
-  test_localVariable() async {
+  Future<void> test_localVariable() async {
     addTestFile('''
 main() {
   var vvv = 42;
@@ -161,7 +161,7 @@
     assertHasOffset('vvv);');
   }
 
-  test_memberField() async {
+  Future<void> test_memberField() async {
     addTestFile('''
 class A<T> {
   T fff;
@@ -180,7 +180,7 @@
     assertHasOffset('fff = 2;');
   }
 
-  test_memberMethod() async {
+  Future<void> test_memberMethod() async {
     addTestFile('''
 class A<T> {
   T mmm() {}
@@ -199,7 +199,7 @@
     assertHasOffset('mmm(); // b');
   }
 
-  test_topLevelVariable() async {
+  Future<void> test_topLevelVariable() async {
     addTestFile('''
 var VVV = 1;
 main() {
@@ -214,7 +214,7 @@
     assertHasOffset('VVV);');
   }
 
-  test_type_class() async {
+  Future<void> test_type_class() async {
     addTestFile('''
 main() {
   int a = 1;
@@ -233,7 +233,7 @@
     assertHasOffset('int VVV');
   }
 
-  test_type_dynamic() async {
+  Future<void> test_type_dynamic() async {
     addTestFile('''
 main() {
   dynamic a = 1;
@@ -246,7 +246,7 @@
     findRegion(offset, 'dynamic'.length, false);
   }
 
-  test_type_void() async {
+  Future<void> test_type_void() async {
     addTestFile('''
 void main() {
 }
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index 3886d4d..35df343 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationOutlineTest);
   });
@@ -59,7 +59,7 @@
     createProject();
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('''
 class AAA {
 }
@@ -74,7 +74,7 @@
     expect(outlines, hasLength(2));
   }
 
-  test_libraryName_hasLibraryDirective() async {
+  Future<void> test_libraryName_hasLibraryDirective() async {
     addTestFile('''
 library my.lib;
 ''');
@@ -104,7 +104,7 @@
     expect(libraryName, 'my.lib');
   }
 
-  test_libraryName_noDirectives() async {
+  Future<void> test_libraryName_noDirectives() async {
     addTestFile('''
 class A {}
 ''');
@@ -113,7 +113,7 @@
     expect(libraryName, isNull);
   }
 
-  test_subscribeWhenCachedResultIsAvailable() async {
+  Future<void> test_subscribeWhenCachedResultIsAvailable() async {
     // https://github.com/dart-lang/sdk/issues/30238
     // We need to get notifications for new subscriptions even when the
     // file is a priority file, and there is a cached result available.
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index 0f276c5..29e5b5f 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -12,7 +12,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationOverridesTest);
   });
@@ -139,7 +139,7 @@
     createProject();
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -155,7 +155,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  test_BAD_fieldByMethod() async {
+  Future<void> test_BAD_fieldByMethod() async {
     addTestFile('''
 class A {
   int fff; // in A
@@ -168,7 +168,7 @@
     assertNoOverride('fff() {} // in B');
   }
 
-  test_BAD_getterByMethod() async {
+  Future<void> test_BAD_getterByMethod() async {
     addTestFile('''
 class A {
   get fff => null;
@@ -181,7 +181,7 @@
     assertNoOverride('fff() {}');
   }
 
-  test_BAD_getterBySetter() async {
+  Future<void> test_BAD_getterBySetter() async {
     addTestFile('''
 class A {
   get fff => null;
@@ -194,7 +194,7 @@
     assertNoOverride('fff(x) {}');
   }
 
-  test_BAD_methodByField() async {
+  Future<void> test_BAD_methodByField() async {
     addTestFile('''
 class A {
   fff() {} // in A
@@ -207,7 +207,7 @@
     assertNoOverride('fff; // in B');
   }
 
-  test_BAD_methodByGetter() async {
+  Future<void> test_BAD_methodByGetter() async {
     addTestFile('''
 class A {
   fff() {}
@@ -220,7 +220,7 @@
     assertNoOverride('fff => null');
   }
 
-  test_BAD_methodBySetter() async {
+  Future<void> test_BAD_methodBySetter() async {
     addTestFile('''
 class A {
   fff(x) {} // A
@@ -233,7 +233,7 @@
     assertNoOverride('fff(x) {} // B');
   }
 
-  test_BAD_privateByPrivate_inDifferentLib() async {
+  Future<void> test_BAD_privateByPrivate_inDifferentLib() async {
     newFile(join(testFolder, 'lib.dart'), content: r'''
 class A {
   void _m() {}
@@ -249,7 +249,7 @@
     assertNoOverride('_m() {} // in B');
   }
 
-  test_BAD_setterByGetter() async {
+  Future<void> test_BAD_setterByGetter() async {
     addTestFile('''
 class A {
   set fff(x) {}
@@ -262,7 +262,7 @@
     assertNoOverride('fff => null;');
   }
 
-  test_BAD_setterByMethod() async {
+  Future<void> test_BAD_setterByMethod() async {
     addTestFile('''
 class A {
   set fff(x) {} // A
@@ -275,7 +275,7 @@
     assertNoOverride('fff(x) {} // B');
   }
 
-  test_definedInInterface_ofInterface() async {
+  Future<void> test_definedInInterface_ofInterface() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -291,7 +291,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  test_definedInInterface_ofSuper() async {
+  Future<void> test_definedInInterface_ofSuper() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -307,7 +307,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  test_inMixin_interface_method_direct_single() async {
+  Future<void> test_inMixin_interface_method_direct_single() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -323,7 +323,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  test_inMixin_superclassConstraint_method_direct() async {
+  Future<void> test_inMixin_superclassConstraint_method_direct() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -339,7 +339,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_interface_method_direct_multiple() async {
+  Future<void> test_interface_method_direct_multiple() async {
     addTestFile('''
 class IA {
   m() {} // in IA
@@ -358,7 +358,7 @@
     assertHasInterfaceMember('m() {} // in IB');
   }
 
-  test_interface_method_direct_single() async {
+  Future<void> test_interface_method_direct_single() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -373,7 +373,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  test_interface_method_indirect_single() async {
+  Future<void> test_interface_method_indirect_single() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -390,7 +390,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  test_interface_stopWhenFound() async {
+  Future<void> test_interface_stopWhenFound() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -408,7 +408,7 @@
     assertHasInterfaceMember('m() {} // in B');
   }
 
-  test_mix_sameMethod() async {
+  Future<void> test_mix_sameMethod() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -425,7 +425,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_mix_sameMethod_Object_hashCode() async {
+  Future<void> test_mix_sameMethod_Object_hashCode() async {
     addTestFile('''
 class A {}
 abstract class B {}
@@ -439,7 +439,7 @@
     expect(overrideObject.interfaceMembers, isNull);
   }
 
-  test_mixin_method_direct() async {
+  Future<void> test_mixin_method_direct() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -454,7 +454,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_mixin_method_indirect() async {
+  Future<void> test_mixin_method_indirect() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -471,7 +471,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_mixin_method_indirect2() async {
+  Future<void> test_mixin_method_indirect2() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -488,7 +488,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_staticMembers() async {
+  Future<void> test_staticMembers() async {
     addTestFile('''
 class A {
   static int F = 0;
@@ -507,7 +507,7 @@
     expect(overridesList, isEmpty);
   }
 
-  test_super_fieldByField() async {
+  Future<void> test_super_fieldByField() async {
     addTestFile('''
 class A {
   int fff; // in A
@@ -522,7 +522,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_fieldByGetter() async {
+  Future<void> test_super_fieldByGetter() async {
     addTestFile('''
 class A {
   int fff; // in A
@@ -537,7 +537,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_fieldBySetter() async {
+  Future<void> test_super_fieldBySetter() async {
     addTestFile('''
 class A {
   int fff; // in A
@@ -552,7 +552,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_getterByField() async {
+  Future<void> test_super_getterByField() async {
     addTestFile('''
 class A {
   get fff => 0; // in A
@@ -568,7 +568,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_getterByGetter() async {
+  Future<void> test_super_getterByGetter() async {
     addTestFile('''
 class A {
   get fff => 0; // in A
@@ -583,7 +583,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_method_direct() async {
+  Future<void> test_super_method_direct() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -598,7 +598,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_method_indirect() async {
+  Future<void> test_super_method_indirect() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -615,7 +615,7 @@
     assertNoInterfaceMembers();
   }
 
-  test_super_method_privateByPrivate() async {
+  Future<void> test_super_method_privateByPrivate() async {
     addTestFile('''
 class A {
   _m() {} // in A
@@ -643,7 +643,7 @@
     // must finish
   }
 
-  test_super_setterBySetter() async {
+  Future<void> test_super_setterBySetter() async {
     addTestFile('''
 class A {
   set fff(x) {} // in A
diff --git a/pkg/analysis_server/test/analysis/reanalyze_test.dart b/pkg/analysis_server/test/analysis/reanalyze_test.dart
index 356a623..a5c4aff 100644
--- a/pkg/analysis_server/test/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/analysis/reanalyze_test.dart
@@ -11,7 +11,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
   });
@@ -29,7 +29,7 @@
     }
   }
 
-  test_reanalyze() async {
+  Future<void> test_reanalyze() async {
     var b = convertPath('/other/b.dart');
 
     newFile(testFile, content: r'''
diff --git a/pkg/analysis_server/test/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
index 62a3fcd..5c6df7dc 100644
--- a/pkg/analysis_server/test/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
@@ -13,7 +13,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetPriorityFilesTest);
   });
@@ -30,13 +30,13 @@
     createProject();
   }
 
-  test_fileDoesNotExist() async {
+  Future<void> test_fileDoesNotExist() async {
     String file = convertPath('$projectPath/doesNotExist.dart');
     Response response = await _setPriorityFile(file);
     expect(response, isResponseSuccess('0'));
   }
 
-  test_fileInAnalysisRoot() async {
+  Future<void> test_fileInAnalysisRoot() async {
     addTestFile('');
     // set priority files
     Response response = await _setPriorityFile(testFile);
@@ -45,7 +45,7 @@
     _verifyPriorityFiles(testFile);
   }
 
-  test_fileInSdk() async {
+  Future<void> test_fileInSdk() async {
     addTestFile('');
     // set priority files
     String filePath = convertPath('/lib/convert/convert.dart');
@@ -55,14 +55,14 @@
     _verifyPriorityFiles(filePath);
   }
 
-  test_fileNotInAnalysisRoot() async {
+  Future<void> test_fileNotInAnalysisRoot() async {
     String path = convertPath('/other/file.dart');
     newFile(path);
     await _setPriorityFile(path);
     _verifyPriorityFiles(path);
   }
 
-  test_ignoredInAnalysisOptions() async {
+  Future<void> test_ignoredInAnalysisOptions() async {
     String sampleFile = convertPath('$projectPath/samples/sample.dart');
     newFile('$projectPath/.analysis_options', content: r'''
 analyzer:
@@ -75,7 +75,7 @@
     _verifyPriorityFiles(sampleFile);
   }
 
-  test_ignoredInAnalysisOptions_inChildContext() async {
+  Future<void> test_ignoredInAnalysisOptions_inChildContext() async {
     newFile('$projectPath/.packages');
     newFile('$projectPath/child/.packages');
     String sampleFile = convertPath('$projectPath/child/samples/sample.dart');
@@ -90,7 +90,7 @@
     _verifyPriorityFiles(sampleFile);
   }
 
-  test_ignoredInAnalysisOptions_inRootContext() async {
+  Future<void> test_ignoredInAnalysisOptions_inRootContext() async {
     newFile('$projectPath/.packages');
     newFile('$projectPath/child/.packages');
     String sampleFile = convertPath('$projectPath/child/samples/sample.dart');
@@ -105,7 +105,7 @@
     _verifyPriorityFiles(sampleFile);
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = AnalysisSetPriorityFilesParams(['test.dart']).toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -114,7 +114,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         AnalysisSetPriorityFilesParams([convertPath('/foo/../bar/test.dart')])
             .toRequest('0');
@@ -125,7 +125,7 @@
     );
   }
 
-  test_sentToPlugins() async {
+  Future<void> test_sentToPlugins() async {
     addTestFile('');
     // set priority files
     Response response = await _setPriorityFile(testFile);
@@ -137,7 +137,7 @@
     expect(params.files, <String>[testFile]);
   }
 
-  _setPriorityFile(String file) async {
+  Future<Response> _setPriorityFile(String file) async {
     Request request =
         AnalysisSetPriorityFilesParams(<String>[file]).toRequest('0');
     return await serverChannel.sendRequest(request);
diff --git a/pkg/analysis_server/test/analysis/test_all.dart b/pkg/analysis_server/test/analysis/test_all.dart
index bd8d396..702a96c 100644
--- a/pkg/analysis_server/test/analysis/test_all.dart
+++ b/pkg/analysis_server/test/analysis/test_all.dart
@@ -25,7 +25,7 @@
 import 'set_priority_files_test.dart' as set_priority_files;
 import 'update_content_test.dart' as update_content;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     get_errors.main();
     get_hover.main();
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index 832daf8..ddfe39d 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -16,7 +16,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
   });
@@ -44,7 +44,7 @@
     }
   }
 
-  test_illegal_ChangeContentOverlay() {
+  void test_illegal_ChangeContentOverlay() {
     // It should be illegal to send a ChangeContentOverlay for a file that
     // doesn't have an overlay yet.
     createProject();
@@ -61,7 +61,7 @@
     }
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = AnalysisUpdateContentParams(
       {'test.dart': AddContentOverlay('')},
     ).toRequest('0');
@@ -72,7 +72,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = AnalysisUpdateContentParams(
       {convertPath('/foo/../bar/test.dart'): AddContentOverlay('')},
     ).toRequest('0');
@@ -83,7 +83,7 @@
     );
   }
 
-  test_multiple_contexts() async {
+  Future<void> test_multiple_contexts() async {
     String project1path = convertPath('/project1');
     String project2path = convertPath('/project2');
     String fooPath = newFile('/project1/foo.dart', content: '''
@@ -126,7 +126,7 @@
   }
 
   @failingTest
-  test_overlay_addPreviouslyImported() async {
+  Future<void> test_overlay_addPreviouslyImported() async {
     // The list of errors doesn't include errors for '/project/target.dart'.
     Folder project = newFolder('/project');
     handleSuccessfulRequest(
@@ -150,7 +150,7 @@
     });
   }
 
-  test_overlayOnly() async {
+  Future<void> test_overlayOnly() async {
     var filePath1 = convertPath('/User/project1/test.dart');
     var filePath2 = convertPath('/User/project2/test.dart');
     var folderPath1 = newFolder('/User/project1').path;
@@ -184,7 +184,7 @@
   }
 
   @failingTest
-  test_sendNoticesAfterNopChange() async {
+  Future<void> test_sendNoticesAfterNopChange() async {
     // The errors are empty on the last line.
     createProject();
     addTestFile('');
@@ -204,7 +204,7 @@
   }
 
   @failingTest
-  test_sendNoticesAfterNopChange_flushedUnit() async {
+  Future<void> test_sendNoticesAfterNopChange_flushedUnit() async {
     // The list of errors is empty on the last line.
     createProject();
     addTestFile('');
@@ -223,7 +223,7 @@
     expect(filesErrors, isNotEmpty);
   }
 
-  test_sentToPlugins() {
+  void test_sentToPlugins() {
     String filePath = convertPath('/project/target.dart');
     String fileContent = 'import "none.dart";';
     //
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 56bba4d..e984cce 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -19,7 +19,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisServerTest);
   });
@@ -129,7 +129,8 @@
     });
   }
 
-  test_setAnalysisSubscriptions_fileInIgnoredFolder_newOptions() async {
+  Future<void>
+      test_setAnalysisSubscriptions_fileInIgnoredFolder_newOptions() async {
     String path = convertPath('/project/samples/sample.dart');
     newFile(path);
     newFile('/project/analysis_options.yaml', content: r'''
@@ -149,7 +150,8 @@
     }), isTrue);
   }
 
-  test_setAnalysisSubscriptions_fileInIgnoredFolder_oldOptions() async {
+  Future<void>
+      test_setAnalysisSubscriptions_fileInIgnoredFolder_oldOptions() async {
     String path = convertPath('/project/samples/sample.dart');
     newFile(path);
     newFile('/project/.analysis_options', content: r'''
diff --git a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
index 1f181bc..ee38485 100644
--- a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
+++ b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
@@ -12,7 +12,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ByteStreamClientChannelTest);
     defineReflectiveTests(ByteStreamServerChannelTest);
@@ -50,7 +50,7 @@
     channel = ByteStreamClientChannel(inputStream.stream, outputSink);
   }
 
-  test_close() {
+  Future<void> test_close() {
     bool doneCalled = false;
     bool closeCalled = false;
     // add listener so that outputSink will trigger done/close futures
@@ -67,7 +67,7 @@
     });
   }
 
-  test_listen_notification() {
+  Future<void> test_listen_notification() {
     List<Notification> notifications = [];
     channel.notificationStream.forEach((n) => notifications.add(n));
     inputSink.writeln('{"event":"server.connected"}');
@@ -77,7 +77,7 @@
     });
   }
 
-  test_listen_response() {
+  Future<void> test_listen_response() {
     List<Response> responses = [];
     channel.responseStream.forEach((n) => responses.add(n));
     inputSink.writeln('{"id":"72"}');
@@ -87,7 +87,7 @@
     });
   }
 
-  test_sendRequest() {
+  Future<void> test_sendRequest() {
     int assertCount = 0;
     Request request = Request('72', 'foo.bar');
     outputLineStream.first.then((line) => json.decode(line)).then((json) {
@@ -161,13 +161,13 @@
     });
   }
 
-  test_closed() {
+  Future<void> test_closed() {
     return inputSink
         .close()
         .then((_) => channel.closed.timeout(Duration(seconds: 1)));
   }
 
-  test_listen_invalidJson() {
+  Future<void> test_listen_invalidJson() {
     inputSink.writeln('{"id":');
     return inputSink
         .flush()
@@ -180,7 +180,7 @@
     });
   }
 
-  test_listen_invalidRequest() {
+  Future<void> test_listen_invalidRequest() {
     inputSink.writeln('{"id":"0"}');
     return inputSink
         .flush()
@@ -193,13 +193,13 @@
     });
   }
 
-  test_listen_streamDone() {
+  Future<void> test_listen_streamDone() {
     return inputSink
         .close()
         .then((_) => doneFuture.timeout(Duration(seconds: 1)));
   }
 
-  test_listen_streamError() {
+  Future<void> test_listen_streamError() {
     var error = Error();
     inputSink.addError(error);
     return inputSink
@@ -210,7 +210,7 @@
     });
   }
 
-  test_listen_wellFormedRequest() {
+  Future<void> test_listen_wellFormedRequest() {
     inputSink.writeln('{"id":"0","method":"server.version"}');
     return inputSink
         .flush()
@@ -221,7 +221,7 @@
     });
   }
 
-  test_sendNotification() {
+  Future<void> test_sendNotification() {
     channel.sendNotification(Notification('foo'));
     return outputLineStream.first
         .timeout(Duration(seconds: 1))
@@ -233,7 +233,7 @@
     });
   }
 
-  test_sendNotification_exceptionInSink() async {
+  Future<void> test_sendNotification_exceptionInSink() async {
     // This IOSink asynchronously throws an exception on any writeln().
     var outputSink = _IOSinkMock();
 
@@ -247,7 +247,7 @@
     await channel.closed;
   }
 
-  test_sendResponse() {
+  Future<void> test_sendResponse() {
     channel.sendResponse(Response('foo'));
     return outputLineStream.first
         .timeout(Duration(seconds: 1))
diff --git a/pkg/analysis_server/test/channel/test_all.dart b/pkg/analysis_server/test/channel/test_all.dart
index 3edd228..b712e00 100644
--- a/pkg/analysis_server/test/channel/test_all.dart
+++ b/pkg/analysis_server/test/channel/test_all.dart
@@ -6,10 +6,7 @@
 
 import 'byte_stream_channel_test.dart' as byte_stream_channel_test;
 
-/**
- * Utility for manually running all tests.
- */
-main() {
+void main() {
   group('computer', () {
     byte_stream_channel_test.main();
   });
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index ec85f5e..add1c6d 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -9,7 +9,7 @@
 
 import 'completion_test_support.dart';
 
-main() {
+void main() {
   CompletionTestBuilder builder = CompletionTestBuilder();
   builder.buildAll();
 }
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index f4e49b7..09eb049 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -77,7 +77,7 @@
         .toList();
   }
 
-  runTest(LocationSpec spec, [Map<String, String> extraFiles]) {
+  Future runTest(LocationSpec spec, [Map<String, String> extraFiles]) {
     super.setUp();
     return Future(() {
       String content = spec.source;
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index bf3f07d..b9a8244 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -40,7 +40,7 @@
 
 import 'src/plugin/plugin_manager_test.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AbstractContextManagerTest);
     defineReflectiveTests(ContextManagerWithNewOptionsTest);
@@ -87,7 +87,7 @@
   }
 
   @failingTest
-  test_embedder_added() async {
+  Future<void> test_embedder_added() async {
     // NoSuchMethodError: The getter 'apiSignature' was called on null.
     // Receiver: null
     // Tried calling: apiSignature
@@ -144,7 +144,7 @@
     expect(sourceFactory.forUri('dart:typed_data'), isNotNull);
   }
 
-  test_embedder_packagespec() async {
+  Future<void> test_embedder_packagespec() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -220,7 +220,7 @@
     expect(manager.isInAnalysisRoot('/test.dart'), isFalse);
   }
 
-  test_packagesFolder_areAnalyzed() {
+  Future<void> test_packagesFolder_areAnalyzed() {
     // create a context with a pubspec.yaml file
     String pubspecPath = join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec');
@@ -237,7 +237,7 @@
     });
   }
 
-  test_path_filter() async {
+  Future<void> test_path_filter() async {
     // Setup context.
     Folder root = resourceProvider.newFolder(projPath);
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
@@ -263,7 +263,7 @@
     expect(filePaths, contains(convertPath('/my/proj/lib/main.dart')));
   }
 
-  test_refresh_folder_with_packagespec() {
+  Future<void> test_refresh_folder_with_packagespec() {
     // create a context with a .packages file
     String packagespecFile = join(projPath, '.packages');
     resourceProvider.newFile(packagespecFile, '');
@@ -282,7 +282,7 @@
   // TODO(paulberry): This test only tests PackagesFileDisposition.
   // Once http://dartbug.com/23909 is fixed, add a test for sdk extensions
   // and PackageMapDisposition.
-  test_refresh_folder_with_packagespec_subfolders() {
+  Future<void> test_refresh_folder_with_packagespec_subfolders() {
     // Create a folder with no .packages file, containing two subfolders with
     // .packages files.
     String subdir1Path = join(projPath, 'subdir1');
@@ -307,7 +307,7 @@
     });
   }
 
-  test_refresh_folder_with_pubspec() {
+  Future<void> test_refresh_folder_with_pubspec() {
     // create a context with a pubspec.yaml file
     String pubspecPath = join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec');
@@ -323,7 +323,7 @@
     });
   }
 
-  test_refresh_folder_with_pubspec_subfolders() {
+  Future<void> test_refresh_folder_with_pubspec_subfolders() {
     // Create a folder with no pubspec.yaml, containing two subfolders with
     // pubspec.yaml files.
     String subdir1Path = join(projPath, 'subdir1');
@@ -348,7 +348,7 @@
     });
   }
 
-  test_refresh_oneContext() {
+  Future<void> test_refresh_oneContext() {
     // create two contexts with pubspec.yaml files
     String pubspecPath = join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec1');
@@ -1085,7 +1085,7 @@
     callbacks.assertContextFiles(project, [fileA]);
   }
 
-  test_watch_addDummyLink() {
+  Future<void> test_watch_addDummyLink() {
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
     expect(callbacks.currentFilePaths, isEmpty);
@@ -1098,7 +1098,7 @@
     });
   }
 
-  test_watch_addFile() {
+  Future<void> test_watch_addFile() {
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
     expect(callbacks.currentFilePaths, hasLength(0));
@@ -1113,7 +1113,7 @@
     });
   }
 
-  test_watch_addFile_excluded() {
+  Future<void> test_watch_addFile_excluded() {
     // prepare paths
     String project = convertPath('/project');
     String folderA = convertPath('$project/aaa');
@@ -1134,7 +1134,7 @@
     });
   }
 
-  test_watch_addFile_inDocFolder_inner() {
+  Future<void> test_watch_addFile_inDocFolder_inner() {
     // prepare paths
     String project = convertPath('/project');
     String fileA = convertPath('$project/a.dart');
@@ -1153,7 +1153,7 @@
     });
   }
 
-  test_watch_addFile_inDocFolder_topLevel() {
+  Future<void> test_watch_addFile_inDocFolder_topLevel() {
     // prepare paths
     String project = convertPath('/project');
     String fileA = convertPath('$project/a.dart');
@@ -1172,7 +1172,7 @@
     });
   }
 
-  test_watch_addFile_pathContainsDotFile() async {
+  Future<void> test_watch_addFile_pathContainsDotFile() async {
     // If a file is added and the path to it (relative to the context root)
     // contains a folder whose name begins with '.', then the file is ignored.
     String project = convertPath('/project');
@@ -1188,7 +1188,7 @@
     callbacks.assertContextFiles(project, [fileA]);
   }
 
-  test_watch_addFile_rootPathContainsDotFile() async {
+  Future<void> test_watch_addFile_rootPathContainsDotFile() async {
     // If a file is added and the path to the context contains a folder whose
     // name begins with '.', then the file is not ignored.
     String project = convertPath('/.pub/project');
@@ -1204,7 +1204,7 @@
     callbacks.assertContextFiles(project, [fileA, fileB]);
   }
 
-  test_watch_addFileInSubfolder() {
+  Future<void> test_watch_addFileInSubfolder() {
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
     expect(callbacks.currentFilePaths, hasLength(0));
@@ -1219,7 +1219,7 @@
     });
   }
 
-  test_watch_addPackagespec_toRoot() {
+  Future<void> test_watch_addPackagespec_toRoot() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1241,7 +1241,7 @@
     });
   }
 
-  test_watch_addPackagespec_toSubFolder() {
+  Future<void> test_watch_addPackagespec_toSubFolder() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1265,7 +1265,7 @@
     });
   }
 
-  test_watch_addPackagespec_toSubFolder_ofSubFolder() {
+  Future<void> test_watch_addPackagespec_toSubFolder_ofSubFolder() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1291,7 +1291,7 @@
     });
   }
 
-  test_watch_addPackagespec_toSubFolder_withPubspec() {
+  Future<void> test_watch_addPackagespec_toSubFolder_withPubspec() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1320,7 +1320,7 @@
     });
   }
 
-  test_watch_addPubspec_toRoot() {
+  Future<void> test_watch_addPubspec_toRoot() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1340,7 +1340,7 @@
     });
   }
 
-  test_watch_addPubspec_toSubFolder() {
+  Future<void> test_watch_addPubspec_toSubFolder() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1364,7 +1364,7 @@
     });
   }
 
-  test_watch_addPubspec_toSubFolder_ofSubFolder() {
+  Future<void> test_watch_addPubspec_toSubFolder_ofSubFolder() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1390,7 +1390,7 @@
     });
   }
 
-  test_watch_deleteFile() {
+  Future<void> test_watch_deleteFile() {
     String filePath = join(projPath, 'foo.dart');
     // add root with a file
     File file = resourceProvider.newFile(filePath, 'contents');
@@ -1411,7 +1411,7 @@
     });
   }
 
-  test_watch_deleteFolder() {
+  Future<void> test_watch_deleteFolder() {
     String filePath = join(projPath, 'foo.dart');
     // add root with a file
     File file = resourceProvider.newFile(filePath, 'contents');
@@ -1432,7 +1432,7 @@
     });
   }
 
-  test_watch_deletePackagespec_fromRoot() {
+  Future<void> test_watch_deletePackagespec_fromRoot() {
     // prepare paths
     String root = convertPath('/root');
     String rootPubspec = convertPath('$root/.packages');
@@ -1452,7 +1452,7 @@
     });
   }
 
-  test_watch_deletePackagespec_fromSubFolder() {
+  Future<void> test_watch_deletePackagespec_fromSubFolder() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1477,7 +1477,7 @@
     });
   }
 
-  test_watch_deletePackagespec_fromSubFolder_withPubspec() {
+  Future<void> test_watch_deletePackagespec_fromSubFolder_withPubspec() {
     // prepare paths:
     //
     // root
@@ -1515,7 +1515,7 @@
     });
   }
 
-  test_watch_deletePubspec_fromRoot() {
+  Future<void> test_watch_deletePubspec_fromRoot() {
     // prepare paths
     String root = convertPath('/root');
     String rootPubspec = convertPath('$root/pubspec.yaml');
@@ -1535,7 +1535,7 @@
     });
   }
 
-  test_watch_deletePubspec_fromSubFolder() {
+  Future<void> test_watch_deletePubspec_fromSubFolder() {
     // prepare paths
     String root = convertPath('/root');
     String rootFile = convertPath('$root/root.dart');
@@ -1560,7 +1560,7 @@
     });
   }
 
-  test_watch_modifyFile() {
+  Future<void> test_watch_modifyFile() {
     String filePath = join(projPath, 'foo.dart');
     // add root with a file
     resourceProvider.newFile(filePath, 'contents');
@@ -1578,7 +1578,7 @@
     });
   }
 
-  test_watch_modifyPackagespec() {
+  Future<void> test_watch_modifyPackagespec() {
     String packagesPath = convertPath('$projPath/.packages');
     String filePath = convertPath('$projPath/bin/main.dart');
 
@@ -1732,7 +1732,7 @@
 
   @override
   @failingTest
-  test_analysis_options_parse_failure() async {
+  Future<void> test_analysis_options_parse_failure() async {
     // We have lost the ability to detect errors of this form.
     return super.test_analysis_options_parse_failure();
   }
@@ -1751,7 +1751,7 @@
     deleteFile('$projPath/$optionsFileName');
   }
 
-  test_analysis_options_file_delete() async {
+  Future<void> test_analysis_options_file_delete() async {
     // Setup analysis options
     newFile('$projPath/$optionsFileName', content: r'''
 embedded_libs:
@@ -1782,7 +1782,7 @@
   }
 
   @failingTest
-  test_analysis_options_file_delete_with_embedder() async {
+  Future<void> test_analysis_options_file_delete_with_embedder() async {
     // This fails because the ContextBuilder doesn't pick up the strongMode
     // flag from the embedder.yaml file.
     // Setup _embedder.yaml.
@@ -1831,7 +1831,7 @@
     expect(getProcessor(missing_return).severity, isNull);
   }
 
-  test_analysis_options_include() async {
+  Future<void> test_analysis_options_include() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -1860,7 +1860,7 @@
     expect(lints[0].name, 'camel_case_types');
   }
 
-  test_analysis_options_include_package() async {
+  Future<void> test_analysis_options_include_package() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -1893,7 +1893,7 @@
     expect(lints[0].name, 'camel_case_types');
   }
 
-  test_analysis_options_parse_failure() async {
+  Future<void> test_analysis_options_parse_failure() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -1915,7 +1915,7 @@
     expect(errors[errors.keys.first][optionsFilePath], hasLength(1));
   }
 
-  test_deleteRoot_hasAnalysisOptions() async {
+  Future<void> test_deleteRoot_hasAnalysisOptions() async {
     newFile('$projPath/$optionsFileName');
 
     // Add the root.
@@ -1929,7 +1929,7 @@
   }
 
   @failingTest
-  test_embedder_options() async {
+  Future<void> test_embedder_options() async {
     // This fails because the ContextBuilder doesn't pick up the strongMode
     // flag from the embedder.yaml file.
     // Create files.
@@ -2015,7 +2015,7 @@
     expect(source.fullName, '/my/proj/sdk_ext/entry.dart');
   }
 
-  test_error_filter_analysis_option() async {
+  Future<void> test_error_filter_analysis_option() async {
     // Create files.
     newFile('$projPath/$optionsFileName', content: r'''
 analyzer:
@@ -2030,7 +2030,7 @@
     expect(getProcessor(unused_local_variable).severity, isNull);
   }
 
-  test_error_filter_analysis_option_multiple_filters() async {
+  Future<void> test_error_filter_analysis_option_multiple_filters() async {
     // Create files.
     newFile('$projPath/$optionsFileName', content: r'''
 analyzer:
@@ -2048,7 +2048,7 @@
     expect(getProcessor(unused_local_variable).severity, ErrorSeverity.ERROR);
   }
 
-  test_error_filter_analysis_option_synonyms() async {
+  Future<void> test_error_filter_analysis_option_synonyms() async {
     // Create files.
     newFile('$projPath/$optionsFileName', content: r'''
 analyzer:
@@ -2064,7 +2064,7 @@
     expect(errorProcessors, hasLength(2));
   }
 
-  test_error_filter_analysis_option_unpsecified() async {
+  Future<void> test_error_filter_analysis_option_unpsecified() async {
     // Create files.
     newFile('$projPath/$optionsFileName', content: r'''
 analyzer:
@@ -2078,7 +2078,7 @@
     expect(errorProcessors, isEmpty);
   }
 
-  test_non_analyzable_files_not_considered() async {
+  Future<void> test_non_analyzable_files_not_considered() async {
     // Set up project and get a reference to the driver.
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     Folder projectFolder = resourceProvider.newFolder(projPath);
@@ -2100,7 +2100,7 @@
   }
 
   @failingTest
-  test_optionsFile_update_strongMode() async {
+  Future<void> test_optionsFile_update_strongMode() async {
     // It appears that this fails because we are not correctly updating the
     // analysis options in the driver when the file is modified.
     //return super.test_optionsFile_update_strongMode();
@@ -2154,7 +2154,7 @@
   }
 
   @failingTest
-  test_path_filter_analysis_option() async {
+  Future<void> test_path_filter_analysis_option() async {
     // This fails because we're not analyzing the analysis options file.
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
@@ -2185,7 +2185,7 @@
             ['/my/proj/lib/main.dart', '/my/proj/$optionsFileName']));
   }
 
-  test_path_filter_child_contexts_option() async {
+  Future<void> test_path_filter_child_contexts_option() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -2215,7 +2215,8 @@
     expect(drivers[1].name, equals(convertPath('/my/proj/lib')));
   }
 
-  test_path_filter_recursive_wildcard_child_contexts_option() async {
+  Future<void>
+      test_path_filter_recursive_wildcard_child_contexts_option() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -2246,7 +2247,7 @@
     expect(drivers[1].name, equals(convertPath('/my/proj/lib')));
   }
 
-  test_path_filter_wildcard_child_contexts_option() async {
+  Future<void> test_path_filter_wildcard_child_contexts_option() async {
     // Create files.
     String libPath = '$projPath/${ContextManagerTest.LIB_NAME}';
     newFile('$libPath/main.dart');
@@ -2342,7 +2343,7 @@
     expect(callbacks.currentContextRoots, unorderedEquals([a, c]));
   }
 
-  test_watchEvents() async {
+  Future<void> test_watchEvents() async {
     String libPath = newFolder('$projPath/${ContextManagerTest.LIB_NAME}').path;
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     newFile('$libPath/main.dart');
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index a3b10b3..a958b00 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -22,7 +22,7 @@
 import 'analysis_abstract.dart';
 import 'mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainTest);
     defineReflectiveTests(AnalysisDomainHandlerTest);
@@ -32,7 +32,7 @@
 
 @reflectiveTest
 class AnalysisDomainHandlerTest extends AbstractAnalysisTest {
-  Future outOfRangeTest(SourceEdit edit) async {
+  Future<void> outOfRangeTest(SourceEdit edit) async {
     AnalysisTestHelper helper = AnalysisTestHelper();
     helper.createSingleFileProject('library A;');
     await helper.onAnalysisComplete;
@@ -47,7 +47,7 @@
         isResponseFailure('0', RequestErrorCode.INVALID_OVERLAY_CHANGE));
   }
 
-  test_setAnalysisRoots_excludedFolder() async {
+  Future<void> test_setAnalysisRoots_excludedFolder() async {
     newFile('/project/aaa/a.dart', content: '// a');
     newFile('/project/bbb/b.dart', content: '// b');
     var excludedPath = join(projectPath, 'bbb');
@@ -55,7 +55,7 @@
     expect(response, isResponseSuccess('0'));
   }
 
-  test_setAnalysisRoots_included_newFolder() async {
+  Future<void> test_setAnalysisRoots_included_newFolder() async {
     newFile('/project/pubspec.yaml', content: 'name: project');
     String file = newFile('/project/bin/test.dart', content: 'main() {}').path;
     var response = testSetAnalysisRoots([projectPath], []);
@@ -67,7 +67,7 @@
     expect(resolvedUnit, isNotNull);
   }
 
-  test_setAnalysisRoots_included_nonexistentFolder() async {
+  Future<void> test_setAnalysisRoots_included_nonexistentFolder() async {
     String projectA = convertPath('/project_a');
     String projectB = convertPath('/project_b');
     String fileB = newFile('/project_b/b.dart', content: '// b').path;
@@ -81,31 +81,31 @@
     expect(resolvedUnit, isNotNull);
   }
 
-  test_setAnalysisRoots_included_notAbsolute() async {
+  Future<void> test_setAnalysisRoots_included_notAbsolute() async {
     var response = testSetAnalysisRoots(['foo/bar'], []);
     expect(response,
         isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
   }
 
-  test_setAnalysisRoots_included_notNormalized() async {
+  Future<void> test_setAnalysisRoots_included_notNormalized() async {
     var response = testSetAnalysisRoots(['/foo/../bar'], []);
     expect(response,
         isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
   }
 
-  test_setAnalysisRoots_notAbsolute() async {
+  Future<void> test_setAnalysisRoots_notAbsolute() async {
     var response = testSetAnalysisRoots([], ['foo/bar']);
     expect(response,
         isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
   }
 
-  test_setAnalysisRoots_notNormalized() async {
+  Future<void> test_setAnalysisRoots_notNormalized() async {
     var response = testSetAnalysisRoots([], ['/foo/../bar']);
     expect(response,
         isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
   }
 
-  test_setPriorityFiles_invalid() {
+  void test_setPriorityFiles_invalid() {
     var request = AnalysisSetPriorityFilesParams(
       [convertPath('/project/lib.dart')],
     ).toRequest('0');
@@ -113,7 +113,7 @@
     expect(response, isResponseSuccess('0'));
   }
 
-  test_setPriorityFiles_valid() {
+  void test_setPriorityFiles_valid() {
     var p1 = convertPath('/p1');
     var p2 = convertPath('/p2');
     var aPath = convertPath('/p1/a.dart');
@@ -142,7 +142,7 @@
     setPriorityFiles([]);
   }
 
-  test_updateContent_badType() async {
+  Future<void> test_updateContent_badType() async {
     AnalysisTestHelper helper = AnalysisTestHelper();
     helper.createSingleFileProject('// empty');
     await helper.onAnalysisComplete;
@@ -157,7 +157,7 @@
     expect(response, isResponseFailure('0'));
   }
 
-  test_updateContent_changeOnDisk_duringOverride() async {
+  Future<void> test_updateContent_changeOnDisk_duringOverride() async {
     AnalysisTestHelper helper = AnalysisTestHelper();
     helper.createSingleFileProject('library A;');
     await helper.onAnalysisComplete;
@@ -179,7 +179,7 @@
     expect(helper.getTestErrors(), hasLength(1));
   }
 
-  test_updateContent_changeOnDisk_normal() async {
+  Future<void> test_updateContent_changeOnDisk_normal() async {
     AnalysisTestHelper helper = AnalysisTestHelper();
     helper.createSingleFileProject('library A;');
     await helper.onAnalysisComplete;
@@ -193,7 +193,7 @@
     expect(helper.getTestErrors(), hasLength(1));
   }
 
-  test_updateContent_fullContent() async {
+  Future<void> test_updateContent_fullContent() async {
     AnalysisTestHelper helper = AnalysisTestHelper();
     helper.createSingleFileProject('// empty');
     await helper.onAnalysisComplete;
@@ -208,7 +208,7 @@
     expect(errors, hasLength(1));
   }
 
-  test_updateContent_incremental() async {
+  Future<void> test_updateContent_incremental() async {
     AnalysisTestHelper helper = AnalysisTestHelper();
     String initialContent = 'library A;';
     helper.createSingleFileProject(initialContent);
@@ -227,19 +227,19 @@
     expect(errors, hasLength(1));
   }
 
-  test_updateContent_outOfRange_beyondEnd() {
+  Future<void> test_updateContent_outOfRange_beyondEnd() {
     return outOfRangeTest(SourceEdit(6, 6, 'foo'));
   }
 
-  test_updateContent_outOfRange_negativeLength() {
+  Future<void> test_updateContent_outOfRange_negativeLength() {
     return outOfRangeTest(SourceEdit(3, -1, 'foo'));
   }
 
-  test_updateContent_outOfRange_negativeOffset() {
+  Future<void> test_updateContent_outOfRange_negativeOffset() {
     return outOfRangeTest(SourceEdit(-1, 3, 'foo'));
   }
 
-  test_updateOptions_invalid() {
+  void test_updateOptions_invalid() {
     var request = Request('0', ANALYSIS_REQUEST_UPDATE_OPTIONS, {
       ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS: {'not-an-option': true}
     });
@@ -248,7 +248,7 @@
     expect(response, isResponseSuccess('0'));
   }
 
-  test_updateOptions_null() {
+  void test_updateOptions_null() {
     // null is allowed as a synonym for {}.
     var request = Request('0', ANALYSIS_REQUEST_UPDATE_OPTIONS,
         {ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS: null});
@@ -262,7 +262,7 @@
     return handler.handleRequest(request);
   }
 
-  xtest_getReachableSources_invalidSource() async {
+  Future<void> xtest_getReachableSources_invalidSource() async {
     // TODO(brianwilkerson) Re-enable this test if we re-enable the
     // analysis.getReachableSources request.
     newFile('/project/a.dart', content: 'import "b.dart";');
@@ -278,7 +278,7 @@
         RequestErrorCode.GET_REACHABLE_SOURCES_INVALID_FILE);
   }
 
-  xtest_getReachableSources_validSources() async {
+  Future<void> xtest_getReachableSources_validSources() async {
     // TODO(brianwilkerson) Re-enable this test if we re-enable the
     // analysis.getReachableSources request.
     String fileA = newFile('/project/a.dart', content: 'import "b.dart";').path;
@@ -313,7 +313,7 @@
     }
   }
 
-  test_setRoots_packages() {
+  Future<void> test_setRoots_packages() {
     // prepare package
     String pkgFile = newFile('/packages/pkgA/libA.dart', content: '''
 library lib_a;
@@ -556,7 +556,7 @@
     }
   }
 
-  test_afterAnalysis() async {
+  Future<void> test_afterAnalysis() async {
     addTestFile('int V = 42;');
     createProject();
     // wait for analysis, no results initially
@@ -583,7 +583,7 @@
     expect(filesHighlights[file], isEmpty);
   }
 
-  test_afterAnalysis_packageFile_external() async {
+  Future<void> test_afterAnalysis_packageFile_external() async {
     String pkgFile = newFile('/packages/pkgA/lib/libA.dart', content: '''
 library lib_a;
 class A {}
@@ -607,7 +607,7 @@
     expect(filesHighlights[pkgFile], isNotEmpty);
   }
 
-  test_afterAnalysis_packageFile_inRoot() async {
+  Future<void> test_afterAnalysis_packageFile_inRoot() async {
     String pkgA = convertPath('/pkgA');
     String pkgB = convertPath('/pkgA');
     String pkgFileA = newFile('$pkgA/lib/libA.dart', content: '''
@@ -634,7 +634,7 @@
     expect(filesHighlights[pkgFileA], isNotEmpty);
   }
 
-  test_afterAnalysis_packageFile_notUsed() async {
+  Future<void> test_afterAnalysis_packageFile_notUsed() async {
     String pkgFile = newFile('/packages/pkgA/lib/libA.dart', content: '''
 library lib_a;
 class A {}
@@ -655,7 +655,7 @@
     expect(filesHighlights[pkgFile], isNotEmpty);
   }
 
-  test_afterAnalysis_sdkFile() async {
+  Future<void> test_afterAnalysis_sdkFile() async {
     String file = convertPath('/sdk/lib/core/core.dart');
     addTestFile('// no matter');
     createProject();
@@ -669,7 +669,7 @@
     expect(filesHighlights[file], isNotEmpty);
   }
 
-  test_beforeAnalysis() async {
+  Future<void> test_beforeAnalysis() async {
     addTestFile('int V = 42;');
     createProject();
     // subscribe
@@ -679,7 +679,7 @@
     expect(filesHighlights[testFile], isNotEmpty);
   }
 
-  test_sentToPlugins() async {
+  Future<void> test_sentToPlugins() async {
     addTestFile('int V = 42;');
     createProject();
     // subscribe
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 02c722e..531eedb 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -21,7 +21,7 @@
 import 'domain_completion_util.dart';
 import 'mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionDomainHandlerGetSuggestionsTest);
     defineReflectiveTests(CompletionDomainHandlerListTokenDetailsTest);
@@ -31,7 +31,7 @@
 @reflectiveTest
 class CompletionDomainHandlerGetSuggestionsTest
     extends AbstractCompletionDomainTest {
-  test_ArgumentList_constructor_named_fieldFormalParam() async {
+  Future<void> test_ArgumentList_constructor_named_fieldFormalParam() async {
     // https://github.com/dart-lang/sdk/issues/31023
     addTestFile('''
 main() { new A(field: ^);}
@@ -42,7 +42,7 @@
     await getSuggestions();
   }
 
-  test_ArgumentList_constructor_named_param_label() async {
+  Future<void> test_ArgumentList_constructor_named_param_label() async {
     addTestFile('main() { new A(^);}'
         'class A { A({one, two}) {} }');
     await getSuggestions();
@@ -53,7 +53,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_ArgumentList_factory_named_param_label() async {
+  Future<void> test_ArgumentList_factory_named_param_label() async {
     addTestFile('main() { new A(^);}'
         'class A { factory A({one, two}) => null; }');
     await getSuggestions();
@@ -64,7 +64,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_ArgumentList_imported_function_named_param() async {
+  Future<void> test_ArgumentList_imported_function_named_param() async {
     addTestFile('main() { int.parse("16", ^);}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ',
@@ -74,7 +74,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_ArgumentList_imported_function_named_param1() async {
+  Future<void> test_ArgumentList_imported_function_named_param1() async {
     addTestFile('main() { foo(o^);} foo({one, two}) {}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'one: ',
@@ -84,7 +84,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_ArgumentList_imported_function_named_param2() async {
+  Future<void> test_ArgumentList_imported_function_named_param2() async {
     addTestFile('mainx() {A a = new A(); a.foo(one: 7, ^);}'
         'class A { foo({one, two}) {} }');
     await getSuggestions();
@@ -93,7 +93,7 @@
     expect(suggestions, hasLength(1));
   }
 
-  test_ArgumentList_imported_function_named_param_label1() async {
+  Future<void> test_ArgumentList_imported_function_named_param_label1() async {
     addTestFile('main() { int.parse("16", r^: 16);}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix',
@@ -103,7 +103,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_ArgumentList_imported_function_named_param_label3() async {
+  Future<void> test_ArgumentList_imported_function_named_param_label3() async {
     addTestFile('main() { int.parse("16", ^: 16);}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ',
@@ -113,7 +113,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_catch() async {
+  Future<void> test_catch() async {
     addTestFile('main() {try {} ^}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'on',
@@ -125,7 +125,7 @@
     expect(suggestions, hasLength(3));
   }
 
-  test_catch2() async {
+  Future<void> test_catch2() async {
     addTestFile('main() {try {} on Foo {} ^}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'on',
@@ -143,7 +143,7 @@
     });
   }
 
-  test_catch3() async {
+  Future<void> test_catch3() async {
     addTestFile('main() {try {} catch (e) {} finally {} ^}');
     await getSuggestions();
     assertNoResult('on');
@@ -158,7 +158,7 @@
     });
   }
 
-  test_catch4() async {
+  Future<void> test_catch4() async {
     addTestFile('main() {try {} finally {} ^}');
     await getSuggestions();
     assertNoResult('on');
@@ -173,7 +173,7 @@
     });
   }
 
-  test_catch5() async {
+  Future<void> test_catch5() async {
     addTestFile('main() {try {} ^ finally {}}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'on',
@@ -183,7 +183,7 @@
     expect(suggestions, hasLength(2));
   }
 
-  test_constructor() async {
+  Future<void> test_constructor() async {
     addTestFile('class A {bool foo; A() : ^;}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'super',
@@ -192,7 +192,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_constructor2() async {
+  Future<void> test_constructor2() async {
     addTestFile('class A {bool foo; A() : s^;}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'super',
@@ -201,7 +201,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_constructor3() async {
+  Future<void> test_constructor3() async {
     addTestFile('class A {bool foo; A() : a=7,^;}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'super',
@@ -210,7 +210,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_constructor4() async {
+  Future<void> test_constructor4() async {
     addTestFile('class A {bool foo; A() : a=7,s^;}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'super',
@@ -219,7 +219,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_constructor5() async {
+  Future<void> test_constructor5() async {
     addTestFile('class A {bool foo; A() : a=7,s^}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'super',
@@ -228,7 +228,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_constructor6() async {
+  Future<void> test_constructor6() async {
     addTestFile('class A {bool foo; A() : a=7,^ void bar() {}}');
     await getSuggestions();
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'super',
@@ -237,7 +237,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_html() {
+  Future<void> test_html() {
     //
     // We no longer support the analysis of non-dart files.
     //
@@ -252,7 +252,7 @@
     });
   }
 
-  test_import_uri_with_trailing() {
+  Future<void> test_import_uri_with_trailing() {
     final filePath = '/project/bin/testA.dart';
     final incompleteImportText = toUriStr('/project/bin/t');
     newFile(filePath, content: 'library libA;');
@@ -268,7 +268,7 @@
     });
   }
 
-  test_imports() {
+  Future<void> test_imports() {
     addTestFile('''
       import 'dart:html';
       main() {^}
@@ -284,7 +284,7 @@
     });
   }
 
-  test_imports_aborted_new_request() async {
+  Future<void> test_imports_aborted_new_request() async {
     addTestFile('''
         class foo { }
         c^''');
@@ -325,7 +325,7 @@
   }
 
   @failingTest
-  test_imports_aborted_source_changed() async {
+  Future<void> test_imports_aborted_source_changed() async {
     // TODO(brianwilkerson) Figure out whether this test makes sense when
     // running the new driver. It waits for an initial empty notification then
     // waits for a new notification. But I think that under the driver we only
@@ -359,7 +359,7 @@
     expect(suggestions, hasLength(0));
   }
 
-  test_imports_incremental() async {
+  Future<void> test_imports_incremental() async {
     addTestFile('''library foo;
       e^
       import "dart:async";
@@ -382,7 +382,7 @@
     assertNoResult('library');
   }
 
-  test_imports_partial() async {
+  Future<void> test_imports_partial() async {
     addTestFile('''^
       import "package:foo/foo.dart";
       import "package:bar/bar.dart";
@@ -423,7 +423,7 @@
     assertNoResult('extends');
   }
 
-  test_imports_prefixed() {
+  Future<void> test_imports_prefixed() {
     addTestFile('''
       import 'dart:html' as foo;
       main() {^}
@@ -439,7 +439,7 @@
     });
   }
 
-  test_imports_prefixed2() {
+  Future<void> test_imports_prefixed2() {
     addTestFile('''
       import 'dart:html' as foo;
       main() {foo.^}
@@ -452,7 +452,7 @@
     });
   }
 
-  test_inComment_block_beforeNode() async {
+  Future<void> test_inComment_block_beforeNode() async {
     addTestFile('''
   main(aaa, bbb) {
     /* text ^ */
@@ -463,7 +463,7 @@
     expect(suggestions, isEmpty);
   }
 
-  test_inComment_endOfLine_beforeNode() async {
+  Future<void> test_inComment_endOfLine_beforeNode() async {
     addTestFile('''
   main(aaa, bbb) {
     // text ^
@@ -474,7 +474,7 @@
     expect(suggestions, isEmpty);
   }
 
-  test_inComment_endOfLine_beforeToken() async {
+  Future<void> test_inComment_endOfLine_beforeToken() async {
     addTestFile('''
   main(aaa, bbb) {
     // text ^
@@ -484,7 +484,7 @@
     expect(suggestions, isEmpty);
   }
 
-  test_inDartDoc1() async {
+  Future<void> test_inDartDoc1() async {
     addTestFile('''
   /// ^
   main(aaa, bbb) {}
@@ -493,7 +493,7 @@
     expect(suggestions, isEmpty);
   }
 
-  test_inDartDoc2() async {
+  Future<void> test_inDartDoc2() async {
     addTestFile('''
   /// Some text^
   main(aaa, bbb) {}
@@ -502,7 +502,7 @@
     expect(suggestions, isEmpty);
   }
 
-  test_inDartDoc_reference1() async {
+  Future<void> test_inDartDoc_reference1() async {
     newFile('/testA.dart', content: '''
   part of libA;
   foo(bar) => 0;''');
@@ -521,7 +521,7 @@
     assertHasResult(CompletionSuggestionKind.IDENTIFIER, 'min');
   }
 
-  test_inDartDoc_reference2() async {
+  Future<void> test_inDartDoc_reference2() async {
     addTestFile('''
   /// The [m^]
   main(aaa, bbb) {}
@@ -531,7 +531,7 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
-  test_inherited() {
+  Future<void> test_inherited() {
     addTestFile('''
 class A {
   m() {}
@@ -547,7 +547,7 @@
     });
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = CompletionGetSuggestionsParams('test.dart', 0).toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -556,7 +556,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         CompletionGetSuggestionsParams(convertPath('/foo/../bar/test.dart'), 0)
             .toRequest('0');
@@ -567,7 +567,7 @@
     );
   }
 
-  test_invocation() {
+  Future<void> test_invocation() {
     addTestFile('class A {b() {}} main() {A a; a.^}');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
@@ -576,7 +576,7 @@
     });
   }
 
-  test_invocation_sdk_relevancy_off() {
+  Future<void> test_invocation_sdk_relevancy_off() {
     var originalSorter = DartCompletionManager.contributionSorter;
     var mockSorter = MockRelevancySorter();
     DartCompletionManager.contributionSorter = mockSorter;
@@ -590,7 +590,7 @@
     });
   }
 
-  test_invocation_sdk_relevancy_on() {
+  Future<void> test_invocation_sdk_relevancy_on() {
     addTestFile('main() {Map m; m.^}');
     return getSuggestions().then((_) {
       // Assert that the CommonUsageComputer is working
@@ -599,7 +599,7 @@
     });
   }
 
-  test_invocation_withTrailingStmt() {
+  Future<void> test_invocation_withTrailingStmt() {
     addTestFile('class A {b() {}} main() {A a; a.^ int x = 7;}');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
@@ -608,7 +608,7 @@
     });
   }
 
-  test_is_asPrefixedIdentifierStart() async {
+  Future<void> test_is_asPrefixedIdentifierStart() async {
     addTestFile('''
 class A { var isVisible;}
 main(A p) { var v1 = p.is^; }''');
@@ -617,7 +617,7 @@
         relevance: DART_RELEVANCE_DEFAULT);
   }
 
-  test_keyword() {
+  Future<void> test_keyword() {
     addTestFile('library A; cl^');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset - 2));
@@ -629,7 +629,7 @@
     });
   }
 
-  test_local_implicitCreation() async {
+  Future<void> test_local_implicitCreation() async {
     addTestFile('''
 class A {
   A();
@@ -655,7 +655,7 @@
         elementKind: ElementKind.CONSTRUCTOR);
   }
 
-  test_local_named_constructor() {
+  Future<void> test_local_named_constructor() {
     addTestFile('class A {A.c(); x() {new A.^}}');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
@@ -665,7 +665,7 @@
     });
   }
 
-  test_local_override() {
+  Future<void> test_local_override() {
     newFile('/project/bin/a.dart', content: 'class A {m() {}}');
     addTestFile('''
 import 'a.dart';
@@ -682,7 +682,7 @@
     });
   }
 
-  test_local_shadowClass() async {
+  Future<void> test_local_shadowClass() async {
     addTestFile('''
 class A {
   A();
@@ -708,7 +708,7 @@
     assertNoResult('A.named', elementKind: ElementKind.CONSTRUCTOR);
   }
 
-  test_locals() {
+  Future<void> test_locals() {
     addTestFile('class A {var a; x() {var b;^}} class DateTime { }');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
@@ -726,7 +726,7 @@
     });
   }
 
-  test_offset_past_eof() async {
+  Future<void> test_offset_past_eof() async {
     addTestFile('main() { }', offset: 300);
     Request request = CompletionGetSuggestionsParams(testFile, completionOffset)
         .toRequest('0');
@@ -735,7 +735,7 @@
     expect(response.error.code, RequestErrorCode.INVALID_PARAMETER);
   }
 
-  test_overrides() {
+  Future<void> test_overrides() {
     newFile('/project/bin/a.dart', content: 'class A {m() {}}');
     addTestFile('''
 import 'a.dart';
@@ -749,7 +749,7 @@
     });
   }
 
-  test_partFile() {
+  Future<void> test_partFile() {
     newFile('/project/bin/a.dart', content: '''
       library libA;
       import 'dart:html';
@@ -772,7 +772,7 @@
     });
   }
 
-  test_partFile2() {
+  Future<void> test_partFile2() {
     newFile('/project/bin/a.dart', content: '''
       part of libA;
       class A { }''');
@@ -795,7 +795,7 @@
     });
   }
 
-  test_sentToPlugins() async {
+  Future<void> test_sentToPlugins() async {
     addTestFile('''
       void main() {
         ^
@@ -816,7 +816,7 @@
         selectionOffset: 3);
   }
 
-  test_simple() {
+  Future<void> test_simple() {
     addTestFile('''
       void main() {
         ^
@@ -832,7 +832,7 @@
     });
   }
 
-  test_static() {
+  Future<void> test_static() {
     addTestFile('class A {static b() {} c() {}} main() {A.^}');
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset));
@@ -842,7 +842,7 @@
     });
   }
 
-  test_topLevel() {
+  Future<void> test_topLevel() {
     addTestFile('''
       typedef foo();
       var test = '';
@@ -879,7 +879,7 @@
     testFileUri = toUriStr(testFile);
   }
 
-  test_classDeclaration() async {
+  Future<void> test_classDeclaration() async {
     await expectTokens('''
 class A {}
 class B extends A {}
@@ -921,7 +921,7 @@
     ]);
   }
 
-  test_genericType() async {
+  Future<void> test_genericType() async {
     await expectTokens('''
 List<int> x = null;
 ''', [
@@ -941,7 +941,7 @@
     ]);
   }
 
-  test_getterInvocation() async {
+  Future<void> test_getterInvocation() async {
     await expectTokens('''
 var x = 'a'.length;
 ''', [
@@ -958,7 +958,7 @@
     ]);
   }
 
-  test_literal_bool() async {
+  Future<void> test_literal_bool() async {
     await expectTokens('''
 var x = true;
 ''', [
@@ -972,7 +972,7 @@
     ]);
   }
 
-  test_literal_double() async {
+  Future<void> test_literal_double() async {
     await expectTokens('''
 var x = 3.4;
 ''', [
@@ -987,7 +987,7 @@
     ]);
   }
 
-  test_literal_int() async {
+  Future<void> test_literal_int() async {
     await expectTokens('''
 var x = 7;
 ''', [
@@ -1000,7 +1000,7 @@
     ]);
   }
 
-  test_literal_list() async {
+  Future<void> test_literal_list() async {
     await expectTokens('''
 var x = <int>[];
 ''', [
@@ -1019,7 +1019,7 @@
     ]);
   }
 
-  test_literal_map() async {
+  Future<void> test_literal_map() async {
     await expectTokens('''
 var x = <int, int>{};
 ''', [
@@ -1042,7 +1042,7 @@
     ]);
   }
 
-  test_literal_null() async {
+  Future<void> test_literal_null() async {
     await expectTokens('''
 var x = null;
 ''', [
@@ -1054,7 +1054,7 @@
     ]);
   }
 
-  test_literal_set() async {
+  Future<void> test_literal_set() async {
     await expectTokens('''
 var x = <int>{};
 ''', [
@@ -1073,7 +1073,7 @@
     ]);
   }
 
-  test_literal_string() async {
+  Future<void> test_literal_string() async {
     await expectTokens('''
 var x = 'a';
 ''', [
@@ -1088,7 +1088,7 @@
     ]);
   }
 
-  test_methodDeclaration() async {
+  Future<void> test_methodDeclaration() async {
     await expectTokens('''
 class A {
   String c(int x, int y) {}
@@ -1123,7 +1123,7 @@
     ]);
   }
 
-  test_methodInvocation() async {
+  Future<void> test_methodInvocation() async {
     await expectTokens('''
 var x = 'radar'.indexOf('r', 1);
 ''', [
@@ -1147,7 +1147,7 @@
     ]);
   }
 
-  test_mixinDeclaration() async {
+  Future<void> test_mixinDeclaration() async {
     await expectTokens('''
 class A {}
 class B {}
@@ -1179,7 +1179,7 @@
     ]);
   }
 
-  test_parameterReference() async {
+  Future<void> test_parameterReference() async {
     await expectTokens('''
 int f(int p) {
   return p;
@@ -1207,7 +1207,7 @@
     ]);
   }
 
-  test_topLevelVariable_withDocComment() async {
+  Future<void> test_topLevelVariable_withDocComment() async {
     await expectTokens('''
 /// Doc comment [x] with reference.
 int x;
diff --git a/pkg/analysis_server/test/domain_completion_util.dart b/pkg/analysis_server/test/domain_completion_util.dart
index d281fcb..c6f4ef4 100644
--- a/pkg/analysis_server/test/domain_completion_util.dart
+++ b/pkg/analysis_server/test/domain_completion_util.dart
@@ -104,7 +104,7 @@
   }
 
   @override
-  processNotification(Notification notification) async {
+  Future<void> processNotification(Notification notification) async {
     if (notification.event == COMPLETION_RESULTS) {
       var params = CompletionResultsParams.fromNotification(notification);
       String id = params.id;
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index 149cee9..41135d6 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -9,7 +9,7 @@
 
 import 'analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DiagnosticDomainTest);
   });
@@ -25,7 +25,7 @@
     server.handlers = [handler];
   }
 
-  test_getDiagnostics() async {
+  Future<void> test_getDiagnostics() async {
     newFile('/project/pubspec.yaml', content: 'name: project');
     newFile('/project/bin/test.dart', content: 'main() {}');
 
@@ -48,7 +48,7 @@
     expect(context.workItemQueueLength, isNotNull);
   }
 
-  test_getDiagnostics_noRoot() async {
+  Future<void> test_getDiagnostics_noRoot() async {
     var request = DiagnosticGetDiagnosticsParams().toRequest('0');
     var response = handler.handleRequest(request);
     var result = DiagnosticGetDiagnosticsResult.fromResponse(response);
diff --git a/pkg/analysis_server/test/domain_edit_dartfix_test.dart b/pkg/analysis_server/test/domain_edit_dartfix_test.dart
index 7a71894..c4f1364 100644
--- a/pkg/analysis_server/test/domain_edit_dartfix_test.dart
+++ b/pkg/analysis_server/test/domain_edit_dartfix_test.dart
@@ -12,7 +12,7 @@
 
 import 'analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EditDartfixDomainHandlerTest);
   });
@@ -80,7 +80,7 @@
     testFile = resourceProvider.convertPath('/project/lib/fileToBeFixed.dart');
   }
 
-  test_collection_if_elements() async {
+  Future<void> test_collection_if_elements() async {
     addTestFile('''
 f(bool b) {
   return ['a', b ? 'c' : 'd', 'e'];
@@ -98,7 +98,7 @@
 ''');
   }
 
-  test_excludedFix_invalid() async {
+  Future<void> test_excludedFix_invalid() async {
     addTestFile('''
 const double myDouble = 42.0;
     ''');
@@ -108,7 +108,7 @@
     expect(result.error, isNotNull);
   }
 
-  test_excludedSource() async {
+  Future<void> test_excludedSource() async {
     // Add analysis options to exclude the lib directory then reanalyze
     newFile('/project/analysis_options.yaml', content: '''
 analyzer:
@@ -127,7 +127,7 @@
     expect(result.edits, hasLength(0));
   }
 
-  test_fixNamedConstructorTypeArgs() async {
+  Future<void> test_fixNamedConstructorTypeArgs() async {
     addTestFile('''
 class A<T> {
   A.from(Object obj);
@@ -151,7 +151,7 @@
     ''');
   }
 
-  test_includedFix_invalid() async {
+  Future<void> test_includedFix_invalid() async {
     addTestFile('''
 const double myDouble = 42.0;
     ''');
@@ -161,7 +161,7 @@
     expect(result.error, isNotNull);
   }
 
-  test_nonNullable() async {
+  Future<void> test_nonNullable() async {
     createAnalysisOptionsFile(experiments: ['non-nullable']);
     addTestFile('''
 int f(int i) => 0;
@@ -184,7 +184,7 @@
 ''');
   }
 
-  test_nonNullable_analysisOptions_created() async {
+  Future<void> test_nonNullable_analysisOptions_created() async {
     // Add pubspec for nnbd migration to detect
     newFile('/project/pubspec.yaml', content: '''
 name: testnnbd
@@ -203,7 +203,7 @@
 ''');
   }
 
-  test_nonNullable_analysisOptions_experimentsAdded() async {
+  Future<void> test_nonNullable_analysisOptions_experimentsAdded() async {
     String originalOptions = '''
 analyzer:
   something:
@@ -231,7 +231,7 @@
 ''');
   }
 
-  test_nonNullable_analysisOptions_nnbdAdded() async {
+  Future<void> test_nonNullable_analysisOptions_nnbdAdded() async {
     String originalOptions = '''
 analyzer:
   enable-experiment:
@@ -256,7 +256,7 @@
 ''');
   }
 
-  test_partFile() async {
+  Future<void> test_partFile() async {
     newFile('/project/lib/lib.dart', content: '''
 library lib2;
 part 'fileToBeFixed.dart';
@@ -278,7 +278,7 @@
     ''');
   }
 
-  test_partFile_loose() async {
+  Future<void> test_partFile_loose() async {
     addTestFile('''
 part of lib2;
 const double myDouble = 42.0;
@@ -296,7 +296,7 @@
     ''');
   }
 
-  test_pedantic() async {
+  Future<void> test_pedantic() async {
     addTestFile('main(List args) { if (args.length == 0) { } }');
     createProject();
     EditDartfixResult result = await performFix(pedantic: true);
@@ -306,7 +306,7 @@
     expectEdits(result.edits, 'main(List args) { if (args.isEmpty) { } }');
   }
 
-  test_preferEqualForDefaultValues() async {
+  Future<void> test_preferEqualForDefaultValues() async {
     // Add analysis options to enable ui as code
     addTestFile('f({a: 1}) { }');
     createProject();
@@ -318,7 +318,7 @@
     expectEdits(result.edits, 'f({a = 1}) { }');
   }
 
-  test_preferForElementsToMapFromIterable() async {
+  Future<void> test_preferForElementsToMapFromIterable() async {
     addTestFile('''
 var m =
   Map<int, int>.fromIterable([1, 2, 3], key: (i) => i, value: (i) => i * 2);
@@ -335,7 +335,7 @@
     ''');
   }
 
-  test_preferIfElementsToConditionalExpressions() async {
+  Future<void> test_preferIfElementsToConditionalExpressions() async {
     addTestFile('''
 f(bool b) => ['a', b ? 'c' : 'd', 'e'];
     ''');
@@ -350,7 +350,7 @@
     ''');
   }
 
-  test_preferIntLiterals() async {
+  Future<void> test_preferIntLiterals() async {
     addTestFile('''
 const double myDouble = 42.0;
     ''');
@@ -364,7 +364,7 @@
     ''');
   }
 
-  test_preferIsEmpty() async {
+  Future<void> test_preferIsEmpty() async {
     addTestFile('main(List<String> args) { if (args.length == 0) { } }');
     createProject();
     EditDartfixResult result =
@@ -376,7 +376,7 @@
         result.edits, 'main(List<String> args) { if (args.isEmpty) { } }');
   }
 
-  test_preferMixin() async {
+  Future<void> test_preferMixin() async {
     addTestFile('''
 class A {}
 class B extends A {}
@@ -394,7 +394,7 @@
     ''');
   }
 
-  test_preferSingleQuotes() async {
+  Future<void> test_preferSingleQuotes() async {
     addTestFile('''
 var l = [
   "abc",
@@ -424,7 +424,7 @@
 ''');
   }
 
-  test_preferSpreadCollections() async {
+  Future<void> test_preferSpreadCollections() async {
     addTestFile('''
 var l1 = ['b'];
 var l2 = ['a']..addAll(l1);
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index b98ed4f..eeb47aa 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -17,7 +17,7 @@
 import 'analysis_abstract.dart';
 import 'mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExecutionDomainTest);
   });
@@ -176,7 +176,7 @@
     super.tearDown();
   }
 
-  test_getSuggestions() async {
+  Future<void> test_getSuggestions() async {
     var code = r'''
 class A {
   int foo;
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
index ab39270..012fb35 100644
--- a/pkg/analysis_server/test/domain_server_test.dart
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -16,7 +16,7 @@
 import 'constants.dart';
 import 'mocks.dart';
 
-main() {
+void main() {
   AnalysisServer server;
   ServerDomainHandler handler;
   MockServerChannel serverChannel;
diff --git a/pkg/analysis_server/test/edit/assists_test.dart b/pkg/analysis_server/test/edit/assists_test.dart
index 7f61e9c..aec8477 100644
--- a/pkg/analysis_server/test/edit/assists_test.dart
+++ b/pkg/analysis_server/test/edit/assists_test.dart
@@ -18,7 +18,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssistsTest);
   });
@@ -28,12 +28,12 @@
 class AssistsTest extends AbstractAnalysisTest {
   List<SourceChange> changes;
 
-  prepareAssists(String search, [int length = 0]) async {
+  Future<void> prepareAssists(String search, [int length = 0]) async {
     int offset = findOffset(search);
     await prepareAssistsAt(offset, length);
   }
 
-  prepareAssistsAt(int offset, int length) async {
+  Future<void> prepareAssistsAt(int offset, int length) async {
     Request request =
         EditGetAssistsParams(testFile, offset, length).toRequest('0');
     Response response = await waitResponse(request);
@@ -48,7 +48,7 @@
     handler = EditDomainHandler(server);
   }
 
-  test_fromPlugins() async {
+  Future<void> test_fromPlugins() async {
     PluginInfo info = DiscoveredPluginInfo('a', 'b', 'c', null, null);
     String message = 'From a plugin';
     plugin.PrioritizedSourceChange change = plugin.PrioritizedSourceChange(
@@ -68,7 +68,7 @@
     _assertHasChange(message, 'xmain() {}');
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditGetAssistsParams('test.dart', 0, 0).toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -77,7 +77,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         EditGetAssistsParams(convertPath('/foo/../bar/test.dart'), 0, 0)
             .toRequest('0');
@@ -88,7 +88,7 @@
     );
   }
 
-  test_removeTypeAnnotation() async {
+  Future<void> test_removeTypeAnnotation() async {
     addTestFile('''
 main() {
   int v = 1;
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_splitVariableDeclaration() async {
+  Future<void> test_splitVariableDeclaration() async {
     addTestFile('''
 main() {
   int v = 1;
@@ -119,7 +119,7 @@
 ''');
   }
 
-  test_surroundWithIf() async {
+  Future<void> test_surroundWithIf() async {
     addTestFile('''
 main() {
   print(1);
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index e53025e..cf10976 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -18,7 +18,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FixesTest);
   });
@@ -32,7 +32,7 @@
     handler = EditDomainHandler(server);
   }
 
-  test_fixUndefinedClass() async {
+  Future<void> test_fixUndefinedClass() async {
     createProject();
     addTestFile('''
 main() {
@@ -52,7 +52,7 @@
     expect(fixes[2].message, matches('Create mixin'));
   }
 
-  test_fromPlugins() async {
+  Future<void> test_fromPlugins() async {
     PluginInfo info = DiscoveredPluginInfo('a', 'b', 'c', null, null);
     plugin.AnalysisErrorFixes fixes = plugin.AnalysisErrorFixes(AnalysisError(
         AnalysisErrorSeverity.ERROR,
@@ -73,7 +73,7 @@
     expect(errorFixes, hasLength(1));
   }
 
-  test_hasFixes() async {
+  Future<void> test_hasFixes() async {
     createProject();
     addTestFile('''
 foo() {
@@ -99,7 +99,7 @@
     }
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditGetFixesParams('test.dart', 0).toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -108,7 +108,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditGetFixesParams(convertPath('/foo/../bar/test.dart'), 0)
         .toRequest('0');
     var response = await waitResponse(request);
@@ -118,7 +118,7 @@
     );
   }
 
-  test_overlayOnlyFile() async {
+  Future<void> test_overlayOnlyFile() async {
     createProject();
     testCode = '''
 main() {
@@ -133,7 +133,7 @@
     _isSyntacticErrorWithSingleFix(errorFixes[0]);
   }
 
-  test_suggestImportFromDifferentAnalysisRoot() async {
+  Future<void> test_suggestImportFromDifferentAnalysisRoot() async {
     newFolder('/aaa');
     newFile('/aaa/.packages', content: '''
 aaa:${toUri('/aaa/lib')}
diff --git a/pkg/analysis_server/test/edit/format_test.dart b/pkg/analysis_server/test/edit/format_test.dart
index aa3c259..82fccdc 100644
--- a/pkg/analysis_server/test/edit/format_test.dart
+++ b/pkg/analysis_server/test/edit/format_test.dart
@@ -14,7 +14,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FormatTest);
   });
diff --git a/pkg/analysis_server/test/edit/organize_directives_test.dart b/pkg/analysis_server/test/edit/organize_directives_test.dart
index cd8803f..f565197 100644
--- a/pkg/analysis_server/test/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/edit/organize_directives_test.dart
@@ -14,7 +14,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
   });
@@ -63,7 +63,7 @@
         response, isResponseFailure('0', RequestErrorCode.FILE_NOT_ANALYZED));
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditOrganizeDirectivesParams('test.dart').toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -72,7 +72,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request =
         EditOrganizeDirectivesParams(convertPath('/foo/../bar/test.dart'))
             .toRequest('0');
diff --git a/pkg/analysis_server/test/edit/postfix_completion_test.dart b/pkg/analysis_server/test/edit/postfix_completion_test.dart
index e270972..21bafc6 100644
--- a/pkg/analysis_server/test/edit/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/edit/postfix_completion_test.dart
@@ -12,7 +12,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PostfixCompletionTest);
   });
@@ -29,7 +29,7 @@
     handler = EditDomainHandler(server);
   }
 
-  test_for() async {
+  Future<void> test_for() async {
     addTestFile('''
 main() {
   [].for
@@ -46,7 +46,7 @@
 ''');
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request =
         EditGetPostfixCompletionParams('test.dart', '.for', 0).toRequest('0');
     var response = await waitResponse(request);
@@ -56,7 +56,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditGetPostfixCompletionParams(
             convertPath('/foo/../bar/test.dart'), '.for', 0)
         .toRequest('0');
@@ -88,7 +88,7 @@
     fail('Expected to find |$message| but got: ' + change.message);
   }
 
-  _prepareCompletion(String key,
+  Future<void> _prepareCompletion(String key,
       {bool atStart = false, bool atEnd = false, int delta = 0}) async {
     int offset = findOffset(key);
     String src = testCode.replaceFirst(key, '', offset);
@@ -96,7 +96,7 @@
     await _prepareCompletionAt(offset, key);
   }
 
-  _prepareCompletionAt(int offset, String key) async {
+  Future<void> _prepareCompletionAt(int offset, String key) async {
     var params = EditGetPostfixCompletionParams(testFile, key, offset);
     var request =
         Request('0', 'edit.isPostfixCompletionApplicable', params.toJson());
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index dc2284b..60d3d2c 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -15,7 +15,7 @@
 import '../mocks.dart';
 import '../src/utilities/mock_packages.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertGetterMethodToMethodTest);
     defineReflectiveTests(ConvertMethodToGetterTest);
@@ -40,7 +40,7 @@
 
 @reflectiveTest
 class ConvertGetterMethodToMethodTest extends _AbstractGetRefactoring_Test {
-  test_function() {
+  Future<void> test_function() {
     addTestFile('''
 int get test => 42;
 main() {
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_init_fatalError_notExplicit() {
+  Future<void> test_init_fatalError_notExplicit() {
     addTestFile('''
 int test = 42;
 main() {
@@ -76,7 +76,7 @@
     });
   }
 
-  test_method() {
+  Future<void> test_method() {
     addTestFile('''
 class A {
   int get test => 1;
@@ -135,7 +135,7 @@
 
 @reflectiveTest
 class ConvertMethodToGetterTest extends _AbstractGetRefactoring_Test {
-  test_function() {
+  Future<void> test_function() {
     addTestFile('''
 int test() => 42;
 main() {
@@ -154,7 +154,7 @@
 ''');
   }
 
-  test_init_fatalError_hasParameters() {
+  Future<void> test_init_fatalError_hasParameters() {
     addTestFile('''
 int test(p) => p + 1;
 main() {
@@ -171,7 +171,7 @@
     });
   }
 
-  test_init_fatalError_notExecutableElement() {
+  Future<void> test_init_fatalError_notExecutableElement() {
     addTestFile('''
 main() {
   int abc = 1;
@@ -188,7 +188,7 @@
     });
   }
 
-  test_method() {
+  Future<void> test_method() {
     addTestFile('''
 class A {
   int test() => 1;
@@ -277,7 +277,7 @@
     super.tearDown();
   }
 
-  test_analysis_onlyOneFile() async {
+  Future<void> test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
     newFile(join(testFolder, 'other.dart'), content: r'''
 foo(int myName) {}
@@ -297,7 +297,7 @@
     expect(feedback.names, contains('myName'));
   }
 
-  test_coveringExpressions() {
+  Future<void> test_coveringExpressions() {
     addTestFile('''
 main() {
   var v = 111 + 222 + 333;
@@ -317,7 +317,7 @@
     });
   }
 
-  test_extractAll() {
+  Future<void> test_extractAll() {
     addTestFile('''
 main() {
   print(1 + 2);
@@ -335,7 +335,7 @@
 ''');
   }
 
-  test_extractOne() {
+  Future<void> test_extractOne() {
     addTestFile('''
 main() {
   print(1 + 2);
@@ -353,7 +353,7 @@
 ''');
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditGetRefactoringParams(
             RefactoringKind.EXTRACT_LOCAL_VARIABLE, 'test.dart', 0, 0, true)
         .toRequest('0');
@@ -364,7 +364,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditGetRefactoringParams(
             RefactoringKind.EXTRACT_LOCAL_VARIABLE,
             convertPath('/foo/../bar/test.dart'),
@@ -379,7 +379,7 @@
     );
   }
 
-  test_names() async {
+  Future<void> test_names() async {
     addTestFile('''
 class TreeItem {}
 TreeItem getSelectedItem() => null;
@@ -396,7 +396,7 @@
     expect(result.change, isNull);
   }
 
-  test_nameWarning() async {
+  Future<void> test_nameWarning() async {
     addTestFile('''
 main() {
   print(1 + 2);
@@ -416,7 +416,7 @@
 ''');
   }
 
-  test_offsetsLengths() {
+  Future<void> test_offsetsLengths() {
     addTestFile('''
 main() {
   print(1 + 2);
@@ -432,7 +432,7 @@
     });
   }
 
-  test_resetOnAnalysisSetChanged_overlay() async {
+  Future<void> test_resetOnAnalysisSetChanged_overlay() async {
     addTestFile('''
 main() {
   print(1 + 2); // 0
@@ -476,7 +476,7 @@
     });
   }
 
-  test_resetOnAnalysisSetChanged_watch_otherFile() async {
+  Future<void> test_resetOnAnalysisSetChanged_watch_otherFile() async {
     String otherFile = join(testFolder, 'other.dart');
     newFile(otherFile, content: '// other 1');
     addTestFile('''
@@ -503,7 +503,7 @@
     expect(test_resetCount, initialResetCount + 1);
   }
 
-  test_resetOnAnalysisSetChanged_watch_thisFile() async {
+  Future<void> test_resetOnAnalysisSetChanged_watch_thisFile() async {
     addTestFile('''
 main() {
   foo(1 + 2);
@@ -540,7 +540,7 @@
     }
   }
 
-  test_serverError_change() {
+  Future<void> test_serverError_change() {
     test_simulateRefactoringException_change = true;
     addTestFile('''
 main() {
@@ -555,7 +555,7 @@
     });
   }
 
-  test_serverError_final() {
+  Future<void> test_serverError_final() {
     test_simulateRefactoringException_final = true;
     addTestFile('''
 main() {
@@ -570,7 +570,7 @@
     });
   }
 
-  test_serverError_init() {
+  Future<void> test_serverError_init() {
     test_simulateRefactoringException_init = true;
     addTestFile('''
 main() {
@@ -593,7 +593,7 @@
   String name = 'res';
   ExtractMethodOptions options;
 
-  test_expression() {
+  Future<void> test_expression() {
     addTestFile('''
 main() {
   print(1 + 2);
@@ -611,7 +611,7 @@
 ''');
   }
 
-  test_expression_hasParameters() {
+  Future<void> test_expression_hasParameters() {
     addTestFile('''
 main() {
   int a = 1;
@@ -633,7 +633,7 @@
 ''');
   }
 
-  test_expression_updateParameters() {
+  Future<void> test_expression_updateParameters() {
     addTestFile('''
 main() {
   int a = 1;
@@ -664,7 +664,7 @@
     });
   }
 
-  test_init_fatalError_invalidStatement() {
+  Future<void> test_init_fatalError_invalidStatement() {
     addTestFile('''
 main(bool b) {
 // start
@@ -686,7 +686,7 @@
     });
   }
 
-  test_long_expression() {
+  Future<void> test_long_expression() {
     addTestFile('''
 main() {
   print(1 +
@@ -706,7 +706,7 @@
 ''');
   }
 
-  test_names() {
+  Future<void> test_names() {
     addTestFile('''
 class TreeItem {}
 TreeItem getSelectedItem() => null;
@@ -722,7 +722,7 @@
     });
   }
 
-  test_offsetsLengths() {
+  Future<void> test_offsetsLengths() {
     addTestFile('''
 class TreeItem {}
 TreeItem getSelectedItem() => null;
@@ -738,7 +738,7 @@
     });
   }
 
-  test_statements() {
+  Future<void> test_statements() {
     addTestFile('''
 main() {
   int a = 1;
@@ -928,7 +928,7 @@
     expect(kinds, contains(RefactoringKind.EXTRACT_WIDGET));
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request =
         EditGetAvailableRefactoringsParams('test.dart', 0, 0).toRequest('0');
     var response = await waitResponse(request);
@@ -938,7 +938,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditGetAvailableRefactoringsParams(
             convertPath('/foo/../bar/test.dart'), 0, 0)
         .toRequest('0');
@@ -1068,7 +1068,7 @@
 
 @reflectiveTest
 class InlineLocalTest extends _AbstractGetRefactoring_Test {
-  test_analysis_onlyOneFile() async {
+  Future<void> test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
     String otherFile = join(testFolder, 'other.dart');
     newFile(otherFile, content: r'''
@@ -1091,7 +1091,7 @@
     expect(feedback.occurrences, 2);
   }
 
-  test_feedback() {
+  Future<void> test_feedback() {
     addTestFile('''
 main() {
   int test = 42;
@@ -1108,7 +1108,7 @@
     });
   }
 
-  test_init_fatalError_notVariable() {
+  Future<void> test_init_fatalError_notVariable() {
     addTestFile('main() {}');
     return getRefactoringResult(() {
       return _sendInlineRequest('main() {}');
@@ -1120,7 +1120,7 @@
     });
   }
 
-  test_OK() {
+  Future<void> test_OK() {
     addTestFile('''
 main() {
   int test = 42;
@@ -1138,7 +1138,7 @@
 ''');
   }
 
-  test_resetOnAnalysisSetChanged() async {
+  Future<void> test_resetOnAnalysisSetChanged() async {
     newFile(join(testFolder, 'other.dart'), content: '// other 1');
     addTestFile('''
 main() {
@@ -1178,7 +1178,7 @@
 class InlineMethodTest extends _AbstractGetRefactoring_Test {
   InlineMethodOptions options = InlineMethodOptions(true, true);
 
-  test_feedback() {
+  Future<void> test_feedback() {
     addTestFile('''
 class A {
   int f;
@@ -1200,7 +1200,7 @@
     });
   }
 
-  test_init_fatalError_noMethod() {
+  Future<void> test_init_fatalError_noMethod() {
     addTestFile('// nothing to inline');
     return getRefactoringResult(() {
       return _sendInlineRequest('// nothing');
@@ -1212,7 +1212,7 @@
     });
   }
 
-  test_method() {
+  Future<void> test_method() {
     addTestFile('''
 class A {
   int f;
@@ -1242,7 +1242,7 @@
 ''');
   }
 
-  test_topLevelFunction() {
+  Future<void> test_topLevelFunction() {
     addTestFile('''
 test(a, b) {
   print(a + b);
@@ -1262,7 +1262,7 @@
 ''');
   }
 
-  test_topLevelFunction_oneInvocation() {
+  Future<void> test_topLevelFunction_oneInvocation() {
     addTestFile('''
 test(a, b) {
   print(a + b);
@@ -1301,7 +1301,7 @@
   MoveFileOptions options;
 
   @failingTest
-  test_OK() {
+  Future<void> test_OK() {
     _fail('The move file refactoring is not supported under the new driver');
     newFile('/project/bin/lib.dart');
     addTestFile('''
@@ -1350,7 +1350,7 @@
     super.tearDown();
   }
 
-  test_cancelPendingRequest() async {
+  Future<void> test_cancelPendingRequest() async {
     addTestFile('''
 main() {
   int test = 0;
@@ -1370,7 +1370,7 @@
     expect(responseB, isResponseSuccess('2'));
   }
 
-  test_class() {
+  Future<void> test_class() {
     addTestFile('''
 class Test {
   Test() {}
@@ -1397,7 +1397,7 @@
 ''');
   }
 
-  test_class_fromFactoryRedirectingConstructor() {
+  Future<void> test_class_fromFactoryRedirectingConstructor() {
     addTestFile('''
 class A {
   A() = Test.named;
@@ -1426,7 +1426,7 @@
     );
   }
 
-  test_class_fromInstanceCreation() {
+  Future<void> test_class_fromInstanceCreation() {
     addTestFile('''
 class Test {
   Test() {}
@@ -1455,7 +1455,7 @@
     );
   }
 
-  test_class_fromInstanceCreation_namedConstructor() {
+  Future<void> test_class_fromInstanceCreation_namedConstructor() {
     addTestFile('''
 class Test {
   Test.named() {}
@@ -1484,7 +1484,7 @@
     );
   }
 
-  test_class_fromInstanceCreation_onNew() {
+  Future<void> test_class_fromInstanceCreation_onNew() {
     addTestFile('''
 class Test {
   Test() {}
@@ -1513,7 +1513,7 @@
     );
   }
 
-  test_class_fromInstanceCreation_onNew_namedConstructor() {
+  Future<void> test_class_fromInstanceCreation_onNew_namedConstructor() {
     addTestFile('''
 class Test {
   Test.named() {}
@@ -1542,7 +1542,7 @@
     );
   }
 
-  test_class_options_fatalError() {
+  Future<void> test_class_options_fatalError() {
     addTestFile('''
 class Test {}
 main() {
@@ -1559,7 +1559,7 @@
     });
   }
 
-  test_class_validateOnly() {
+  Future<void> test_class_validateOnly() {
     addTestFile('''
 class Test {}
 main() {
@@ -1577,7 +1577,7 @@
     });
   }
 
-  test_class_warning() {
+  Future<void> test_class_warning() {
     addTestFile('''
 class Test {}
 main() {
@@ -1613,7 +1613,7 @@
     });
   }
 
-  test_classMember_field() {
+  Future<void> test_classMember_field() {
     addTestFile('''
 class A {
   var test = 0;
@@ -1636,7 +1636,7 @@
 ''');
   }
 
-  test_classMember_field_onFieldFormalParameter() {
+  Future<void> test_classMember_field_onFieldFormalParameter() {
     addTestFile('''
 class A {
   var test = 0;
@@ -1659,7 +1659,7 @@
 ''');
   }
 
-  test_classMember_field_onFieldFormalParameter_named() {
+  Future<void> test_classMember_field_onFieldFormalParameter_named() {
     addTestFile('''
 class A {
   final int test;
@@ -1682,7 +1682,7 @@
 ''');
   }
 
-  test_classMember_getter() {
+  Future<void> test_classMember_getter() {
     addTestFile('''
 class A {
   get test => 0;
@@ -1703,7 +1703,7 @@
 ''');
   }
 
-  test_classMember_method() {
+  Future<void> test_classMember_method() {
     addTestFile('''
 class A {
   test() {}
@@ -1730,7 +1730,7 @@
 ''');
   }
 
-  test_classMember_method_potential() {
+  Future<void> test_classMember_method_potential() {
     addTestFile('''
 class A {
   test() {}
@@ -1757,7 +1757,7 @@
     });
   }
 
-  test_classMember_setter() {
+  Future<void> test_classMember_setter() {
     addTestFile('''
 class A {
   set test(x) {}
@@ -1778,7 +1778,7 @@
 ''');
   }
 
-  test_constructor_fromFactoryRedirectingConstructor() {
+  Future<void> test_constructor_fromFactoryRedirectingConstructor() {
     addTestFile('''
 class A {
   A() = B.test;
@@ -1807,7 +1807,7 @@
     );
   }
 
-  test_constructor_fromInstanceCreation() {
+  Future<void> test_constructor_fromInstanceCreation() {
     addTestFile('''
 class A {
   A.test() {}
@@ -1836,7 +1836,7 @@
     );
   }
 
-  test_feedback() {
+  Future<void> test_feedback() {
     addTestFile('''
 class Test {}
 main() {
@@ -1853,7 +1853,7 @@
     });
   }
 
-  test_function() {
+  Future<void> test_function() {
     addTestFile('''
 test() {}
 main() {
@@ -1872,7 +1872,7 @@
 ''');
   }
 
-  test_importPrefix_add() {
+  Future<void> test_importPrefix_add() {
     addTestFile('''
 import 'dart:math';
 import 'dart:async';
@@ -1900,7 +1900,7 @@
         });
   }
 
-  test_importPrefix_remove() {
+  Future<void> test_importPrefix_remove() {
     addTestFile('''
 import 'dart:math' as test;
 import 'dart:async' as test;
@@ -1928,7 +1928,7 @@
         });
   }
 
-  test_init_fatalError_noElement() {
+  Future<void> test_init_fatalError_noElement() {
     addTestFile('// nothing to rename');
     return getRefactoringResult(() {
       return sendRenameRequest('// nothing', null);
@@ -1940,7 +1940,7 @@
     });
   }
 
-  test_library_libraryDirective() {
+  Future<void> test_library_libraryDirective() {
     addTestFile('''
 library aaa.bbb.ccc;
 ''');
@@ -1951,7 +1951,7 @@
 ''');
   }
 
-  test_library_libraryDirective_name() {
+  Future<void> test_library_libraryDirective_name() {
     addTestFile('''
 library aaa.bbb.ccc;
 ''');
@@ -1962,7 +1962,7 @@
 ''');
   }
 
-  test_library_libraryDirective_nameDot() {
+  Future<void> test_library_libraryDirective_nameDot() {
     addTestFile('''
 library aaa.bbb.ccc;
 ''');
@@ -1973,7 +1973,7 @@
 ''');
   }
 
-  test_library_partOfDirective() {
+  Future<void> test_library_partOfDirective() {
     newFile(join(testFolder, 'my_lib.dart'), content: '''
 library aaa.bbb.ccc;
 part 'test.dart';
@@ -1988,7 +1988,7 @@
 ''');
   }
 
-  test_localVariable() {
+  Future<void> test_localVariable() {
     addTestFile('''
 main() {
   int test = 0;
@@ -2009,7 +2009,7 @@
 ''');
   }
 
-  test_localVariable_finalCheck_shadowError() {
+  Future<void> test_localVariable_finalCheck_shadowError() {
     addTestFile('''
 main() {
   var newName;
@@ -2027,7 +2027,7 @@
     });
   }
 
-  test_reset_afterCreateChange() {
+  Future<void> test_reset_afterCreateChange() {
     test_simulateRefactoringReset_afterCreateChange = true;
     addTestFile('''
 test() {}
@@ -2042,7 +2042,7 @@
     });
   }
 
-  test_reset_afterFinalConditions() {
+  Future<void> test_reset_afterFinalConditions() {
     test_simulateRefactoringReset_afterFinalConditions = true;
     addTestFile('''
 test() {}
@@ -2057,7 +2057,7 @@
     });
   }
 
-  test_reset_afterInitialConditions() {
+  Future<void> test_reset_afterInitialConditions() {
     test_simulateRefactoringReset_afterInitialConditions = true;
     addTestFile('''
 test() {}
@@ -2072,7 +2072,7 @@
     });
   }
 
-  test_resetOnAnalysis() async {
+  Future<void> test_resetOnAnalysis() async {
     addTestFile('''
 main() {
   int initialName = 0;
diff --git a/pkg/analysis_server/test/edit/sort_members_test.dart b/pkg/analysis_server/test/edit/sort_members_test.dart
index d0b10ad..3eeaf6a 100644
--- a/pkg/analysis_server/test/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/edit/sort_members_test.dart
@@ -14,7 +14,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
   });
@@ -32,7 +32,7 @@
   }
 
   @failingTest
-  test_BAD_doesNotExist() async {
+  Future<void> test_BAD_doesNotExist() async {
     // The analysis driver fails to return an error
     Request request =
         EditSortMembersParams(convertPath('/no/such/file.dart')).toRequest('0');
@@ -41,7 +41,7 @@
         isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_INVALID_FILE));
   }
 
-  test_BAD_hasParseError() async {
+  Future<void> test_BAD_hasParseError() async {
     addTestFile('''
 main() {
   print()
@@ -53,7 +53,7 @@
         isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_PARSE_ERRORS));
   }
 
-  test_BAD_notDartFile() async {
+  Future<void> test_BAD_notDartFile() async {
     Request request = EditSortMembersParams(
       convertPath('/not-a-Dart-file.txt'),
     ).toRequest('0');
@@ -62,7 +62,7 @@
         isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_INVALID_FILE));
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditSortMembersParams('test.dart').toRequest('0');
     var response = await waitResponse(request);
     expect(
@@ -71,7 +71,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditSortMembersParams(convertPath('/foo/../bar/test.dart'))
         .toRequest('0');
     var response = await waitResponse(request);
@@ -81,7 +81,7 @@
     );
   }
 
-  test_OK_afterWaitForAnalysis() async {
+  Future<void> test_OK_afterWaitForAnalysis() async {
     addTestFile('''
 class C {}
 class A {}
@@ -95,7 +95,7 @@
 ''');
   }
 
-  test_OK_classMembers_method() async {
+  Future<void> test_OK_classMembers_method() async {
     addTestFile('''
 class A {
   c() {}
@@ -112,7 +112,7 @@
 ''');
   }
 
-  test_OK_directives() async {
+  Future<void> test_OK_directives() async {
     addTestFile('''
 library lib;
 
@@ -163,7 +163,7 @@
 ''');
   }
 
-  test_OK_directives_withAnnotation() async {
+  Future<void> test_OK_directives_withAnnotation() async {
     addTestFile('''
 library lib;
 
@@ -197,7 +197,7 @@
 ''');
   }
 
-  test_OK_genericFunctionType() async {
+  Future<void> test_OK_genericFunctionType() async {
     newFile('$projectPath/analysis_options.yaml', content: '''
 analyzer:
   strong-mode: true
@@ -248,7 +248,7 @@
 ''');
   }
 
-  test_OK_unitMembers_class() async {
+  Future<void> test_OK_unitMembers_class() async {
     addTestFile('''
 class C {}
 class A {}
diff --git a/pkg/analysis_server/test/edit/statement_completion_test.dart b/pkg/analysis_server/test/edit/statement_completion_test.dart
index 1c0d1da..4bcd67f 100644
--- a/pkg/analysis_server/test/edit/statement_completion_test.dart
+++ b/pkg/analysis_server/test/edit/statement_completion_test.dart
@@ -12,7 +12,7 @@
 import '../analysis_abstract.dart';
 import '../mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatementCompletionTest);
   });
@@ -29,7 +29,7 @@
     handler = EditDomainHandler(server);
   }
 
-  test_invalidFilePathFormat_notAbsolute() async {
+  Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request =
         EditGetStatementCompletionParams('test.dart', 0).toRequest('0');
     var response = await waitResponse(request);
@@ -39,7 +39,7 @@
     );
   }
 
-  test_invalidFilePathFormat_notNormalized() async {
+  Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditGetStatementCompletionParams(
             convertPath('/foo/../bar/test.dart'), 0)
         .toRequest('0');
@@ -50,7 +50,7 @@
     );
   }
 
-  test_plainEnterFromStart() async {
+  Future<void> test_plainEnterFromStart() async {
     addTestFile('''
 main() {
   int v = 1;
@@ -66,7 +66,7 @@
 ''');
   }
 
-  test_plainOleEnter() async {
+  Future<void> test_plainOleEnter() async {
     addTestFile('''
 main() {
   int v = 1;
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_plainOleEnterWithError() async {
+  Future<void> test_plainOleEnterWithError() async {
     addTestFile('''
 main() {
   int v =
@@ -123,7 +123,7 @@
     fail('Expected to find |$message| but got: ' + change.message);
   }
 
-  _prepareCompletion(String search,
+  Future<void> _prepareCompletion(String search,
       {bool atStart = false, bool atEnd = false, int delta = 0}) async {
     int offset = findOffset(search);
     if (atStart) {
@@ -134,7 +134,7 @@
     await _prepareCompletionAt(offset + delta);
   }
 
-  _prepareCompletionAt(int offset) async {
+  Future<void> _prepareCompletionAt(int offset) async {
     Request request =
         EditGetStatementCompletionParams(testFile, offset).toRequest('0');
     Response response = await waitResponse(request);
diff --git a/pkg/analysis_server/test/edit/test_all.dart b/pkg/analysis_server/test/edit/test_all.dart
index 62595d3..4f7fa7d 100644
--- a/pkg/analysis_server/test/edit/test_all.dart
+++ b/pkg/analysis_server/test/edit/test_all.dart
@@ -14,7 +14,7 @@
 import 'statement_completion_test.dart' as statement_completion;
 import 'token_details_test.dart' as token_details;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     assists.main();
     fixes.main();
diff --git a/pkg/analysis_server/test/edit/token_details_test.dart b/pkg/analysis_server/test/edit/token_details_test.dart
index d528814..f45edeb 100644
--- a/pkg/analysis_server/test/edit/token_details_test.dart
+++ b/pkg/analysis_server/test/edit/token_details_test.dart
@@ -10,7 +10,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionListTokenDetailsTest);
   });
@@ -34,7 +34,7 @@
     completionHandler = CompletionDomainHandler(server);
   }
 
-  test_packageUri() async {
+  Future<void> test_packageUri() async {
     newFile('/project/.packages', content: '''
 project:lib/
 ''');
diff --git a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
index 31073f1..1a31955 100644
--- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OptionsIntegrationTest);
   });
@@ -23,7 +23,7 @@
     standardAnalysisSetup();
   }
 
-  test_option_warning_newOptionFile() async {
+  Future<void> test_option_warning_newOptionFile() async {
     String options = sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
     writeFile(options, '''
 linter:
@@ -48,7 +48,7 @@
     expect(error.location.startColumn, 7);
   }
 
-  test_option_warning_oldOptionFile() async {
+  Future<void> test_option_warning_oldOptionFile() async {
     String options = sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_FILE);
     writeFile(options, '''
 linter:
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index 3b215e1..55d0fa2 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorIntegrationTest);
   });
@@ -18,7 +18,7 @@
 @reflectiveTest
 class AnalysisErrorIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_analysisRootDoesNotExist() async {
+  Future<void> test_analysisRootDoesNotExist() async {
     String packagePath = sourcePath('package');
     String filePath = sourcePath('package/lib/test.dart');
     String content = '''
@@ -36,7 +36,7 @@
     expect(errors[0].location.file, equals(filePath));
   }
 
-  test_detect_simple_error() {
+  Future<void> test_detect_simple_error() {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, '''
 main() {
@@ -51,7 +51,7 @@
     });
   }
 
-  test_super_mixins_disabled() async {
+  Future<void> test_super_mixins_disabled() async {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, '''
 class Test extends Object with C {
@@ -84,7 +84,7 @@
   }
 
   @failingTest
-  test_super_mixins_enabled() async {
+  Future<void> test_super_mixins_enabled() async {
     // We see errors here with the new driver (#28870).
     //  Expected: empty
     //    Actual: [
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
index 8abfd1d..c1d728b 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
@@ -12,7 +12,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainGetErrorsTest);
   });
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index f9e0c95..76563d4 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class GetErrorsTest extends AbstractAnalysisServerIntegrationTest {
-  test_getErrors() async {
+  Future<void> test_getErrors() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 main() {
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index f665ff1..56d7cb3 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -11,7 +11,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetHoverIntegrationTest);
   });
@@ -135,13 +135,13 @@
   }
 
   @override
-  setUp() {
+  Future<void> setUp() {
     return super.setUp().then((_) {
       pathname = sourcePath('test.dart');
     });
   }
 
-  test_getHover() {
+  Future<void> test_getHover() {
     writeFile(pathname, text);
     standardAnalysisSetup();
 
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index e5c62b4..64a83e2 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -12,7 +12,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest);
   });
@@ -36,7 +36,8 @@
    * with the first character that matches [target] and having the given
    * [length] matches the given list of [expected] imported elements.
    */
-  checkElements(String target, List<ImportedElements> expected) async {
+  Future<void> checkElements(
+      String target, List<ImportedElements> expected) async {
     bool equals(
         ImportedElements actualElements, ImportedElements expectedElements) {
       if (actualElements.path.endsWith(expectedElements.path) &&
@@ -93,13 +94,13 @@
   }
 
   @override
-  setUp() {
+  Future<void> setUp() {
     return super.setUp().then((_) {
       pathname = sourcePath('test.dart');
     });
   }
 
-  test_getImportedElements_none() async {
+  Future<void> test_getImportedElements_none() async {
     text = r'''
 main() {}
 ''';
@@ -110,7 +111,7 @@
     await checkNoElements('main() {}');
   }
 
-  test_getImportedElements_some() async {
+  Future<void> test_getImportedElements_some() async {
     String selection = r'''
 main() {
   Random r = new Random();
diff --git a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
index 7f30150..8ba8b93 100644
--- a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetLibraryDependenciesTest);
   });
@@ -17,7 +17,7 @@
 @reflectiveTest
 class GetLibraryDependenciesTest extends AbstractAnalysisServerIntegrationTest {
   @failingTest
-  test_libraryDeps() async {
+  Future<void> test_libraryDeps() async {
     // This fails with the new analysis driver ('Bad state: Should not be used
     // with the new analysis driver') - #29310.
     String pathname = sourcePath('test.dart');
diff --git a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
index b3943bc..a51347d 100644
--- a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetNavigationTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class GetNavigationTest extends AbstractAnalysisServerIntegrationTest {
-  test_navigation() async {
+  Future<void> test_navigation() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 class Foo {}
@@ -43,7 +43,7 @@
   }
 
   @failingTest
-  test_navigation_no_result() async {
+  Future<void> test_navigation_no_result() async {
     // This fails - it returns navigation results for a whitespace area (#28799).
     String pathname = sourcePath('test.dart');
     String text = r'''
diff --git a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
index 294502a..1ba0993 100644
--- a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
@@ -10,7 +10,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetReachableSourcesTest);
   });
@@ -19,7 +19,7 @@
 @reflectiveTest
 class GetReachableSourcesTest extends AbstractAnalysisServerIntegrationTest {
   @failingTest
-  test_reachable() async {
+  Future<void> test_reachable() async {
     // This fails with the new analysis driver ('Bad state: Should not be used
     // with the new analysis driver') - #29311.
     String pathname = sourcePath('test.dart');
diff --git a/pkg/analysis_server/test/integration/analysis/highlights2_test.dart b/pkg/analysis_server/test/integration/analysis/highlights2_test.dart
index 9967f27..fee617f 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights2_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights2_test.dart
@@ -11,7 +11,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
   });
@@ -26,7 +26,7 @@
     highlights.remove(type);
   }
 
-  computeHighlights(String pathname, String text) async {
+  Future<void> computeHighlights(String pathname, String text) async {
     writeFile(pathname, text);
     standardAnalysisSetup();
     sendAnalysisSetSubscriptions({
@@ -61,7 +61,7 @@
         useAnalysisHighlight2: true);
   }
 
-  test_highlights() async {
+  Future<void> test_highlights() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:async' as async;
@@ -165,7 +165,7 @@
     expect(highlights, isEmpty);
   }
 
-  test_highlights_mixin() async {
+  Future<void> test_highlights_mixin() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 mixin M on A implements B {}
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index 375cf79..1ad5fe2 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
   });
@@ -24,7 +24,7 @@
     highlights.remove(type);
   }
 
-  computeHighlights(String pathname, String text) async {
+  Future<void> computeHighlights(String pathname, String text) async {
     writeFile(pathname, text);
     standardAnalysisSetup();
     sendAnalysisSetSubscriptions({
@@ -48,7 +48,7 @@
     await analysisFinished;
   }
 
-  test_highlights() async {
+  Future<void> test_highlights() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:async' as async;
@@ -148,7 +148,7 @@
     expect(highlights, isEmpty);
   }
 
-  test_highlights_mixin() async {
+  Future<void> test_highlights_mixin() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 mixin M on A implements B {}
diff --git a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
index 585120f..38428ff 100644
--- a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SdkVersionAsyncExportedFromCoreIntegrationTest);
   });
@@ -16,7 +16,7 @@
 @reflectiveTest
 class SdkVersionAsyncExportedFromCoreIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_update_pubspec() async {
+  Future<void> test_update_pubspec() async {
     var pubspecPath = sourcePath('pubspec.yaml');
     writeFile(pubspecPath, r'''
 name: test
diff --git a/pkg/analysis_server/test/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart
index ebe8986..faa2467 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LintIntegrationTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class LintIntegrationTest extends AbstractAnalysisServerIntegrationTest {
-  test_no_lints_when_not_specified() async {
+  Future<void> test_no_lints_when_not_specified() async {
     String source = sourcePath('test.dart');
     writeFile(source, '''
 class abc { // lint: not CamelCase (should get ignored though)
@@ -31,7 +31,7 @@
     expect(errors, hasLength(0));
   }
 
-  test_simple_lint_newOptionsFile() async {
+  Future<void> test_simple_lint_newOptionsFile() async {
     writeFile(sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE), '''
 linter:
   rules:
@@ -56,7 +56,7 @@
     expect(error.type, AnalysisErrorType.LINT);
   }
 
-  test_simple_lint_oldOptionsFile() async {
+  Future<void> test_simple_lint_oldOptionsFile() async {
     writeFile(sourcePath(AnalysisEngine.ANALYSIS_OPTIONS_FILE), '''
 linter:
   rules:
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 61c3f86..46181e3 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNavigationTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class AnalysisNavigationTest extends AbstractAnalysisServerIntegrationTest {
-  test_navigation() async {
+  Future<void> test_navigation() async {
     String pathname1 = sourcePath('test1.dart');
     String text1 = r'''
 library foo;
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 787aa63..8ecd96e 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OccurrencesTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class OccurrencesTest extends AbstractAnalysisServerIntegrationTest {
-  test_occurrences() {
+  Future<void> test_occurrences() {
     String pathname = sourcePath('test.dart');
     String text = r'''
 main() {
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 41ec2b9..8b87756 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OutlineTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class OutlineTest extends AbstractAnalysisServerIntegrationTest {
-  test_outline() {
+  Future<void> test_outline() {
     String pathname = sourcePath('test.dart');
     String text = r'''
 class Class1 {
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index 9505e02b..58a4f75 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OverridesTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class OverridesTest extends AbstractAnalysisServerIntegrationTest {
-  test_overrides() {
+  Future<void> test_overrides() {
     String pathname = sourcePath('test.dart');
     String text = r'''
 abstract class Interface1 {
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 46f961c..55f0d19 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -12,7 +12,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
   });
@@ -20,7 +20,7 @@
 
 @reflectiveTest
 class SetAnalysisRootsTest extends AbstractAnalysisServerIntegrationTest {
-  xtest_package_root() async {
+  Future<void> xtest_package_root() async {
     // TODO(devoncarew): This test fails intermittently on the bots; #33879.
     String projPath = sourcePath('project');
     String mainPath = path.join(projPath, 'main.dart');
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
index 4985965..cc38da9 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
@@ -15,7 +15,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
   });
@@ -24,7 +24,7 @@
 @reflectiveTest
 class ReanalyzeTest extends AbstractAnalysisServerIntegrationTest {
   @TestTimeout(Timeout.factor(2))
-  test_reanalyze_concurrent() {
+  Future<void> test_reanalyze_concurrent() {
     String pathname = sourcePath('test.dart');
     String text = '''
 // Do a bunch of imports so that analysis has some work to do.
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
index 60fe554..153eed1 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class ReanalyzeTest extends AbstractAnalysisServerIntegrationTest {
-  test_reanalyze() {
+  Future<void> test_reanalyze() {
     String pathname = sourcePath('test.dart');
     String text = 'main() {}';
     writeFile(pathname, text);
diff --git a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
index c0aa33e..18be9fa 100644
--- a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class SetAnalysisRootsTest extends AbstractAnalysisServerIntegrationTest {
-  test_options() async {
+  Future<void> test_options() async {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, '''
 class Foo {
diff --git a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
index eeef19e..a8a7489 100644
--- a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetGeneralSubscriptionsTest);
   });
@@ -18,7 +18,7 @@
 @reflectiveTest
 class SetGeneralSubscriptionsTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_options() async {
+  Future<void> test_options() async {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, '''
 class Foo {
diff --git a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
index e1ef4cf..cd1e3bd 100644
--- a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetPriorityFilesTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class SetPriorityFilesTest extends AbstractAnalysisServerIntegrationTest {
-  test_options() async {
+  Future<void> test_options() async {
     String pathname = sourcePath('foo.dart');
     writeFile(pathname, 'class Foo { void baz() {} }');
     writeFile(sourcePath('bar.dart'), 'class Bar { void baz() {} }');
diff --git a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
index b5d60d4..79c0461 100644
--- a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class SetSubscriptionsTest extends AbstractAnalysisServerIntegrationTest {
-  test_subscriptions() async {
+  Future<void> test_subscriptions() async {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, '''
 class Foo {
diff --git a/pkg/analysis_server/test/integration/analysis/test_all.dart b/pkg/analysis_server/test/integration/analysis/test_all.dart
index ea09692..2a760bf 100644
--- a/pkg/analysis_server/test/integration/analysis/test_all.dart
+++ b/pkg/analysis_server/test/integration/analysis/test_all.dart
@@ -33,10 +33,7 @@
 import 'update_content_test.dart' as update_content_test;
 import 'update_options_test.dart' as update_options_test;
 
-/**
- * Utility for manually running all integration tests.
- */
-main() {
+void main() {
   defineReflectiveSuite(() {
     analysis_options_test.main();
     error_test.main();
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index f3a775a..a235d37 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class UpdateContentTest extends AbstractAnalysisServerIntegrationTest {
-  test_updateContent_list() {
+  Future<void> test_updateContent_list() {
     String pathname = sourcePath('test.dart');
     String goodText = r'''
 main() {
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index eb646fe..c2c8ce0 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class UpdateContentTest extends AbstractAnalysisServerIntegrationTest {
-  test_updateContent() async {
+  Future<void> test_updateContent() async {
     String path = sourcePath('test.dart');
     String goodText = r'''
 main() {
@@ -58,7 +58,7 @@
     expect(currentAnalysisErrors[path], isNotEmpty);
   }
 
-  test_updateContent_multipleAdds() async {
+  Future<void> test_updateContent_multipleAdds() async {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, r'''
 class Person {
diff --git a/pkg/analysis_server/test/integration/analysis/update_options_test.dart b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
index d3b167d..d61bcde 100644
--- a/pkg/analysis_server/test/integration/analysis/update_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateOptionsTest);
   });
@@ -17,7 +17,7 @@
 @reflectiveTest
 class UpdateOptionsTest extends AbstractAnalysisServerIntegrationTest {
   @failingTest
-  test_options() async {
+  Future<void> test_options() async {
     // We fail after the first analysis.updateOptions - we should not see a hint
     // for the unused import (#28800).
     String pathname = sourcePath('test.dart');
diff --git a/pkg/analysis_server/test/integration/analytics/enable_test.dart b/pkg/analysis_server/test/integration/analytics/enable_test.dart
index 19296ee..a6d0138 100644
--- a/pkg/analysis_server/test/integration/analytics/enable_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/enable_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EnableTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class EnableTest extends AbstractAnalysisServerIntegrationTest {
-  test_call_enable() async {
+  Future<void> test_call_enable() async {
     standardAnalysisSetup();
 
     // Toggle the value twice; do light verification of the changes, as the
diff --git a/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart b/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
index 15b5cf8..a38ec1f 100644
--- a/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsEnabledTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class IsEnabledTest extends AbstractAnalysisServerIntegrationTest {
-  test_isEnabled() async {
+  Future<void> test_isEnabled() async {
     standardAnalysisSetup();
 
     AnalyticsIsEnabledResult result = await sendAnalyticsIsEnabled();
diff --git a/pkg/analysis_server/test/integration/analytics/send_event_test.dart b/pkg/analysis_server/test/integration/analytics/send_event_test.dart
index 5a0b09e..d23b104 100644
--- a/pkg/analysis_server/test/integration/analytics/send_event_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/send_event_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SendEventTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class SendEventTest extends AbstractAnalysisServerIntegrationTest {
-  test_send_event() async {
+  Future<void> test_send_event() async {
     standardAnalysisSetup();
 
     // Disable analytics.
diff --git a/pkg/analysis_server/test/integration/analytics/send_timing_test.dart b/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
index 141e3b7..3d7854f 100644
--- a/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SendTimingTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class SendTimingTest extends AbstractAnalysisServerIntegrationTest {
-  test_send_timing() async {
+  Future<void> test_send_timing() async {
     standardAnalysisSetup();
 
     // Disable analytics.
diff --git a/pkg/analysis_server/test/integration/analytics/test_all.dart b/pkg/analysis_server/test/integration/analytics/test_all.dart
index f9e7963..4781bad 100644
--- a/pkg/analysis_server/test/integration/analytics/test_all.dart
+++ b/pkg/analysis_server/test/integration/analytics/test_all.dart
@@ -9,7 +9,7 @@
 import 'send_event_test.dart' as send_event_test;
 import 'send_timing_test.dart' as send_timing_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     enable_test.main();
     is_enabled_test.main();
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 443c24c..6848ce3 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetSuggestionsTest);
   });
@@ -32,7 +32,7 @@
         content.substring(completionOffset + 1);
   }
 
-  test_getSuggestions() async {
+  Future<void> test_getSuggestions() async {
     setTestSource('test.dart', r'''
 String test = '';
 main() {
@@ -54,7 +54,7 @@
         (CompletionSuggestion suggestion) => suggestion.completion == 'length');
   }
 
-  test_getSuggestions_onlyOverlay() async {
+  Future<void> test_getSuggestions_onlyOverlay() async {
     setTestSource('test.dart', r'''
 String test = '';
 main() {
@@ -78,7 +78,7 @@
         (CompletionSuggestion suggestion) => suggestion.completion == 'length');
   }
 
-  test_getSuggestions_onlyOverlay_noWait() async {
+  Future<void> test_getSuggestions_onlyOverlay_noWait() async {
     setTestSource('test.dart', r'''
 String test = '';
 main() {
@@ -99,7 +99,7 @@
         (CompletionSuggestion suggestion) => suggestion.completion == 'length');
   }
 
-  test_getSuggestions_sourceMissing_noWait() {
+  Future<void> test_getSuggestions_sourceMissing_noWait() {
     path = sourcePath('does_not_exist.dart');
     // Do not write the file to "disk"
     //   writeFile(pathname, text);
diff --git a/pkg/analysis_server/test/integration/completion/list_token_details_test.dart b/pkg/analysis_server/test/integration/completion/list_token_details_test.dart
index c49b7fb..f649dc9 100644
--- a/pkg/analysis_server/test/integration/completion/list_token_details_test.dart
+++ b/pkg/analysis_server/test/integration/completion/list_token_details_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ListTokenDetailsTest);
   });
@@ -35,7 +35,7 @@
     return Future.wait(futures);
   }
 
-  test_getSuggestions() async {
+  Future<void> test_getSuggestions() async {
     String aPath = path.join(sourceDirectory.path, 'a');
     String aLibPath = path.join(aPath, 'lib');
     writeFile(path.join(aLibPath, 'a.dart'), '''
diff --git a/pkg/analysis_server/test/integration/completion/test_all.dart b/pkg/analysis_server/test/integration/completion/test_all.dart
index 11ed77f..0462e31 100644
--- a/pkg/analysis_server/test/integration/completion/test_all.dart
+++ b/pkg/analysis_server/test/integration/completion/test_all.dart
@@ -7,7 +7,7 @@
 import 'get_suggestions_test.dart' as get_suggestions;
 import 'list_token_details_test.dart' as list_token_details;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     get_suggestions.main();
     list_token_details.main();
diff --git a/pkg/analysis_server/test/integration/coverage_test.dart b/pkg/analysis_server/test/integration/coverage_test.dart
index 7960fed..3941a75 100644
--- a/pkg/analysis_server/test/integration/coverage_test.dart
+++ b/pkg/analysis_server/test/integration/coverage_test.dart
@@ -12,7 +12,7 @@
 import '../../tool/spec/from_html.dart';
 
 /// Define tests to fail if there's no mention in the coverage file.
-main() {
+void main() {
   Api api;
   File coverageFile;
   String pathPrefix;
diff --git a/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart b/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
index 1eb2a17..bbd1211 100644
--- a/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetDiagnosticsTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class GetDiagnosticsTest extends AbstractAnalysisServerIntegrationTest {
-  test_getDiagnostics() async {
+  Future<void> test_getDiagnostics() async {
     standardAnalysisSetup();
 
     DiagnosticGetDiagnosticsResult result =
diff --git a/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart b/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
index c202660..8ac45b1 100644
--- a/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
@@ -11,7 +11,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetServerPortTest);
   });
@@ -19,7 +19,7 @@
 
 @reflectiveTest
 class GetServerPortTest extends AbstractAnalysisServerIntegrationTest {
-  test_connect() async {
+  Future<void> test_connect() async {
     standardAnalysisSetup();
 
     DiagnosticGetServerPortResult result = await sendDiagnosticGetServerPort();
diff --git a/pkg/analysis_server/test/integration/diagnostic/test_all.dart b/pkg/analysis_server/test/integration/diagnostic/test_all.dart
index 5265193..50293e2 100644
--- a/pkg/analysis_server/test/integration/diagnostic/test_all.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/test_all.dart
@@ -7,7 +7,7 @@
 import 'get_diagnostics_test.dart' as get_diagnostics_test;
 import 'get_server_port_test.dart' as get_server_port_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     get_diagnostics_test.main();
     get_server_port_test.main();
diff --git a/pkg/analysis_server/test/integration/edit/dartfix_test.dart b/pkg/analysis_server/test/integration/edit/dartfix_test.dart
index 31942a9..f99498e 100644
--- a/pkg/analysis_server/test/integration/edit/dartfix_test.dart
+++ b/pkg/analysis_server/test/integration/edit/dartfix_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DartfixTest);
   });
@@ -25,7 +25,7 @@
     standardAnalysisSetup();
   }
 
-  test_dartfix_exclude() async {
+  Future<void> test_dartfix_exclude() async {
     setupTarget();
     EditDartfixResult result = await sendEditDartfix([(sourceDirectory.path)],
         excludedFixes: ['convert_class_to_mixin']);
@@ -34,7 +34,7 @@
     expect(result.edits.length, 0);
   }
 
-  test_dartfix_include() async {
+  Future<void> test_dartfix_include() async {
     setupTarget();
     EditDartfixResult result = await sendEditDartfix([(sourceDirectory.path)],
         includedFixes: ['convert_class_to_mixin']);
@@ -43,7 +43,7 @@
     expect(result.edits.length, greaterThanOrEqualTo(1));
   }
 
-  test_dartfix_include_other() async {
+  Future<void> test_dartfix_include_other() async {
     setupTarget();
     EditDartfixResult result = await sendEditDartfix([(sourceDirectory.path)],
         includedFixes: ['prefer_int_literals']);
diff --git a/pkg/analysis_server/test/integration/edit/format_test.dart b/pkg/analysis_server/test/integration/edit/format_test.dart
index 4f62ef2..530d73a 100644
--- a/pkg/analysis_server/test/integration/edit/format_test.dart
+++ b/pkg/analysis_server/test/integration/edit/format_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FormatTest);
   });
@@ -46,7 +46,7 @@
     return pathname;
   }
 
-  test_format() async {
+  Future<void> test_format() async {
     String pathname = formatTestSetup();
 
     EditFormatResult result = await sendEditFormat(pathname, 0, 0);
@@ -55,7 +55,7 @@
     expect(result.selectionLength, 0);
   }
 
-  test_format_preserve_selection() async {
+  Future<void> test_format_preserve_selection() async {
     String pathname = formatTestSetup();
 
     // format with 'bar' selected
@@ -67,7 +67,7 @@
     expect(result.selectionLength, 'bar'.length);
   }
 
-  test_format_with_errors() async {
+  Future<void> test_format_with_errors() async {
     String pathname = formatTestSetup(withErrors: true);
 
     try {
diff --git a/pkg/analysis_server/test/integration/edit/get_assists_test.dart b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
index f2b57dc..a5fff4f 100644
--- a/pkg/analysis_server/test/integration/edit/get_assists_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetAssistsTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class GetAssistsTest extends AbstractAnalysisServerIntegrationTest {
-  test_has_assists() async {
+  Future<void> test_has_assists() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:async';
diff --git a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
index ddbcfe6..7b11a6e 100644
--- a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetAvailableRefactoringsTest);
   });
@@ -17,7 +17,7 @@
 @reflectiveTest
 class GetAvailableRefactoringsTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_has_refactorings() async {
+  Future<void> test_has_refactorings() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 void foo() { }
diff --git a/pkg/analysis_server/test/integration/edit/get_dartfix_info_test.dart b/pkg/analysis_server/test/integration/edit/get_dartfix_info_test.dart
index b62ed77..3d445e0 100644
--- a/pkg/analysis_server/test/integration/edit/get_dartfix_info_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_dartfix_info_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetDartfixInfoTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class GetDartfixInfoTest extends AbstractAnalysisServerIntegrationTest {
-  test_getDartfixInfo() async {
+  Future<void> test_getDartfixInfo() async {
     standardAnalysisSetup();
     EditGetDartfixInfoResult info = await sendEditGetDartfixInfo();
     expect(info.fixes.length, greaterThanOrEqualTo(3));
diff --git a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
index 81af6dea..23e238a 100644
--- a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetFixesTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class GetFixesTest extends AbstractAnalysisServerIntegrationTest {
-  test_has_fixes() async {
+  Future<void> test_has_fixes() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 FutureOr f;
@@ -44,7 +44,7 @@
     expect(change.edits.first.edits, hasLength(1));
   }
 
-  test_no_fixes() async {
+  Future<void> test_no_fixes() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:async';
diff --git a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
index b880bf3..61b0d99 100644
--- a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetPostfixCompletionTest);
   });
@@ -18,7 +18,7 @@
 @reflectiveTest
 class GetPostfixCompletionTest extends AbstractAnalysisServerIntegrationTest {
   @TestTimeout(Timeout.factor(2))
-  test_postfix_completion() async {
+  Future<void> test_postfix_completion() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 void bar() {
diff --git a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
index a82f80f..bb0d602 100644
--- a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetRefactoringTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class GetRefactoringTest extends AbstractAnalysisServerIntegrationTest {
-  test_rename() async {
+  Future<void> test_rename() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 void foo() { }
diff --git a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
index bd1322a..5b12cc8 100644
--- a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetStatementCompletionTest);
   });
@@ -18,7 +18,7 @@
 @reflectiveTest
 class GetStatementCompletionTest extends AbstractAnalysisServerIntegrationTest {
   @TestTimeout(Timeout.factor(2))
-  test_statement_completion() async {
+  Future<void> test_statement_completion() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 void bar() { foo() } // missing semi-colon
diff --git a/pkg/analysis_server/test/integration/edit/import_elements_test.dart b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
index e940211..15c6cda 100644
--- a/pkg/analysis_server/test/integration/edit/import_elements_test.dart
+++ b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
@@ -13,7 +13,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportElementsIntegrationTest);
   });
@@ -31,7 +31,8 @@
    * Check that an edit.importElements request with the given list of [elements]
    * produces the [expected] list of edits.
    */
-  checkEdits(List<ImportedElements> elements, List<SourceEdit> expected,
+  Future<void> checkEdits(
+      List<ImportedElements> elements, List<SourceEdit> expected,
       {String expectedFile}) async {
     bool equals(SourceEdit actualEdit, SourceEdit expectedEdit) {
       return actualEdit.offset == expectedEdit.offset &&
@@ -87,7 +88,7 @@
     pathname = sourcePath('test.dart');
   }
 
-  test_importElements_definingUnit() async {
+  Future<void> test_importElements_definingUnit() async {
     writeFile(pathname, 'main() {}');
     standardAnalysisSetup();
     await analysisFinished;
@@ -103,7 +104,7 @@
     ]);
   }
 
-  test_importElements_noEdits() async {
+  Future<void> test_importElements_noEdits() async {
     writeFile(pathname, '');
     standardAnalysisSetup();
     await analysisFinished;
@@ -111,7 +112,7 @@
     await checkNoEdits(<ImportedElements>[]);
   }
 
-  test_importElements_part() async {
+  Future<void> test_importElements_part() async {
     String libName = sourcePath('lib.dart');
     writeFile(libName, '''
 part 'test.dart';
diff --git a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
index 7c65699..712a698 100644
--- a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
+++ b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsPostfixCompletionApplicableTest);
   });
@@ -17,7 +17,7 @@
 @reflectiveTest
 class IsPostfixCompletionApplicableTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_is_postfix_completion_applicable() async {
+  Future<void> test_is_postfix_completion_applicable() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 void bar() {
diff --git a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
index 63f13e4..4c96713 100644
--- a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
+++ b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ListPostfixCompletionTemplatesTest);
   });
@@ -17,7 +17,7 @@
 @reflectiveTest
 class ListPostfixCompletionTemplatesTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_list_postfix_completion_templates() async {
+  Future<void> test_list_postfix_completion_templates() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 void bar() {
diff --git a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
index e5b0a46..410df1b 100644
--- a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class OrganizeDirectivesTest extends AbstractAnalysisServerIntegrationTest {
-  test_organize_directives() async {
+  Future<void> test_organize_directives() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:math';
@@ -37,7 +37,7 @@
         "import 'dart:async';\nimport 'dart:math");
   }
 
-  test_organize_directives_no_changes() async {
+  Future<void> test_organize_directives_no_changes() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:async';
@@ -55,7 +55,7 @@
     expect(edit.edits, isEmpty);
   }
 
-  test_organize_directives_with_errors() async {
+  Future<void> test_organize_directives_with_errors() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 import 'dart:async'
diff --git a/pkg/analysis_server/test/integration/edit/sort_members_test.dart b/pkg/analysis_server/test/integration/edit/sort_members_test.dart
index b928b6f..607e05a 100644
--- a/pkg/analysis_server/test/integration/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/integration/edit/sort_members_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class SortMembersTest extends AbstractAnalysisServerIntegrationTest {
-  test_sort() async {
+  Future<void> test_sort() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 int foo;
@@ -32,7 +32,7 @@
     expect(edit.edits.first.replacement, 'bar;\nint foo');
   }
 
-  test_sort_no_changes() async {
+  Future<void> test_sort_no_changes() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 int bar;
@@ -46,7 +46,7 @@
     expect(edit.edits, isEmpty);
   }
 
-  test_sort_with_errors() async {
+  Future<void> test_sort_with_errors() async {
     String pathname = sourcePath('test.dart');
     String text = r'''
 int foo
diff --git a/pkg/analysis_server/test/integration/edit/test_all.dart b/pkg/analysis_server/test/integration/edit/test_all.dart
index 3a71a95..3ac606c 100644
--- a/pkg/analysis_server/test/integration/edit/test_all.dart
+++ b/pkg/analysis_server/test/integration/edit/test_all.dart
@@ -22,7 +22,7 @@
 import 'organize_directives_test.dart' as organize_directives_test;
 import 'sort_members_test.dart' as sort_members_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     dartfix_test.main();
     format_test.main();
diff --git a/pkg/analysis_server/test/integration/execution/create_context_test.dart b/pkg/analysis_server/test/integration/execution/create_context_test.dart
index f73fe9a..3c05f33 100644
--- a/pkg/analysis_server/test/integration/execution/create_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/create_context_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateContextTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class CreateContextTest extends AbstractAnalysisServerIntegrationTest {
-  test_create() async {
+  Future<void> test_create() async {
     standardAnalysisSetup();
     String contextId =
         (await sendExecutionCreateContext(sourceDirectory.path)).id;
diff --git a/pkg/analysis_server/test/integration/execution/delete_context_test.dart b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
index a22a9e8..05b2db7 100644
--- a/pkg/analysis_server/test/integration/execution/delete_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DeleteContextTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class DeleteContextTest extends AbstractAnalysisServerIntegrationTest {
-  test_delete() async {
+  Future<void> test_delete() async {
     String pathname = sourcePath('lib/main.dart');
     writeFile(pathname, '// dummy');
     writeFile(sourcePath('.packages'), 'foo:lib/');
diff --git a/pkg/analysis_server/test/integration/execution/map_uri_test.dart b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
index 8038545..384cc6d 100644
--- a/pkg/analysis_server/test/integration/execution/map_uri_test.dart
+++ b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MapUriTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class MapUriTest extends AbstractAnalysisServerIntegrationTest {
-  test_mapUri() async {
+  Future<void> test_mapUri() async {
     String pathname = sourcePath('lib/main.dart');
     writeFile(pathname, '// dummy');
     writeFile(sourcePath('.packages'), 'foo:lib/');
diff --git a/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
index 82c3739..340ded4 100644
--- a/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class SetSubscriptionsTest extends AbstractAnalysisServerIntegrationTest {
-  test_subscribe() async {
+  Future<void> test_subscribe() async {
     standardAnalysisSetup();
     // ignore: deprecated_member_use_from_same_package
     await sendExecutionSetSubscriptions([ExecutionService.LAUNCH_DATA]);
diff --git a/pkg/analysis_server/test/integration/execution/test_all.dart b/pkg/analysis_server/test/integration/execution/test_all.dart
index 4f6af5d..76aa11d 100644
--- a/pkg/analysis_server/test/integration/execution/test_all.dart
+++ b/pkg/analysis_server/test/integration/execution/test_all.dart
@@ -9,7 +9,7 @@
 import 'map_uri_test.dart' as map_uri_test;
 import 'set_subscriptions_test.dart' as set_subscription_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     create_context_test.main();
     delete_context_test.main();
diff --git a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
index 0d823a9..7646865 100644
--- a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
+++ b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetKytheEntriesTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class GetKytheEntriesTest extends AbstractAnalysisServerIntegrationTest {
-  test_getKytheEntries() async {
+  Future<void> test_getKytheEntries() async {
     writeFile(sourcePath('WORKSPACE'), '');
     String pathname = sourcePath('pkg/test.dart');
     String text = r'''
diff --git a/pkg/analysis_server/test/integration/kythe/test_all.dart b/pkg/analysis_server/test/integration/kythe/test_all.dart
index 0573a6c..c50b940 100644
--- a/pkg/analysis_server/test/integration/kythe/test_all.dart
+++ b/pkg/analysis_server/test/integration/kythe/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'get_kythe_entries_test.dart' as get_kythe_entries_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     get_kythe_entries_test.main();
   }, name: 'kythe');
diff --git a/pkg/analysis_server/test/integration/linter/lint_names_test.dart b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
index ab0166f..17f8287 100644
--- a/pkg/analysis_server/test/integration/linter/lint_names_test.dart
+++ b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
@@ -20,7 +20,7 @@
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
-main() {
+void main() {
   // Set prefix for local or bot execution.
   final pathPrefix =
       FileSystemEntity.isDirectorySync(path.join('test', 'integration'))
diff --git a/pkg/analysis_server/test/integration/linter/test_all.dart b/pkg/analysis_server/test/integration/linter/test_all.dart
index 079a94c..addcf98 100644
--- a/pkg/analysis_server/test/integration/linter/test_all.dart
+++ b/pkg/analysis_server/test/integration/linter/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'lint_names_test.dart' as lint_names;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     lint_names.main();
   }, name: 'linter');
diff --git a/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart b/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart
index d597d84..0184100 100644
--- a/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart
@@ -7,7 +7,7 @@
 
 import 'integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalyzerStatusTest);
   });
@@ -15,27 +15,7 @@
 
 @reflectiveTest
 class AnalyzerStatusTest extends AbstractLspAnalysisServerIntegrationTest {
-  test_afterInitialize() async {
-    const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
-
-    // To avoid races, set up listeners for the notifications before we initialise
-    // and track which event came first to ensure they arrived in the expected
-    // order.
-    bool firstNotificationWasAnalyzing;
-    final startNotification = waitForAnalysisStart()
-        .then((_) => firstNotificationWasAnalyzing ??= true);
-    final completeNotification = waitForAnalysisComplete()
-        .then((_) => firstNotificationWasAnalyzing ??= false);
-
-    await initialize();
-    await startNotification;
-    await completeNotification;
-
-    expect(firstNotificationWasAnalyzing, isTrue);
-  }
-
-  test_afterDocumentEdits() async {
+  Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
     newFile(mainFilePath, content: initialContents);
 
@@ -56,4 +36,24 @@
     await startNotification;
     await completeNotification;
   }
+
+  Future<void> test_afterInitialize() async {
+    const initialContents = 'int a = 1;';
+    newFile(mainFilePath, content: initialContents);
+
+    // To avoid races, set up listeners for the notifications before we initialise
+    // and track which event came first to ensure they arrived in the expected
+    // order.
+    bool firstNotificationWasAnalyzing;
+    final startNotification = waitForAnalysisStart()
+        .then((_) => firstNotificationWasAnalyzing ??= true);
+    final completeNotification = waitForAnalysisComplete()
+        .then((_) => firstNotificationWasAnalyzing ??= false);
+
+    await initialize();
+    await startNotification;
+    await completeNotification;
+
+    expect(firstNotificationWasAnalyzing, isTrue);
+  }
 }
diff --git a/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart b/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart
index 40e2ff6..0763cda 100644
--- a/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart
@@ -7,7 +7,7 @@
 
 import 'integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DiagnosticTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class DiagnosticTest extends AbstractLspAnalysisServerIntegrationTest {
-  test_initialAnalysis() async {
+  Future<void> test_initialAnalysis() async {
     newFile(mainFilePath, content: 'String a = 1;');
 
     final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
@@ -30,7 +30,7 @@
     expect(diagnostic.range.end.character, equals(12));
   }
 
-  test_lints() async {
+  Future<void> test_lints() async {
     newFile(mainFilePath, content: '''main() async => await 1;''');
     newFile(analysisOptionsPath, content: '''
 linter:
diff --git a/pkg/analysis_server/test/integration/lsp_server/initialization_test.dart b/pkg/analysis_server/test/integration/lsp_server/initialization_test.dart
index f38c3dd..7a23822 100644
--- a/pkg/analysis_server/test/integration/lsp_server/initialization_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/initialization_test.dart
@@ -9,7 +9,7 @@
 
 import 'integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InitializationTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class InitializationTest extends AbstractLspAnalysisServerIntegrationTest {
-  test_initialize_invalidParams() async {
+  Future<void> test_initialize_invalidParams() async {
     final params = {'processId': 'invalid'};
     final request = RequestMessage(
       Either2<num, String>.t1(1),
diff --git a/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart b/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
index 6329c7a..5cd0e8d 100644
--- a/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
@@ -46,10 +46,10 @@
     }
   }
 
-  newFile(String path, {String content}) =>
+  void newFile(String path, {String content}) =>
       File(path).writeAsStringSync(content ?? '');
 
-  newFolder(String path) => Directory(path).createSync(recursive: true);
+  void newFolder(String path) => Directory(path).createSync(recursive: true);
 
   @override
   void sendNotificationToServer(NotificationMessage notification) =>
@@ -102,7 +102,7 @@
     });
   }
 
-  tearDown() {
+  void tearDown() {
     // TODO(dantup): Graceful shutdown?
     client.close();
   }
diff --git a/pkg/analysis_server/test/integration/lsp_server/server_test.dart b/pkg/analysis_server/test/integration/lsp_server/server_test.dart
index 8ce240a..12b3f00 100644
--- a/pkg/analysis_server/test/integration/lsp_server/server_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/server_test.dart
@@ -10,7 +10,7 @@
 
 import 'integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ServerTest);
   });
@@ -18,7 +18,7 @@
 
 @reflectiveTest
 class ServerTest extends AbstractLspAnalysisServerIntegrationTest {
-  test_diagnosticServer() async {
+  Future<void> test_diagnosticServer() async {
     await initialize();
 
     // Send the custom request to the LSP server to get the Dart diagnostic
@@ -38,7 +38,7 @@
     expect(responseBody, contains('<title>Analysis Server</title>'));
   }
 
-  test_exit_inintializedWithShutdown() async {
+  Future<void> test_exit_inintializedWithShutdown() async {
     await initialize();
     await sendShutdown();
     sendExit();
@@ -53,7 +53,7 @@
     expect(exitCode, equals(0));
   }
 
-  test_exit_initializedWithoutShutdown() async {
+  Future<void> test_exit_initializedWithoutShutdown() async {
     // Send a request that we can wait for, to ensure the server is fully ready
     // before we send exit. Otherwise the exit notification won't be handled for
     // a long time (while the server starts up) and will exceed the 10s timeout.
@@ -70,7 +70,7 @@
     expect(exitCode, equals(1));
   }
 
-  test_exit_uninintializedWithShutdown() async {
+  Future<void> test_exit_uninintializedWithShutdown() async {
     await sendShutdown();
     sendExit();
 
@@ -84,7 +84,7 @@
     expect(exitCode, equals(0));
   }
 
-  test_exit_uninitializedWithoutShutdown() async {
+  Future<void> test_exit_uninitializedWithoutShutdown() async {
     // This tests the same as test_exit_withoutShutdown but without sending
     // initialize. It can't be as strict with the timeout as the server may take
     // time to start up (we can't tell when it's ready without sending a request).
diff --git a/pkg/analysis_server/test/integration/lsp_server/test_all.dart b/pkg/analysis_server/test/integration/lsp_server/test_all.dart
index b171d0a..3c85a81 100644
--- a/pkg/analysis_server/test/integration/lsp_server/test_all.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/test_all.dart
@@ -9,7 +9,7 @@
 import 'initialization_test.dart' as initialization_test;
 import 'server_test.dart' as server_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     analyzer_status.main();
     diagnostic_test.main();
diff --git a/pkg/analysis_server/test/integration/search/find_element_references_test.dart b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
index eac13f5..fa9d879 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -10,7 +10,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementReferencesTest);
   });
@@ -20,7 +20,7 @@
 class FindElementReferencesTest extends AbstractAnalysisServerIntegrationTest {
   String pathname;
 
-  test_badTarget() async {
+  Future<void> test_badTarget() async {
     String text = r'''
 main() {
   if /* target */ (true) {
@@ -38,7 +38,7 @@
     expect(results, isNull);
   }
 
-  test_findReferences() async {
+  Future<void> test_findReferences() async {
     String text = r'''
 main() {
   foo /* target */ ('Hello');
diff --git a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
index f91ba02..57eb550 100644
--- a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberDeclarationsTest);
   });
@@ -18,7 +18,7 @@
 class FindMemberDeclarationsTest extends AbstractAnalysisServerIntegrationTest {
   String pathname;
 
-  test_findMemberDeclarations() async {
+  Future<void> test_findMemberDeclarations() async {
     String text = r'''
 String qux() => 'qux';
 
diff --git a/pkg/analysis_server/test/integration/search/find_member_references_test.dart b/pkg/analysis_server/test/integration/search/find_member_references_test.dart
index 9ffc95f..bb88f5f 100644
--- a/pkg/analysis_server/test/integration/search/find_member_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_references_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberReferencesTest);
   });
@@ -18,7 +18,7 @@
 class FindMemberReferencesTest extends AbstractAnalysisServerIntegrationTest {
   String pathname;
 
-  test_findMemberReferences() async {
+  Future<void> test_findMemberReferences() async {
     String text = r'''
 String qux() => 'qux';
 
diff --git a/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
index 4d37e1e..231edca 100644
--- a/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
@@ -8,7 +8,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindTopLevelDeclarationsTest);
   });
@@ -19,7 +19,7 @@
     extends AbstractAnalysisServerIntegrationTest {
   String pathname;
 
-  test_findTopLevelDeclarations() async {
+  Future<void> test_findTopLevelDeclarations() async {
     String text = r'''
 String qux() => 'qux';
 
diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
index 2924c17..bb662b7 100644
--- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
@@ -11,7 +11,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetTypeHierarchyTest);
   });
diff --git a/pkg/analysis_server/test/integration/search/test_all.dart b/pkg/analysis_server/test/integration/search/test_all.dart
index c7cc8b8..b39f490 100644
--- a/pkg/analysis_server/test/integration/search/test_all.dart
+++ b/pkg/analysis_server/test/integration/search/test_all.dart
@@ -11,10 +11,7 @@
     as find_top_level_declarations_test;
 import 'get_type_hierarchy_test.dart' as get_type_hierarchy_test;
 
-/**
- * Utility for manually running all integration tests.
- */
-main() {
+void main() {
   defineReflectiveSuite(() {
     find_element_references_test.main();
     find_member_declarations_test.main();
diff --git a/pkg/analysis_server/test/integration/server/get_version_test.dart b/pkg/analysis_server/test/integration/server/get_version_test.dart
index 7fca35a..a82ea75 100644
--- a/pkg/analysis_server/test/integration/server/get_version_test.dart
+++ b/pkg/analysis_server/test/integration/server/get_version_test.dart
@@ -6,7 +6,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetVersionTest);
   });
@@ -14,7 +14,7 @@
 
 @reflectiveTest
 class GetVersionTest extends AbstractAnalysisServerIntegrationTest {
-  test_getVersion() {
+  Future<void> test_getVersion() {
     return sendServerGetVersion();
   }
 }
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
index 51dc047..afb3195 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
@@ -7,7 +7,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsInvalidTest);
   });
@@ -16,7 +16,7 @@
 @reflectiveTest
 class SetSubscriptionsInvalidTest
     extends AbstractAnalysisServerIntegrationTest {
-  test_setSubscriptions_invalidService() {
+  Future<void> test_setSubscriptions_invalidService() {
     // TODO(paulberry): verify that if an invalid service is specified, the
     // current subscriptions are unchanged.
     return server.send('server.setSubscriptions', {
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
index c8538f8..7388d13 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
@@ -10,7 +10,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
   });
@@ -28,7 +28,7 @@
 @reflectiveTest
 class SetSubscriptionsTest extends AbstractAnalysisServerIntegrationTest {
   @failingTest
-  test_setSubscriptions() {
+  Future<void> test_setSubscriptions() {
     // This test times out on the bots and has been disabled to keep them green.
     // We need to discover the cause and re-enable it.
 
diff --git a/pkg/analysis_server/test/integration/server/shutdown_test.dart b/pkg/analysis_server/test/integration/server/shutdown_test.dart
index 5574266..e43a0b0 100644
--- a/pkg/analysis_server/test/integration/server/shutdown_test.dart
+++ b/pkg/analysis_server/test/integration/server/shutdown_test.dart
@@ -9,7 +9,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ShutdownTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class ShutdownTest extends AbstractAnalysisServerIntegrationTest {
-  test_shutdown() {
+  Future<void> test_shutdown() {
     return sendServerShutdown().then((_) {
       return Future.delayed(Duration(seconds: 1)).then((_) {
         sendServerGetVersion().then((_) {
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index b2c16cb..93126a6 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -10,7 +10,7 @@
 
 import '../support/integration_tests.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatusTest);
   });
@@ -18,7 +18,7 @@
 
 @reflectiveTest
 class StatusTest extends AbstractAnalysisServerIntegrationTest {
-  test_status() {
+  Future<void> test_status() {
     // After we kick off analysis, we should get one server.status message with
     // analyzing=true, and another server.status message after that with
     // analyzing=false.
diff --git a/pkg/analysis_server/test/integration/server/test_all.dart b/pkg/analysis_server/test/integration/server/test_all.dart
index 2ef3625..0a23427 100644
--- a/pkg/analysis_server/test/integration/server/test_all.dart
+++ b/pkg/analysis_server/test/integration/server/test_all.dart
@@ -11,10 +11,7 @@
 import 'shutdown_test.dart' as shutdown_test;
 import 'status_test.dart' as status_test;
 
-/**
- * Utility for manually running all integration tests.
- */
-main() {
+void main() {
   defineReflectiveSuite(() {
     get_version_test.main();
     set_subscriptions_test.main();
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 812fe9d..60ce27b 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -938,7 +938,10 @@
    * the mismatch.  [describeSubstructure] is used to describe which
    * substructure did not match.
    */
-  checkSubstructure(item, Matcher matcher, List<MismatchDescriber> mismatches,
+  void checkSubstructure(
+      item,
+      Matcher matcher,
+      List<MismatchDescriber> mismatches,
       Description Function(Description) describeSubstructure) {
     Map subState = {};
     if (!matcher.matches(item, subState)) {
diff --git a/pkg/analysis_server/test/integration/test_all.dart b/pkg/analysis_server/test/integration/test_all.dart
index 3c601b3..9ef661b 100644
--- a/pkg/analysis_server/test/integration/test_all.dart
+++ b/pkg/analysis_server/test/integration/test_all.dart
@@ -17,7 +17,7 @@
 import 'search/test_all.dart' as search;
 import 'server/test_all.dart' as server;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     analysis.main();
     analytics.main();
diff --git a/pkg/analysis_server/test/lsp/analyzer_status_test.dart b/pkg/analysis_server/test/lsp/analyzer_status_test.dart
index 4ddd08f..dec6895 100644
--- a/pkg/analysis_server/test/lsp/analyzer_status_test.dart
+++ b/pkg/analysis_server/test/lsp/analyzer_status_test.dart
@@ -7,7 +7,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalyzerStatusTest);
   });
@@ -15,27 +15,7 @@
 
 @reflectiveTest
 class AnalyzerStatusTest extends AbstractLspAnalysisServerTest {
-  test_afterInitialize() async {
-    const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
-
-    // To avoid races, set up listeners for the notifications before we initialise
-    // and track which event came first to ensure they arrived in the expected
-    // order.
-    bool firstNotificationWasAnalyzing;
-    final startNotification = waitForAnalysisStart()
-        .then((_) => firstNotificationWasAnalyzing ??= true);
-    final completeNotification = waitForAnalysisComplete()
-        .then((_) => firstNotificationWasAnalyzing ??= false);
-
-    await initialize();
-    await startNotification;
-    await completeNotification;
-
-    expect(firstNotificationWasAnalyzing, isTrue);
-  }
-
-  test_afterDocumentEdits() async {
+  Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
     newFile(mainFilePath, content: initialContents);
 
@@ -56,4 +36,24 @@
     await startNotification;
     await completeNotification;
   }
+
+  Future<void> test_afterInitialize() async {
+    const initialContents = 'int a = 1;';
+    newFile(mainFilePath, content: initialContents);
+
+    // To avoid races, set up listeners for the notifications before we initialise
+    // and track which event came first to ensure they arrived in the expected
+    // order.
+    bool firstNotificationWasAnalyzing;
+    final startNotification = waitForAnalysisStart()
+        .then((_) => firstNotificationWasAnalyzing ??= true);
+    final completeNotification = waitForAnalysisComplete()
+        .then((_) => firstNotificationWasAnalyzing ??= false);
+
+    await initialize();
+    await startNotification;
+    await completeNotification;
+
+    expect(firstNotificationWasAnalyzing, isTrue);
+  }
 }
diff --git a/pkg/analysis_server/test/lsp/cancel_request_test.dart b/pkg/analysis_server/test/lsp/cancel_request_test.dart
index ce460a6..6e065b9 100644
--- a/pkg/analysis_server/test/lsp/cancel_request_test.dart
+++ b/pkg/analysis_server/test/lsp/cancel_request_test.dart
@@ -9,7 +9,7 @@
 import '../tool/lsp_spec/matchers.dart';
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CancelRequestTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class CancelRequestTest extends AbstractLspAnalysisServerTest {
-  test_cancel() async {
+  Future<void> test_cancel() async {
     final content = '''
 main() {
   InOtherF^
diff --git a/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart b/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart
index fd0e3c0..ef38052 100644
--- a/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart
+++ b/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart
@@ -7,7 +7,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeWorkspaceFoldersTest);
   });
@@ -29,7 +29,7 @@
     workspaceFolder3Uri = Uri.file(workspaceFolder3Path);
   }
 
-  test_changeWorkspaceFolders_add() async {
+  Future<void> test_changeWorkspaceFolders_add() async {
     await initialize(rootUri: workspaceFolder1Uri);
     await changeWorkspaceFolders(
         add: [workspaceFolder2Uri, workspaceFolder3Uri]);
@@ -44,7 +44,7 @@
     );
   }
 
-  test_changeWorkspaceFolders_addAndRemove() async {
+  Future<void> test_changeWorkspaceFolders_addAndRemove() async {
     await initialize(
       workspaceFolders: [workspaceFolder1Uri, workspaceFolder2Uri],
     );
@@ -59,7 +59,7 @@
     );
   }
 
-  test_changeWorkspaceFolders_remove() async {
+  Future<void> test_changeWorkspaceFolders_remove() async {
     await initialize(
       workspaceFolders: [workspaceFolder1Uri, workspaceFolder2Uri],
     );
@@ -73,7 +73,7 @@
     );
   }
 
-  test_changeWorkspaceFolders_removeFlushesDiagnostics() async {
+  Future<void> test_changeWorkspaceFolders_removeFlushesDiagnostics() async {
     // Add our standard test project as well as a dummy project.
     await initialize(workspaceFolders: [projectFolderUri, workspaceFolder1Uri]);
 
diff --git a/pkg/analysis_server/test/lsp/closing_labels_test.dart b/pkg/analysis_server/test/lsp/closing_labels_test.dart
index 0732276..4a671a6 100644
--- a/pkg/analysis_server/test/lsp/closing_labels_test.dart
+++ b/pkg/analysis_server/test/lsp/closing_labels_test.dart
@@ -7,7 +7,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ClosingLabelsTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class ClosingLabelsTest extends AbstractLspAnalysisServerTest {
-  test_afterChange() async {
+  Future<void> test_afterChange() async {
     final initialContent = 'main() {}';
     final updatedContent = '''
 Widget build(BuildContext context) {
@@ -56,7 +56,7 @@
     expect(second.range.end.character, equals(5));
   }
 
-  test_initial() async {
+  Future<void> test_initial() async {
     final content = '''
 Widget build(BuildContext context) {
   return new Row(         // Row       1:9
diff --git a/pkg/analysis_server/test/lsp/code_actions_assists_test.dart b/pkg/analysis_server/test/lsp/code_actions_assists_test.dart
index 7c37bec..88ab0fd 100644
--- a/pkg/analysis_server/test/lsp/code_actions_assists_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_assists_test.dart
@@ -8,7 +8,7 @@
 
 import 'code_actions_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssistsCodeActionsTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class AssistsCodeActionsTest extends AbstractCodeActionsTest {
-  test_appliesCorrectEdits_withDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withDocumentChangesSupport() async {
     // This code should get an assist to add a show combinator.
     const content = '''
     import '[[dart:async]]';
@@ -55,7 +55,7 @@
     expect(contents[mainFilePath], equals(expectedContent));
   }
 
-  test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
     // This code should get an assist to add a show combinator.
     const content = '''
     import '[[dart:async]]';
@@ -92,7 +92,7 @@
     expect(contents[mainFilePath], equals(expectedContent));
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     await newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
diff --git a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
index daadf31..fa93a77 100644
--- a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
@@ -8,7 +8,7 @@
 
 import 'code_actions_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FixesCodeActionsTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class FixesCodeActionsTest extends AbstractCodeActionsTest {
-  test_appliesCorrectEdits_withDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withDocumentChangesSupport() async {
     // This code should get a fix to remove the unused import.
     const content = '''
     import 'dart:async';
@@ -56,7 +56,7 @@
     expect(contents[mainFilePath], equals(expectedContent));
   }
 
-  test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
     // This code should get a fix to remove the unused import.
     const content = '''
     import 'dart:async';
@@ -94,7 +94,7 @@
     expect(contents[mainFilePath], equals(expectedContent));
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     await newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
diff --git a/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart b/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart
index 6a1cd63..b733be9 100644
--- a/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart
@@ -9,7 +9,7 @@
 import '../src/utilities/mock_packages.dart';
 import 'code_actions_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractMethodRefactorCodeActionsTest);
     defineReflectiveTests(ExtractWidgetRefactorCodeActionsTest);
@@ -19,7 +19,7 @@
 @reflectiveTest
 class ExtractMethodRefactorCodeActionsTest extends AbstractCodeActionsTest {
   final extractMethodTitle = 'Extract Method';
-  test_appliesCorrectEdits() async {
+  Future<void> test_appliesCorrectEdits() async {
     const content = '''
 main() {
   print('Test!');
@@ -49,7 +49,7 @@
         codeAction, withoutMarkers(content), expectedContent);
   }
 
-  test_invalidLocation() async {
+  Future<void> test_invalidLocation() async {
     const content = '''
 import 'dart:convert';
 ^
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_appliesCorrectEdits() async {
+  Future<void> test_appliesCorrectEdits() async {
     const content = '''
 import 'package:flutter/material.dart';
 
@@ -149,7 +149,7 @@
         codeAction, withoutMarkers(content), expectedContent);
   }
 
-  test_invalidLocation() async {
+  Future<void> test_invalidLocation() async {
     const content = '''
 import 'dart:convert';
 ^
diff --git a/pkg/analysis_server/test/lsp/code_actions_source_test.dart b/pkg/analysis_server/test/lsp/code_actions_source_test.dart
index 57726d2..676c9ba 100644
--- a/pkg/analysis_server/test/lsp/code_actions_source_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_source_test.dart
@@ -10,7 +10,7 @@
 import '../tool/lsp_spec/matchers.dart';
 import 'code_actions_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersSourceCodeActionsTest);
     defineReflectiveTests(OrganizeImportsSourceCodeActionsTest);
@@ -19,7 +19,7 @@
 
 @reflectiveTest
 class OrganizeImportsSourceCodeActionsTest extends AbstractCodeActionsTest {
-  test_appliesCorrectEdits_withDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withDocumentChangesSupport() async {
     const content = '''
 import 'dart:math';
 import 'dart:async';
@@ -48,7 +48,7 @@
         expectDocumentChanges: true);
   }
 
-  test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
     const content = '''
 import 'dart:math';
 import 'dart:async';
@@ -76,7 +76,7 @@
     await verifyCodeActionEdits(codeAction, content, expectedContent);
   }
 
-  test_availableAsCodeActionLiteral() async {
+  Future<void> test_availableAsCodeActionLiteral() async {
     await newFile(mainFilePath);
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
@@ -92,7 +92,7 @@
     );
   }
 
-  test_availableAsCommand() async {
+  Future<void> test_availableAsCommand() async {
     await newFile(mainFilePath);
     await initialize(
         workspaceCapabilities:
@@ -106,7 +106,7 @@
     );
   }
 
-  test_failsIfFileHasErrors() async {
+  Future<void> test_failsIfFileHasErrors() async {
     final content = 'invalid dart code';
     await newFile(mainFilePath, content: content);
     await initialize(
@@ -128,7 +128,7 @@
         throwsA(isResponseError(ServerErrorCodes.FileHasErrors)));
   }
 
-  test_noEdits() async {
+  Future<void> test_noEdits() async {
     const content = '''
 import 'dart:async';
 import 'dart:math';
@@ -157,7 +157,7 @@
     expect(commandResponse, isNull);
   }
 
-  test_unavailableWhenNotRequested() async {
+  Future<void> test_unavailableWhenNotRequested() async {
     await newFile(mainFilePath);
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
@@ -170,7 +170,7 @@
     expect(codeAction, isNull);
   }
 
-  test_unavailableWithoutApplyEditSupport() async {
+  Future<void> test_unavailableWithoutApplyEditSupport() async {
     await newFile(mainFilePath);
     await initialize();
 
@@ -182,7 +182,7 @@
 
 @reflectiveTest
 class SortMembersSourceCodeActionsTest extends AbstractCodeActionsTest {
-  test_appliesCorrectEdits_withDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withDocumentChangesSupport() async {
     const content = '''
     String b;
     String a;
@@ -204,7 +204,7 @@
         expectDocumentChanges: true);
   }
 
-  test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
+  Future<void> test_appliesCorrectEdits_withoutDocumentChangesSupport() async {
     const content = '''
     String b;
     String a;
@@ -225,7 +225,7 @@
     await verifyCodeActionEdits(codeAction, content, expectedContent);
   }
 
-  test_availableAsCodeActionLiteral() async {
+  Future<void> test_availableAsCodeActionLiteral() async {
     await newFile(mainFilePath);
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
@@ -241,7 +241,7 @@
     );
   }
 
-  test_availableAsCommand() async {
+  Future<void> test_availableAsCommand() async {
     await newFile(mainFilePath);
     await initialize(
         workspaceCapabilities:
@@ -255,7 +255,7 @@
     );
   }
 
-  test_failsIfClientDoesntApplyEdits() async {
+  Future<void> test_failsIfClientDoesntApplyEdits() async {
     const content = '''
     String b;
     String a;
@@ -290,7 +290,7 @@
         throwsA(isResponseError(ServerErrorCodes.ClientFailedToApplyEdit)));
   }
 
-  test_failsIfFileHasErrors() async {
+  Future<void> test_failsIfFileHasErrors() async {
     final content = 'invalid dart code';
     await newFile(mainFilePath, content: content);
     await initialize(
@@ -312,7 +312,7 @@
         throwsA(isResponseError(ServerErrorCodes.FileHasErrors)));
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     await newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
@@ -325,7 +325,7 @@
     expect(codeActions, isEmpty);
   }
 
-  test_unavailableWhenNotRequested() async {
+  Future<void> test_unavailableWhenNotRequested() async {
     await newFile(mainFilePath);
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
@@ -338,7 +338,7 @@
     expect(codeAction, isNull);
   }
 
-  test_unavailableWithoutApplyEditSupport() async {
+  Future<void> test_unavailableWithoutApplyEditSupport() async {
     await newFile(mainFilePath);
     await initialize();
 
diff --git a/pkg/analysis_server/test/lsp/completion_test.dart b/pkg/analysis_server/test/lsp/completion_test.dart
index 24fb0d2..e0e4f19 100644
--- a/pkg/analysis_server/test/lsp/completion_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_test.dart
@@ -9,7 +9,7 @@
 import '../tool/lsp_spec/matchers.dart';
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class CompletionTest extends AbstractLspAnalysisServerTest {
-  expectAutoImportCompletion(List<CompletionItem> items, String file) {
+  void expectAutoImportCompletion(List<CompletionItem> items, String file) {
     expect(
       items.singleWhere(
         (c) => c.detail?.contains("Auto import from '$file'") ?? false,
@@ -27,7 +27,7 @@
     );
   }
 
-  test_completionKinds_default() async {
+  Future<void> test_completionKinds_default() async {
     newFile(join(projectFolderPath, 'file.dart'));
     newFolder(join(projectFolderPath, 'folder'));
 
@@ -47,7 +47,7 @@
     expect(builtin.kind, equals(CompletionItemKind.Module));
   }
 
-  test_completionKinds_imports() async {
+  Future<void> test_completionKinds_imports() async {
     final content = "import '^';";
 
     // Tell the server we support some specific CompletionItemKinds.
@@ -72,7 +72,7 @@
     expect(builtin.kind, equals(CompletionItemKind.Module));
   }
 
-  test_completionKinds_supportedSubset() async {
+  Future<void> test_completionKinds_supportedSubset() async {
     final content = '''
     class MyClass {
       String abcdefghij;
@@ -100,7 +100,7 @@
     );
   }
 
-  test_completionTriggerKinds_invalidParams() async {
+  Future<void> test_completionTriggerKinds_invalidParams() async {
     await initialize();
 
     final invalidTriggerKind = CompletionTriggerKind.fromJson(-1);
@@ -114,7 +114,7 @@
         request, throwsA(isResponseError(ErrorCodes.InvalidParams)));
   }
 
-  test_gettersAndSetters() async {
+  Future<void> test_gettersAndSetters() async {
     final content = '''
     class MyClass {
       String get justGetter => '';
@@ -143,7 +143,7 @@
     });
   }
 
-  test_insideString() async {
+  Future<void> test_insideString() async {
     final content = '''
     var a = "This is ^a test"
     ''';
@@ -154,7 +154,7 @@
     expect(res, isEmpty);
   }
 
-  test_isDeprecated_notSupported() async {
+  Future<void> test_isDeprecated_notSupported() async {
     final content = '''
     class MyClass {
       @deprecated
@@ -177,7 +177,7 @@
     expect(item.detail.toLowerCase(), contains('deprecated'));
   }
 
-  test_isDeprecated_supported() async {
+  Future<void> test_isDeprecated_supported() async {
     final content = '''
     class MyClass {
       @deprecated
@@ -202,7 +202,7 @@
     expect(item.detail, isNot(contains('deprecated')));
   }
 
-  test_namedArg_plainText() async {
+  Future<void> test_namedArg_plainText() async {
     final content = '''
     class A { const A({int one}); }
     @A(^)
@@ -221,7 +221,7 @@
     expect(updated, contains('one: '));
   }
 
-  test_namedArg_snippetStringSelection() async {
+  Future<void> test_namedArg_snippetStringSelection() async {
     final content = '''
     class A { const A({int one}); }
     @A(^)
@@ -246,7 +246,7 @@
     );
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize();
 
@@ -254,7 +254,25 @@
     expect(res, isEmpty);
   }
 
-  test_plainText() async {
+  Future<void> test_parensNotInFilterTextInsertText() async {
+    final content = '''
+    class MyClass {}
+
+    main() {
+      MyClass a = new MyCla^
+    }
+    ''';
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+    expect(res.any((c) => c.label == 'MyClass()'), isTrue);
+    final item = res.singleWhere((c) => c.label == 'MyClass()');
+    expect(item.filterText, equals('MyClass'));
+    expect(item.insertText, equals('MyClass'));
+  }
+
+  Future<void> test_plainText() async {
     final content = '''
     class MyClass {
       String abcdefghij;
@@ -278,25 +296,7 @@
     expect(updated, contains('a.abcdefghij'));
   }
 
-  test_parensNotInFilterTextInsertText() async {
-    final content = '''
-    class MyClass {}
-
-    main() {
-      MyClass a = new MyCla^
-    }
-    ''';
-
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(content));
-    final res = await getCompletion(mainFileUri, positionFromMarker(content));
-    expect(res.any((c) => c.label == 'MyClass()'), isTrue);
-    final item = res.singleWhere((c) => c.label == 'MyClass()');
-    expect(item.filterText, equals('MyClass'));
-    expect(item.insertText, equals('MyClass'));
-  }
-
-  test_suggestionSets() async {
+  Future<void> test_suggestionSets() async {
     newFile(
       join(projectFolderPath, 'other_file.dart'),
       content: '''
@@ -367,7 +367,7 @@
     '''));
   }
 
-  test_suggestionSets_doesNotFilterSymbolsWithSameName() async {
+  Future<void> test_suggestionSets_doesNotFilterSymbolsWithSameName() async {
     // Classes here are not re-exports, so should not be filtered out.
     newFile(
       join(projectFolderPath, 'source_file1.dart'),
@@ -409,7 +409,7 @@
     expectAutoImportCompletion(resolvedCompletions, '../source_file3.dart');
   }
 
-  test_suggestionSets_enumValues() async {
+  Future<void> test_suggestionSets_enumValues() async {
     newFile(
       join(projectFolderPath, 'source_file.dart'),
       content: '''
@@ -471,7 +471,7 @@
     '''));
   }
 
-  test_suggestionSets_enumValuesAlreadyImported() async {
+  Future<void> test_suggestionSets_enumValuesAlreadyImported() async {
     newFile(
       join(projectFolderPath, 'source_file.dart'),
       content: '''
@@ -515,7 +515,7 @@
     expect(resolved.detail, isNull);
   }
 
-  test_suggestionSets_filtersOutAlreadyImportedSymbols() async {
+  Future<void> test_suggestionSets_filtersOutAlreadyImportedSymbols() async {
     newFile(
       join(projectFolderPath, 'source_file.dart'),
       content: '''
@@ -558,64 +558,8 @@
     expect(resolved.detail, isNull);
   }
 
-  test_suggestionSets_namedConstructors() async {
-    newFile(
-      join(projectFolderPath, 'other_file.dart'),
-      content: '''
-      /// This class is in another file.
-      class InOtherFile {
-        InOtherFile.fromJson() {}
-      }
-      ''',
-    );
-
-    final content = '''
-main() {
-  var a = InOtherF^
-}
-    ''';
-
-    final initialAnalysis = waitForAnalysisComplete();
-    await initialize(
-        workspaceCapabilities:
-            withApplyEditSupport(emptyWorkspaceClientCapabilities));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await initialAnalysis;
-    final res = await getCompletion(mainFileUri, positionFromMarker(content));
-
-    // Find the completion for the class in the other file.
-    final completion =
-        res.singleWhere((c) => c.label == 'InOtherFile.fromJson()');
-    expect(completion, isNotNull);
-
-    // Expect no docs or text edit, since these are added during resolve.
-    expect(completion.documentation, isNull);
-    expect(completion.textEdit, isNull);
-
-    // Resolve the completion item (via server) to get its edits. This is the
-    // LSP's equiv of getSuggestionDetails() and is invoked by LSP clients to
-    // populate additional info (in our case, the additional edits for inserting
-    // the import).
-    final resolved = await resolveCompletion(completion);
-    expect(resolved, isNotNull);
-
-    // Apply both the main completion edit and the additionalTextEdits atomically.
-    final newContent = applyTextEdits(
-      withoutMarkers(content),
-      [resolved.textEdit].followedBy(resolved.additionalTextEdits).toList(),
-    );
-
-    // Ensure both edits were made - the completion, and the inserted import.
-    expect(newContent, equals('''
-import '../other_file.dart';
-
-main() {
-  var a = InOtherFile.fromJson
-}
-    '''));
-  }
-
-  test_suggestionSets_includesReexportedSymbolsForEachFile() async {
+  Future<void>
+      test_suggestionSets_includesReexportedSymbolsForEachFile() async {
     newFile(
       join(projectFolderPath, 'source_file.dart'),
       content: '''
@@ -661,7 +605,7 @@
     expectAutoImportCompletion(resolvedCompletions, '../reexport2.dart');
   }
 
-  test_suggestionSets_insertsIntoPartFiles() async {
+  Future<void> test_suggestionSets_insertsIntoPartFiles() async {
     // File we'll be adding an import for.
     newFile(
       join(projectFolderPath, 'other_file.dart'),
@@ -749,7 +693,64 @@
 part 'main.dart';'''));
   }
 
-  test_suggestionSets_unavailableIfDisabled() async {
+  Future<void> test_suggestionSets_namedConstructors() async {
+    newFile(
+      join(projectFolderPath, 'other_file.dart'),
+      content: '''
+      /// This class is in another file.
+      class InOtherFile {
+        InOtherFile.fromJson() {}
+      }
+      ''',
+    );
+
+    final content = '''
+main() {
+  var a = InOtherF^
+}
+    ''';
+
+    final initialAnalysis = waitForAnalysisComplete();
+    await initialize(
+        workspaceCapabilities:
+            withApplyEditSupport(emptyWorkspaceClientCapabilities));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await initialAnalysis;
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+
+    // Find the completion for the class in the other file.
+    final completion =
+        res.singleWhere((c) => c.label == 'InOtherFile.fromJson()');
+    expect(completion, isNotNull);
+
+    // Expect no docs or text edit, since these are added during resolve.
+    expect(completion.documentation, isNull);
+    expect(completion.textEdit, isNull);
+
+    // Resolve the completion item (via server) to get its edits. This is the
+    // LSP's equiv of getSuggestionDetails() and is invoked by LSP clients to
+    // populate additional info (in our case, the additional edits for inserting
+    // the import).
+    final resolved = await resolveCompletion(completion);
+    expect(resolved, isNotNull);
+
+    // Apply both the main completion edit and the additionalTextEdits atomically.
+    final newContent = applyTextEdits(
+      withoutMarkers(content),
+      [resolved.textEdit].followedBy(resolved.additionalTextEdits).toList(),
+    );
+
+    // Ensure both edits were made - the completion, and the inserted import.
+    expect(newContent, equals('''
+import '../other_file.dart';
+
+main() {
+  var a = InOtherFile.fromJson
+}
+    '''));
+  }
+
+  Future<void> test_suggestionSets_unavailableIfDisabled() async {
     newFile(
       join(projectFolderPath, 'other_file.dart'),
       content: 'class InOtherFile {}',
@@ -781,7 +782,7 @@
     expect(completion, isNull);
   }
 
-  test_suggestionSets_unavailableWithoutApplyEdit() async {
+  Future<void> test_suggestionSets_unavailableWithoutApplyEdit() async {
     // If client doesn't advertise support for workspace/applyEdit, we won't
     // include suggestion sets.
     newFile(
@@ -810,7 +811,7 @@
     expect(completion, isNull);
   }
 
-  test_unopenFile() async {
+  Future<void> test_unopenFile() async {
     final content = '''
     class MyClass {
       String abcdefghij;
diff --git a/pkg/analysis_server/test/lsp/definition_test.dart b/pkg/analysis_server/test/lsp/definition_test.dart
index a7df3fe..25680ff 100644
--- a/pkg/analysis_server/test/lsp/definition_test.dart
+++ b/pkg/analysis_server/test/lsp/definition_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DefinitionTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class DefinitionTest extends AbstractLspAnalysisServerTest {
-  test_acrossFiles() async {
+  Future<void> test_acrossFiles() async {
     final mainContents = '''
     import 'referenced.dart';
 
@@ -53,7 +53,7 @@
     expect(loc.uri, equals(referencedFileUri.toString()));
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize();
 
@@ -61,7 +61,7 @@
     expect(res, isEmpty);
   }
 
-  test_singleFile() async {
+  Future<void> test_singleFile() async {
     final contents = '''
     [[foo]]() {
       fo^o();
@@ -78,7 +78,7 @@
     expect(loc.uri, equals(mainFileUri.toString()));
   }
 
-  test_unopenFile() async {
+  Future<void> test_unopenFile() async {
     final contents = '''
     [[foo]]() {
       fo^o();
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 8ff865f..123a064 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DiagnosticTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class DiagnosticTest extends AbstractLspAnalysisServerTest {
-  test_afterDocumentEdits() async {
+  Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
     newFile(mainFilePath, content: initialContents);
 
@@ -33,7 +33,7 @@
     expect(updatedDiagnostics, hasLength(1));
   }
 
-  test_contextMessage() async {
+  Future<void> test_contextMessage() async {
     newFile(mainFilePath, content: '''
 void f() {
   x = 0;
@@ -50,7 +50,7 @@
     expect(diagnostic.relatedInformation, hasLength(1));
   }
 
-  test_correction() async {
+  Future<void> test_correction() async {
     newFile(mainFilePath, content: '''
 void f() {
   x = 0;
@@ -65,7 +65,7 @@
     expect(diagnostic.message, contains('\nTry'));
   }
 
-  test_deletedFile() async {
+  Future<void> test_deletedFile() async {
     newFile(mainFilePath, content: 'String a = 1;');
 
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
@@ -80,7 +80,7 @@
     expect(updatedDiagnostics, hasLength(0));
   }
 
-  test_dotFilesExcluded() async {
+  Future<void> test_dotFilesExcluded() async {
     var dotFolderFilePath =
         join(projectFolderPath, '.dart_tool', 'tool_file.dart');
     var dotFolderFileUri = Uri.file(dotFolderFilePath);
@@ -99,7 +99,7 @@
     expect(diagnostics, isNull);
   }
 
-  test_initialAnalysis() async {
+  Future<void> test_initialAnalysis() async {
     newFile(mainFilePath, content: 'String a = 1;');
 
     final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
@@ -114,7 +114,7 @@
     expect(diagnostic.range.end.character, equals(12));
   }
 
-  test_todos() async {
+  Future<void> test_todos() async {
     // TODOs only show up if there's also some code in the file.
     const initialContents = '''
     // TODO: This
diff --git a/pkg/analysis_server/test/lsp/document_highlights_test.dart b/pkg/analysis_server/test/lsp/document_highlights_test.dart
index 374dd1d..aba5b75 100644
--- a/pkg/analysis_server/test/lsp/document_highlights_test.dart
+++ b/pkg/analysis_server/test/lsp/document_highlights_test.dart
@@ -7,7 +7,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DocumentHighlightsTest);
   });
@@ -15,13 +15,13 @@
 
 @reflectiveTest
 class DocumentHighlightsTest extends AbstractLspAnalysisServerTest {
-  test_functions() => _testMarkedContent('''
+  Future<void> test_functions() => _testMarkedContent('''
     [[main]]() {
       [[mai^n]]();
     }
     ''');
 
-  test_localVariable() => _testMarkedContent('''
+  Future<void> test_localVariable() => _testMarkedContent('''
     main() {
       var [[f^oo]] = 1;
       print([[foo]]);
@@ -29,7 +29,7 @@
     }
     ''');
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     await initialize();
     await openFile(pubspecFileUri, simplePubspecContent);
 
@@ -40,19 +40,19 @@
     expect(highlights, isEmpty);
   }
 
-  test_noResult() => _testMarkedContent('''
+  Future<void> test_noResult() => _testMarkedContent('''
     main() {
       // This one is in a ^ comment!
     }
     ''');
 
-  test_onlySelf() => _testMarkedContent('''
+  Future<void> test_onlySelf() => _testMarkedContent('''
     main() {
       [[prin^t]]();
     }
     ''');
 
-  test_shadow_inner() => _testMarkedContent('''
+  Future<void> test_shadow_inner() => _testMarkedContent('''
     main() {
       var foo = 1;
       func() {
@@ -62,7 +62,7 @@
     }
     ''');
 
-  test_shadow_outer() => _testMarkedContent('''
+  Future<void> test_shadow_outer() => _testMarkedContent('''
     main() {
       var [[foo]] = 1;
       func() {
@@ -73,7 +73,7 @@
     }
     ''');
 
-  test_topLevelVariable() => _testMarkedContent('''
+  Future<void> test_topLevelVariable() => _testMarkedContent('''
     String [[foo]] = 'bar';
     main() {
       print([[foo]]);
@@ -87,7 +87,7 @@
   /// be highlighted (eg. all references to the symbol under ^).
   /// If the content does not include any `[[double brackets]]` then the response
   /// is expected to be `null`.
-  _testMarkedContent(String content) async {
+  Future<void> _testMarkedContent(String content) async {
     final expectedRanges = rangesFromMarkers(content);
 
     await initialize();
diff --git a/pkg/analysis_server/test/lsp/document_symbols_test.dart b/pkg/analysis_server/test/lsp/document_symbols_test.dart
index 6d56201..05c01fc 100644
--- a/pkg/analysis_server/test/lsp/document_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/document_symbols_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DocumentSymbolsTest);
   });
@@ -16,51 +16,7 @@
 
 @reflectiveTest
 class DocumentSymbolsTest extends AbstractLspAnalysisServerTest {
-  test_hierarchical() async {
-    const content = '''
-    String topLevel = '';
-    class MyClass {
-      int myField;
-      MyClass(this.myField);
-      myMethod() {}
-    }
-    ''';
-    newFile(mainFilePath, content: content);
-    await initialize(
-        textDocumentCapabilities: withHierarchicalDocumentSymbolSupport(
-            emptyTextDocumentClientCapabilities));
-
-    final result = await getDocumentSymbols(mainFileUri.toString());
-    final symbols = result.map(
-      (docsymbols) => docsymbols,
-      (symbolInfos) => throw 'Expected DocumentSymbols, got SymbolInformations',
-    );
-
-    expect(symbols, hasLength(2));
-
-    final topLevel = symbols[0];
-    expect(topLevel.name, equals('topLevel'));
-    expect(topLevel.kind, equals(SymbolKind.Variable));
-
-    final myClass = symbols[1];
-    expect(myClass.name, equals('MyClass'));
-    expect(myClass.kind, equals(SymbolKind.Class));
-    expect(myClass.children, hasLength(3));
-
-    final field = myClass.children[0];
-    expect(field.name, equals('myField'));
-    expect(field.kind, equals(SymbolKind.Field));
-
-    final constructor = myClass.children[1];
-    expect(constructor.name, equals('MyClass'));
-    expect(constructor.kind, equals(SymbolKind.Constructor));
-
-    final method = myClass.children[2];
-    expect(method.name, equals('myMethod'));
-    expect(method.kind, equals(SymbolKind.Method));
-  }
-
-  test_flat() async {
+  Future<void> test_flat() async {
     const content = '''
     String topLevel = '';
     class MyClass {
@@ -105,7 +61,51 @@
     expect(method.containerName, equals(myClass.name));
   }
 
-  test_nonDartFile() async {
+  Future<void> test_hierarchical() async {
+    const content = '''
+    String topLevel = '';
+    class MyClass {
+      int myField;
+      MyClass(this.myField);
+      myMethod() {}
+    }
+    ''';
+    newFile(mainFilePath, content: content);
+    await initialize(
+        textDocumentCapabilities: withHierarchicalDocumentSymbolSupport(
+            emptyTextDocumentClientCapabilities));
+
+    final result = await getDocumentSymbols(mainFileUri.toString());
+    final symbols = result.map(
+      (docsymbols) => docsymbols,
+      (symbolInfos) => throw 'Expected DocumentSymbols, got SymbolInformations',
+    );
+
+    expect(symbols, hasLength(2));
+
+    final topLevel = symbols[0];
+    expect(topLevel.name, equals('topLevel'));
+    expect(topLevel.kind, equals(SymbolKind.Variable));
+
+    final myClass = symbols[1];
+    expect(myClass.name, equals('MyClass'));
+    expect(myClass.kind, equals(SymbolKind.Class));
+    expect(myClass.children, hasLength(3));
+
+    final field = myClass.children[0];
+    expect(field.name, equals('myField'));
+    expect(field.kind, equals(SymbolKind.Field));
+
+    final constructor = myClass.children[1];
+    expect(constructor.name, equals('MyClass'));
+    expect(constructor.kind, equals(SymbolKind.Constructor));
+
+    final method = myClass.children[2];
+    expect(method.name, equals('myMethod'));
+    expect(method.kind, equals(SymbolKind.Method));
+  }
+
+  Future<void> test_nonDartFile() async {
     newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize();
 
diff --git a/pkg/analysis_server/test/lsp/file_modification_test.dart b/pkg/analysis_server/test/lsp/file_modification_test.dart
index 6c4dca6..6063bfd 100644
--- a/pkg/analysis_server/test/lsp/file_modification_test.dart
+++ b/pkg/analysis_server/test/lsp/file_modification_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FileModificationTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class FileModificationTest extends AbstractLspAnalysisServerTest {
-  test_change_badPosition() async {
+  Future<void> test_change_badPosition() async {
     final contents = '';
     await initialize();
     await openFile(mainFileUri, contents);
@@ -37,7 +37,7 @@
     expect(error.message, contains('Invalid line'));
   }
 
-  test_change_fullContents() async {
+  Future<void> test_change_fullContents() async {
     final initialContent = 'int a = 1;';
     final updatedContent = 'int a = 2;';
 
@@ -50,7 +50,7 @@
     expect(documentVersion.version, equals(222));
   }
 
-  test_change_incremental() async {
+  Future<void> test_change_incremental() async {
     final initialContent = '0123456789\n0123456789';
     final expectedUpdatedContent = '0123456789\n01234   89';
 
@@ -70,7 +70,7 @@
     expect(documentVersion.version, equals(222));
   }
 
-  test_change_unopenedFile() async {
+  Future<void> test_change_unopenedFile() async {
     // It's not valid for a client to send a request to modify a file that it
     // has not opened, but Visual Studio has done it in the past so we should
     // ensure it generates an obvious error that the user can understand.
@@ -93,7 +93,7 @@
     );
   }
 
-  test_close() async {
+  Future<void> test_close() async {
     final initialContent = 'int a = 1;';
     final updatedContent = 'int a = 2;';
 
@@ -109,7 +109,7 @@
     expect(documentVersion.version, isNull);
   }
 
-  test_open() async {
+  Future<void> test_open() async {
     const testContent = 'CONTENT';
 
     await initialize();
@@ -123,7 +123,7 @@
     expect(documentVersion.version, 2);
   }
 
-  test_open_invalidPath() async {
+  Future<void> test_open_invalidPath() async {
     await initialize();
 
     final notificationParams = await expectErrorNotification<ShowMessageParams>(
diff --git a/pkg/analysis_server/test/lsp/flutter_outline_test.dart b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
index b34a46b..f79de6c 100644
--- a/pkg/analysis_server/test/lsp/flutter_outline_test.dart
+++ b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
@@ -9,7 +9,7 @@
 import '../src/utilities/mock_packages.dart';
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterOutlineTest);
   });
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_afterChange() async {
+  Future<void> test_afterChange() async {
     final initialContent = '''
 import 'package:flutter/material.dart';
 
@@ -61,7 +61,7 @@
         outlineAfterChange.children[0].children[0].className, equals('Icon'));
   }
 
-  test_initial() async {
+  Future<void> test_initial() async {
     final content = '''
 import 'package:flutter/material.dart';
 
diff --git a/pkg/analysis_server/test/lsp/folding_test.dart b/pkg/analysis_server/test/lsp/folding_test.dart
index 7c5333b..b27ea0b 100644
--- a/pkg/analysis_server/test/lsp/folding_test.dart
+++ b/pkg/analysis_server/test/lsp/folding_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FoldingTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class FoldingTest extends AbstractLspAnalysisServerTest {
-  test_class() async {
+  Future<void> test_class() async {
     final content = '''
     class MyClass2 {[[
       // Class content
@@ -41,7 +41,7 @@
     expect(regions, unorderedEquals(expectedRegions));
   }
 
-  test_comments() async {
+  Future<void> test_comments() async {
     final content = '''
     [[/// This is a comment
     /// that spans many lines]]
@@ -66,15 +66,7 @@
     expect(regions, unorderedEquals(expectedRegions));
   }
 
-  test_nonDartFile() async {
-    await initialize();
-    await openFile(pubspecFileUri, simplePubspecContent);
-
-    final regions = await getFoldingRegions(pubspecFileUri);
-    expect(regions, isEmpty);
-  }
-
-  test_headersImportsComments() async {
+  Future<void> test_headersImportsComments() async {
     // TODO(dantup): Review why the file header and the method comment ranges
     // are different... one spans only the range to collapse, but the other
     // just starts at the logical block.
@@ -109,6 +101,14 @@
     expect(regions, unorderedEquals(expectedRegions));
   }
 
+  Future<void> test_nonDartFile() async {
+    await initialize();
+    await openFile(pubspecFileUri, simplePubspecContent);
+
+    final regions = await getFoldingRegions(pubspecFileUri);
+    expect(regions, isEmpty);
+  }
+
   FoldingRange _toFoldingRange(Range range, FoldingRangeKind kind) {
     return FoldingRange(
       range.start.line,
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index cb79973..5653d51 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_test.dart
@@ -9,7 +9,7 @@
 import '../tool/lsp_spec/matchers.dart';
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FormatTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class FormatTest extends AbstractLspAnalysisServerTest {
-  test_alreadyFormatted() async {
+  Future<void> test_alreadyFormatted() async {
     const contents = '''main() {
   print('test');
 }
@@ -29,7 +29,7 @@
     expect(formatEdits, isNull);
   }
 
-  test_formatOnType_simple() async {
+  Future<void> test_formatOnType_simple() async {
     const contents = '''
     main  ()
     {
@@ -51,7 +51,7 @@
     expect(formattedContents, equals(expected));
   }
 
-  test_invalidSyntax() async {
+  Future<void> test_invalidSyntax() async {
     const contents = '''main(((( {
   print('test');
 }
@@ -63,7 +63,7 @@
     expect(formatEdits, isNull);
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     await initialize();
     await openFile(pubspecFileUri, simplePubspecContent);
 
@@ -72,7 +72,7 @@
     expect(formatEdits, isNull);
   }
 
-  test_path_doesNotExist() async {
+  Future<void> test_path_doesNotExist() async {
     await initialize();
 
     await expectLater(
@@ -82,7 +82,7 @@
     );
   }
 
-  test_path_invalidFormat() async {
+  Future<void> test_path_invalidFormat() async {
     await initialize();
 
     await expectLater(
@@ -92,7 +92,7 @@
     );
   }
 
-  test_path_notFileScheme() async {
+  Future<void> test_path_notFileScheme() async {
     await initialize();
 
     await expectLater(
@@ -101,7 +101,7 @@
     );
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     const contents = '''
     main  ()
     {
@@ -122,7 +122,7 @@
     expect(formattedContents, equals(expected));
   }
 
-  test_unopenFile() async {
+  Future<void> test_unopenFile() async {
     const contents = '''
     main  ()
     {
diff --git a/pkg/analysis_server/test/lsp/hover_test.dart b/pkg/analysis_server/test/lsp/hover_test.dart
index 859e858..a20279e 100644
--- a/pkg/analysis_server/test/lsp/hover_test.dart
+++ b/pkg/analysis_server/test/lsp/hover_test.dart
@@ -10,7 +10,7 @@
 import '../tool/lsp_spec/matchers.dart';
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(HoverTest);
   });
@@ -18,7 +18,7 @@
 
 @reflectiveTest
 class HoverTest extends AbstractLspAnalysisServerTest {
-  test_dartDoc_macros() async {
+  Future<void> test_dartDoc_macros() async {
     final content = '''
     /// {@template template_name}
     /// This is shared content.
@@ -39,7 +39,7 @@
     expect(_getStringContents(hover), endsWith('This is shared content.'));
   }
 
-  test_hover_bad_position() async {
+  Future<void> test_hover_bad_position() async {
     await initialize();
     await openFile(mainFileUri, '');
     await expectLater(
@@ -48,7 +48,7 @@
     );
   }
 
-  test_markdown_isFormattedForDisplay() async {
+  Future<void> test_markdown_isFormattedForDisplay() async {
     final content = '''
     /// This is a string.
     ///
@@ -94,7 +94,7 @@
     expect(markup.value, equals(expectedHoverContent));
   }
 
-  test_markdown_simple() async {
+  Future<void> test_markdown_simple() async {
     final content = '''
     /// This is a string.
     String [[a^bc]];
@@ -113,22 +113,7 @@
     expect(markup.value, contains('This is a string.'));
   }
 
-  test_range_multiLineConstructorCall() async {
-    final content = '''
-    final a = new [[Str^ing.fromCharCodes]]([
-      1,
-      2,
-    ]);
-    ''';
-
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(content));
-    final hover = await getHover(mainFileUri, positionFromMarker(content));
-    expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
-  }
-
-  test_noElement() async {
+  Future<void> test_noElement() async {
     final content = '''
     String abc;
 
@@ -145,14 +130,14 @@
     expect(hover, isNull);
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     await initialize();
     await openFile(pubspecFileUri, simplePubspecContent);
     final hover = await getHover(pubspecFileUri, startOfDocPos);
     expect(hover, isNull);
   }
 
-  test_plainText_simple() async {
+  Future<void> test_plainText_simple() async {
     final content = '''
     /// This is a string.
     String [[a^bc]];
@@ -173,7 +158,22 @@
     expect(markup.value, contains('This is a string.'));
   }
 
-  test_string_noDocComment() async {
+  Future<void> test_range_multiLineConstructorCall() async {
+    final content = '''
+    final a = new [[Str^ing.fromCharCodes]]([
+      1,
+      2,
+    ]);
+    ''';
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    final hover = await getHover(mainFileUri, positionFromMarker(content));
+    expect(hover, isNotNull);
+    expect(hover.range, equals(rangeFromMarkers(content)));
+  }
+
+  Future<void> test_string_noDocComment() async {
     final content = '''
     String [[a^bc]];
     ''';
@@ -195,7 +195,7 @@
     expect(_getStringContents(hover), equals(expectedHoverContent));
   }
 
-  test_string_reflectsLatestEdits() async {
+  Future<void> test_string_reflectsLatestEdits() async {
     final original = '''
     /// Original string.
     String [[a^bc]];
@@ -217,7 +217,7 @@
     expect(contents, contains('Updated'));
   }
 
-  test_string_simple() async {
+  Future<void> test_string_simple() async {
     final content = '''
     /// This is a string.
     String [[a^bc]];
@@ -233,7 +233,7 @@
     expect(contents, contains('This is a string.'));
   }
 
-  test_unopenFile() async {
+  Future<void> test_unopenFile() async {
     final content = '''
     /// This is a string.
     String [[a^bc]];
diff --git a/pkg/analysis_server/test/lsp/implementation_test.dart b/pkg/analysis_server/test/lsp/implementation_test.dart
index bde558e..ff4a3c8 100644
--- a/pkg/analysis_server/test/lsp/implementation_test.dart
+++ b/pkg/analysis_server/test/lsp/implementation_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImplementationTest);
   });
@@ -16,25 +16,25 @@
 
 @reflectiveTest
 class ImplementationTest extends AbstractLspAnalysisServerTest {
-  test_class_excludesSelf() => _testMarkedContent('''
+  Future<void> test_class_excludesSelf() => _testMarkedContent('''
       abstract class ^[[A]] {}
       class B extends A {}
       class C extends A {}
     ''', shouldMatch: false);
 
-  test_class_excludesSuper() => _testMarkedContent('''
+  Future<void> test_class_excludesSuper() => _testMarkedContent('''
       abstract class [[A]] {}
       class ^B extends A {}
       class C extends A {}
     ''', shouldMatch: false);
 
-  test_class_sub() => _testMarkedContent('''
+  Future<void> test_class_sub() => _testMarkedContent('''
       abstract class ^A {}
       class [[B]] extends A {}
       class [[C]] extends A {}
     ''');
 
-  test_class_subSub() => _testMarkedContent('''
+  Future<void> test_class_subSub() => _testMarkedContent('''
       abstract class ^A {}
       class [[B]] extends A {}
       class [[C]] extends A {}
@@ -43,7 +43,7 @@
       class [[F]] extends E {}
     ''');
 
-  test_emptyResults() async {
+  Future<void> test_emptyResults() async {
     final content = '';
 
     await initialize();
@@ -56,7 +56,8 @@
     expect(res, isEmpty);
   }
 
-  test_method_excludesClassesWithoutImplementations() => _testMarkedContent('''
+  Future<void> test_method_excludesClassesWithoutImplementations() =>
+      _testMarkedContent('''
       abstract class A {
         void ^b();
       }
@@ -66,7 +67,7 @@
       class [[E]] extends B {}
     ''', shouldMatch: false);
 
-  test_method_excludesSelf() => _testMarkedContent('''
+  Future<void> test_method_excludesSelf() => _testMarkedContent('''
       abstract class A {
         void ^[[b]]();
       }
@@ -76,7 +77,7 @@
       }
     ''', shouldMatch: false);
 
-  test_method_excludesSuper() => _testMarkedContent('''
+  Future<void> test_method_excludesSuper() => _testMarkedContent('''
       abstract class A {
         void [[b]]();
       }
@@ -86,7 +87,7 @@
       }
     ''', shouldMatch: false);
 
-  test_method_fromCallSite() => _testMarkedContent('''
+  Future<void> test_method_fromCallSite() => _testMarkedContent('''
       abstract class A {
         void b();
       }
@@ -115,7 +116,7 @@
       }
     ''');
 
-  test_method_sub() => _testMarkedContent('''
+  Future<void> test_method_sub() => _testMarkedContent('''
       abstract class A {
         void ^b();
       }
@@ -129,7 +130,7 @@
       }
     ''');
 
-  test_method_subSub() => _testMarkedContent('''
+  Future<void> test_method_subSub() => _testMarkedContent('''
       abstract class A {
         void ^b();
       }
@@ -149,7 +150,7 @@
       }
     ''');
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize();
 
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 4068327..dae70ae 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -11,7 +11,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InitializationTest);
   });
@@ -19,289 +19,16 @@
 
 @reflectiveTest
 class InitializationTest extends AbstractLspAnalysisServerTest {
-  test_initialize() async {
-    final response = await initialize();
-    expect(response, isNotNull);
-    expect(response.error, isNull);
-    expect(response.result, isNotNull);
-    expect(response.result, TypeMatcher<InitializeResult>());
-    InitializeResult result = response.result;
-    expect(result.capabilities, isNotNull);
-    // Check some basic capabilities that are unlikely to change.
-    expect(result.capabilities.textDocumentSync, isNotNull);
-    result.capabilities.textDocumentSync.map(
-      (options) {
-        // We'll always request open/closed notifications and incremental updates.
-        expect(options.openClose, isTrue);
-        expect(options.change, equals(TextDocumentSyncKind.Incremental));
-      },
-      (_) =>
-          throw 'Expected textDocumentSync capabilities to be a $TextDocumentSyncOptions',
-    );
+  TextDocumentRegistrationOptions registrationOptionsFor(
+    List<Registration> registrations,
+    Method method,
+  ) {
+    return registrations
+        .singleWhere((r) => r.method == method.toJson(), orElse: () => null)
+        ?.registerOptions;
   }
 
-  test_initialize_invalidParams() async {
-    final params = {'processId': 'invalid'};
-    final request = RequestMessage(
-      Either2<num, String>.t1(1),
-      Method.initialize,
-      params,
-      jsonRpcVersion,
-    );
-    final response = await sendRequestToServer(request);
-    expect(response.id, equals(request.id));
-    expect(response.error, isNotNull);
-    expect(response.error.code, equals(ErrorCodes.InvalidParams));
-    expect(response.result, isNull);
-  }
-
-  test_initialize_onlyAllowedOnce() async {
-    await initialize();
-    final response = await initialize(throwOnFailure: false);
-    expect(response, isNotNull);
-    expect(response.result, isNull);
-    expect(response.error, isNotNull);
-    expect(
-        response.error.code, equals(ServerErrorCodes.ServerAlreadyInitialized));
-  }
-
-  test_initialize_rootPath() async {
-    await initialize(rootPath: projectFolderPath);
-    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
-  }
-
-  test_initialize_rootUri() async {
-    await initialize(rootUri: projectFolderUri);
-    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
-  }
-
-  test_onlyAnalyzeProjectsWithOpenFiles_withPubpsec() async {
-    final nestedFilePath = join(
-        projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
-    final nestedFileUri = Uri.file(nestedFilePath);
-    await newFile(nestedFilePath);
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    await newFile(pubspecPath);
-
-    // The project folder shouldn't be added to start with.
-    await initialize(
-      rootUri: projectFolderUri,
-      initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
-    );
-    expect(server.contextManager.includedPaths, equals([]));
-
-    // Opening a file nested within the project should add the project folder.
-    await openFile(nestedFileUri, '');
-    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
-
-    // Ensure the file was cached in each driver. This happens as a result of
-    // adding to priority files, but if that's done before the file is in an
-    // analysis root it will not occur.
-    // https://github.com/dart-lang/sdk/issues/37338
-    server.driverMap.values.forEach((driver) {
-      expect(driver.getCachedResult(nestedFilePath), isNotNull);
-    });
-
-    // Closing the file should remove it.
-    await closeFile(nestedFileUri);
-    expect(server.contextManager.includedPaths, equals([]));
-  }
-
-  test_onlyAnalyzeProjectsWithOpenFiles_multipleFiles() async {
-    final file1 = join(projectFolderPath, 'file1.dart');
-    final file1Uri = Uri.file(file1);
-    await newFile(file1);
-    final file2 = join(projectFolderPath, 'file2.dart');
-    final file2Uri = Uri.file(file2);
-    await newFile(file2);
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    await newFile(pubspecPath);
-
-    await initialize(
-      rootUri: projectFolderUri,
-      initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
-    );
-
-    // Opening both files should only add the project folder once.
-    await openFile(file1Uri, '');
-    await openFile(file2Uri, '');
-    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
-
-    // Closing only one of the files should not remove the project folder
-    // since there are still open files.
-    await closeFile(file1Uri);
-    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
-
-    // Closing the last file should remove the project folder.
-    await closeFile(file2Uri);
-    expect(server.contextManager.includedPaths, equals([]));
-  }
-
-  test_onlyAnalyzeProjectsWithOpenFiles_withoutPubpsec() async {
-    final nestedFilePath = join(
-        projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
-    final nestedFileUri = Uri.file(nestedFilePath);
-    await newFile(nestedFilePath);
-
-    // The project folder shouldn't be added to start with.
-    await initialize(
-      rootUri: projectFolderUri,
-      initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
-    );
-    expect(server.contextManager.includedPaths, equals([]));
-
-    // Opening a file nested within the project will still not add the project
-    // folder because there was no pubspec.
-    final messageFromServer = await expectNotification<ShowMessageParams>(
-      (notification) => notification.method == Method.window_showMessage,
-      () => openFile(nestedFileUri, ''),
-    );
-    expect(server.contextManager.includedPaths, equals([]));
-    expect(messageFromServer.type, MessageType.Warning);
-    expect(messageFromServer.message,
-        contains('using onlyAnalyzeProjectsWithOpenFiles'));
-  }
-
-  test_initialize_workspaceFolders() async {
-    await initialize(workspaceFolders: [projectFolderUri]);
-    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
-  }
-
-  test_uninitialized_dropsNotifications() async {
-    final notification =
-        makeNotification(Method.fromJson('randomNotification'), null);
-    final nextNotification = errorNotificationsFromServer.first;
-    channel.sendNotificationToServer(notification);
-
-    // Wait up to 1sec to ensure no error/log notifications were sent back.
-    var didTimeout = false;
-    final notificationFromServer = await nextNotification.timeout(
-      const Duration(seconds: 1),
-      onTimeout: () {
-        didTimeout = true;
-        return null;
-      },
-    );
-
-    expect(notificationFromServer, isNull);
-    expect(didTimeout, isTrue);
-  }
-
-  test_uninitialized_rejectsRequests() async {
-    final request = makeRequest(Method.fromJson('randomRequest'), null);
-    final response = await channel.sendRequestToServer(request);
-    expect(response.id, equals(request.id));
-    expect(response.result, isNull);
-    expect(response.error, isNotNull);
-    expect(response.error.code, ErrorCodes.ServerNotInitialized);
-  }
-
-  test_dynamicRegistration_notSupportedByClient() async {
-    // If the client doesn't send any dynamicRegistration settings then there
-    // should be no `client/registerCapability` calls.
-
-    // Set a flag if any registerCapability request comes through.
-    bool didGetRegisterCapabilityRequest = false;
-    requestsFromServer
-        .firstWhere((n) => n.method == Method.client_registerCapability)
-        .then((params) {
-      didGetRegisterCapabilityRequest = true;
-    });
-
-    // Initialize with no dynamic registrations advertised.
-    final initResponse = await initialize();
-    await pumpEventQueue();
-
-    InitializeResult initResult = initResponse.result;
-    expect(initResult.capabilities, isNotNull);
-    // When dynamic registration is not supported, we will always statically
-    // request text document open/close and incremental updates.
-    expect(initResult.capabilities.textDocumentSync, isNotNull);
-    initResult.capabilities.textDocumentSync.map(
-      (options) {
-        expect(options.openClose, isTrue);
-        expect(options.change, equals(TextDocumentSyncKind.Incremental));
-      },
-      (_) =>
-          throw 'Expected textDocumentSync capabilities to be a $TextDocumentSyncOptions',
-    );
-    expect(initResult.capabilities.completionProvider, isNotNull);
-    expect(initResult.capabilities.hoverProvider, isNotNull);
-    expect(initResult.capabilities.signatureHelpProvider, isNotNull);
-    expect(initResult.capabilities.referencesProvider, isNotNull);
-    expect(initResult.capabilities.documentHighlightProvider, isNotNull);
-    expect(initResult.capabilities.documentFormattingProvider, isNotNull);
-    expect(initResult.capabilities.documentOnTypeFormattingProvider, isNotNull);
-    expect(initResult.capabilities.definitionProvider, isNotNull);
-    expect(initResult.capabilities.codeActionProvider, isNotNull);
-    expect(initResult.capabilities.renameProvider, isNotNull);
-    expect(initResult.capabilities.foldingRangeProvider, isNotNull);
-
-    expect(didGetRegisterCapabilityRequest, isFalse);
-  }
-
-  test_dynamicRegistration_suppressesStaticRegistration() async {
-    // If the client sends dynamicRegistration settings then there
-    // should not be static registrations for the same capabilities.
-
-    List<Registration> registrations;
-    final initResponse =
-        await handleExpectedRequest<ResponseMessage, RegistrationParams, void>(
-      Method.client_registerCapability,
-      () => initialize(
-          // Support dynamic registration for everything we support.
-          textDocumentCapabilities: withAllSupportedDynamicRegistrations(
-              emptyTextDocumentClientCapabilities)),
-      handler: (registrationParams) =>
-          registrations = registrationParams.registrations,
-    );
-
-    InitializeResult initResult = initResponse.result;
-    expect(initResult.capabilities, isNotNull);
-
-    // Ensure no static registrations. This list should include all server equivilents
-    // of the dynamic registrations listed in `ClientDynamicRegistrations.supported`.
-    expect(initResult.capabilities.textDocumentSync, isNull);
-    expect(initResult.capabilities.completionProvider, isNull);
-    expect(initResult.capabilities.hoverProvider, isNull);
-    expect(initResult.capabilities.signatureHelpProvider, isNull);
-    expect(initResult.capabilities.referencesProvider, isNull);
-    expect(initResult.capabilities.documentHighlightProvider, isNull);
-    expect(initResult.capabilities.documentFormattingProvider, isNull);
-    expect(initResult.capabilities.documentOnTypeFormattingProvider, isNull);
-    expect(initResult.capabilities.definitionProvider, isNull);
-    expect(initResult.capabilities.codeActionProvider, isNull);
-    expect(initResult.capabilities.renameProvider, isNull);
-    expect(initResult.capabilities.foldingRangeProvider, isNull);
-
-    // Ensure all expected dynamic registrations.
-    for (final expectedRegistration in ClientDynamicRegistrations.supported) {
-      final registration =
-          registrationOptionsFor(registrations, expectedRegistration);
-      expect(registration, isNotNull,
-          reason: 'Missing dynamic registration for $expectedRegistration');
-    }
-  }
-
-  test_dynamicRegistration_onlyForClientSupportedMethods() async {
-    // Check that when the server calls client/registerCapability it only includes
-    // the items we advertised dynamic registration support for.
-    List<Registration> registrations;
-    await handleExpectedRequest<void, RegistrationParams, void>(
-      Method.client_registerCapability,
-      () => initialize(
-          textDocumentCapabilities: withHoverDynamicRegistration(
-              emptyTextDocumentClientCapabilities)),
-      handler: (registrationParams) =>
-          registrations = registrationParams.registrations,
-    );
-
-    expect(registrations, hasLength(1));
-    expect(registrations.single.method,
-        equals(Method.textDocument_hover.toJson()));
-  }
-
-  test_dynamicRegistration_containsAppropriateSettings() async {
+  Future<void> test_dynamicRegistration_containsAppropriateSettings() async {
     // Basic check that the server responds with the capabilities we'd expect,
     // for ex including analysis_options.yaml in text synchronization but not
     // for hovers.
@@ -353,12 +80,285 @@
         isTrue);
   }
 
-  TextDocumentRegistrationOptions registrationOptionsFor(
-    List<Registration> registrations,
-    Method method,
-  ) {
-    return registrations
-        .singleWhere((r) => r.method == method.toJson(), orElse: () => null)
-        ?.registerOptions;
+  Future<void> test_dynamicRegistration_notSupportedByClient() async {
+    // If the client doesn't send any dynamicRegistration settings then there
+    // should be no `client/registerCapability` calls.
+
+    // Set a flag if any registerCapability request comes through.
+    bool didGetRegisterCapabilityRequest = false;
+    requestsFromServer
+        .firstWhere((n) => n.method == Method.client_registerCapability)
+        .then((params) {
+      didGetRegisterCapabilityRequest = true;
+    });
+
+    // Initialize with no dynamic registrations advertised.
+    final initResponse = await initialize();
+    await pumpEventQueue();
+
+    InitializeResult initResult = initResponse.result;
+    expect(initResult.capabilities, isNotNull);
+    // When dynamic registration is not supported, we will always statically
+    // request text document open/close and incremental updates.
+    expect(initResult.capabilities.textDocumentSync, isNotNull);
+    initResult.capabilities.textDocumentSync.map(
+      (options) {
+        expect(options.openClose, isTrue);
+        expect(options.change, equals(TextDocumentSyncKind.Incremental));
+      },
+      (_) =>
+          throw 'Expected textDocumentSync capabilities to be a $TextDocumentSyncOptions',
+    );
+    expect(initResult.capabilities.completionProvider, isNotNull);
+    expect(initResult.capabilities.hoverProvider, isNotNull);
+    expect(initResult.capabilities.signatureHelpProvider, isNotNull);
+    expect(initResult.capabilities.referencesProvider, isNotNull);
+    expect(initResult.capabilities.documentHighlightProvider, isNotNull);
+    expect(initResult.capabilities.documentFormattingProvider, isNotNull);
+    expect(initResult.capabilities.documentOnTypeFormattingProvider, isNotNull);
+    expect(initResult.capabilities.definitionProvider, isNotNull);
+    expect(initResult.capabilities.codeActionProvider, isNotNull);
+    expect(initResult.capabilities.renameProvider, isNotNull);
+    expect(initResult.capabilities.foldingRangeProvider, isNotNull);
+
+    expect(didGetRegisterCapabilityRequest, isFalse);
+  }
+
+  Future<void> test_dynamicRegistration_onlyForClientSupportedMethods() async {
+    // Check that when the server calls client/registerCapability it only includes
+    // the items we advertised dynamic registration support for.
+    List<Registration> registrations;
+    await handleExpectedRequest<void, RegistrationParams, void>(
+      Method.client_registerCapability,
+      () => initialize(
+          textDocumentCapabilities: withHoverDynamicRegistration(
+              emptyTextDocumentClientCapabilities)),
+      handler: (registrationParams) =>
+          registrations = registrationParams.registrations,
+    );
+
+    expect(registrations, hasLength(1));
+    expect(registrations.single.method,
+        equals(Method.textDocument_hover.toJson()));
+  }
+
+  Future<void> test_dynamicRegistration_suppressesStaticRegistration() async {
+    // If the client sends dynamicRegistration settings then there
+    // should not be static registrations for the same capabilities.
+
+    List<Registration> registrations;
+    final initResponse =
+        await handleExpectedRequest<ResponseMessage, RegistrationParams, void>(
+      Method.client_registerCapability,
+      () => initialize(
+          // Support dynamic registration for everything we support.
+          textDocumentCapabilities: withAllSupportedDynamicRegistrations(
+              emptyTextDocumentClientCapabilities)),
+      handler: (registrationParams) =>
+          registrations = registrationParams.registrations,
+    );
+
+    InitializeResult initResult = initResponse.result;
+    expect(initResult.capabilities, isNotNull);
+
+    // Ensure no static registrations. This list should include all server equivilents
+    // of the dynamic registrations listed in `ClientDynamicRegistrations.supported`.
+    expect(initResult.capabilities.textDocumentSync, isNull);
+    expect(initResult.capabilities.completionProvider, isNull);
+    expect(initResult.capabilities.hoverProvider, isNull);
+    expect(initResult.capabilities.signatureHelpProvider, isNull);
+    expect(initResult.capabilities.referencesProvider, isNull);
+    expect(initResult.capabilities.documentHighlightProvider, isNull);
+    expect(initResult.capabilities.documentFormattingProvider, isNull);
+    expect(initResult.capabilities.documentOnTypeFormattingProvider, isNull);
+    expect(initResult.capabilities.definitionProvider, isNull);
+    expect(initResult.capabilities.codeActionProvider, isNull);
+    expect(initResult.capabilities.renameProvider, isNull);
+    expect(initResult.capabilities.foldingRangeProvider, isNull);
+
+    // Ensure all expected dynamic registrations.
+    for (final expectedRegistration in ClientDynamicRegistrations.supported) {
+      final registration =
+          registrationOptionsFor(registrations, expectedRegistration);
+      expect(registration, isNotNull,
+          reason: 'Missing dynamic registration for $expectedRegistration');
+    }
+  }
+
+  Future<void> test_initialize() async {
+    final response = await initialize();
+    expect(response, isNotNull);
+    expect(response.error, isNull);
+    expect(response.result, isNotNull);
+    expect(response.result, TypeMatcher<InitializeResult>());
+    InitializeResult result = response.result;
+    expect(result.capabilities, isNotNull);
+    // Check some basic capabilities that are unlikely to change.
+    expect(result.capabilities.textDocumentSync, isNotNull);
+    result.capabilities.textDocumentSync.map(
+      (options) {
+        // We'll always request open/closed notifications and incremental updates.
+        expect(options.openClose, isTrue);
+        expect(options.change, equals(TextDocumentSyncKind.Incremental));
+      },
+      (_) =>
+          throw 'Expected textDocumentSync capabilities to be a $TextDocumentSyncOptions',
+    );
+  }
+
+  Future<void> test_initialize_invalidParams() async {
+    final params = {'processId': 'invalid'};
+    final request = RequestMessage(
+      Either2<num, String>.t1(1),
+      Method.initialize,
+      params,
+      jsonRpcVersion,
+    );
+    final response = await sendRequestToServer(request);
+    expect(response.id, equals(request.id));
+    expect(response.error, isNotNull);
+    expect(response.error.code, equals(ErrorCodes.InvalidParams));
+    expect(response.result, isNull);
+  }
+
+  Future<void> test_initialize_onlyAllowedOnce() async {
+    await initialize();
+    final response = await initialize(throwOnFailure: false);
+    expect(response, isNotNull);
+    expect(response.result, isNull);
+    expect(response.error, isNotNull);
+    expect(
+        response.error.code, equals(ServerErrorCodes.ServerAlreadyInitialized));
+  }
+
+  Future<void> test_initialize_rootPath() async {
+    await initialize(rootPath: projectFolderPath);
+    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
+  }
+
+  Future<void> test_initialize_rootUri() async {
+    await initialize(rootUri: projectFolderUri);
+    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
+  }
+
+  Future<void> test_initialize_workspaceFolders() async {
+    await initialize(workspaceFolders: [projectFolderUri]);
+    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
+  }
+
+  Future<void> test_onlyAnalyzeProjectsWithOpenFiles_multipleFiles() async {
+    final file1 = join(projectFolderPath, 'file1.dart');
+    final file1Uri = Uri.file(file1);
+    await newFile(file1);
+    final file2 = join(projectFolderPath, 'file2.dart');
+    final file2Uri = Uri.file(file2);
+    await newFile(file2);
+    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
+    await newFile(pubspecPath);
+
+    await initialize(
+      rootUri: projectFolderUri,
+      initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
+    );
+
+    // Opening both files should only add the project folder once.
+    await openFile(file1Uri, '');
+    await openFile(file2Uri, '');
+    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
+
+    // Closing only one of the files should not remove the project folder
+    // since there are still open files.
+    await closeFile(file1Uri);
+    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
+
+    // Closing the last file should remove the project folder.
+    await closeFile(file2Uri);
+    expect(server.contextManager.includedPaths, equals([]));
+  }
+
+  Future<void> test_onlyAnalyzeProjectsWithOpenFiles_withoutPubpsec() async {
+    final nestedFilePath = join(
+        projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
+    final nestedFileUri = Uri.file(nestedFilePath);
+    await newFile(nestedFilePath);
+
+    // The project folder shouldn't be added to start with.
+    await initialize(
+      rootUri: projectFolderUri,
+      initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
+    );
+    expect(server.contextManager.includedPaths, equals([]));
+
+    // Opening a file nested within the project will still not add the project
+    // folder because there was no pubspec.
+    final messageFromServer = await expectNotification<ShowMessageParams>(
+      (notification) => notification.method == Method.window_showMessage,
+      () => openFile(nestedFileUri, ''),
+    );
+    expect(server.contextManager.includedPaths, equals([]));
+    expect(messageFromServer.type, MessageType.Warning);
+    expect(messageFromServer.message,
+        contains('using onlyAnalyzeProjectsWithOpenFiles'));
+  }
+
+  Future<void> test_onlyAnalyzeProjectsWithOpenFiles_withPubpsec() async {
+    final nestedFilePath = join(
+        projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
+    final nestedFileUri = Uri.file(nestedFilePath);
+    await newFile(nestedFilePath);
+    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
+    await newFile(pubspecPath);
+
+    // The project folder shouldn't be added to start with.
+    await initialize(
+      rootUri: projectFolderUri,
+      initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
+    );
+    expect(server.contextManager.includedPaths, equals([]));
+
+    // Opening a file nested within the project should add the project folder.
+    await openFile(nestedFileUri, '');
+    expect(server.contextManager.includedPaths, equals([projectFolderPath]));
+
+    // Ensure the file was cached in each driver. This happens as a result of
+    // adding to priority files, but if that's done before the file is in an
+    // analysis root it will not occur.
+    // https://github.com/dart-lang/sdk/issues/37338
+    server.driverMap.values.forEach((driver) {
+      expect(driver.getCachedResult(nestedFilePath), isNotNull);
+    });
+
+    // Closing the file should remove it.
+    await closeFile(nestedFileUri);
+    expect(server.contextManager.includedPaths, equals([]));
+  }
+
+  Future<void> test_uninitialized_dropsNotifications() async {
+    final notification =
+        makeNotification(Method.fromJson('randomNotification'), null);
+    final nextNotification = errorNotificationsFromServer.first;
+    channel.sendNotificationToServer(notification);
+
+    // Wait up to 1sec to ensure no error/log notifications were sent back.
+    var didTimeout = false;
+    final notificationFromServer = await nextNotification.timeout(
+      const Duration(seconds: 1),
+      onTimeout: () {
+        didTimeout = true;
+        return null;
+      },
+    );
+
+    expect(notificationFromServer, isNull);
+    expect(didTimeout, isTrue);
+  }
+
+  Future<void> test_uninitialized_rejectsRequests() async {
+    final request = makeRequest(Method.fromJson('randomRequest'), null);
+    final response = await channel.sendRequestToServer(request);
+    expect(response.id, equals(request.id));
+    expect(response.result, isNull);
+    expect(response.error, isNotNull);
+    expect(response.error.code, ErrorCodes.ServerNotInitialized);
   }
 }
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index 3a53179..2ae7ac1 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -12,7 +12,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MappingTest);
   });
@@ -20,7 +20,7 @@
 
 @reflectiveTest
 class MappingTest extends AbstractLspAnalysisServerTest {
-  test_completionItemKind_firstNotSupported() async {
+  Future<void> test_completionItemKind_firstNotSupported() async {
     // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
     // did not support it, it'll map to Variable if the client doesn't support
     // that.
@@ -35,7 +35,7 @@
     expect(result, equals(lsp.CompletionItemKind.TypeParameter));
   }
 
-  test_completionItemKind_firstSupported() async {
+  Future<void> test_completionItemKind_firstSupported() async {
     // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
     // did not support it, it'll map to Variable if the client doesn't support
     // that.
@@ -47,7 +47,7 @@
     expect(result, equals(lsp.CompletionItemKind.Variable));
   }
 
-  test_completionItemKind_knownMapping() async {
+  Future<void> test_completionItemKind_knownMapping() async {
     final supportedKinds = HashSet.of([lsp.CompletionItemKind.Class]);
     final result = lsp.elementKindToCompletionItemKind(
       supportedKinds,
@@ -56,7 +56,7 @@
     expect(result, equals(lsp.CompletionItemKind.Class));
   }
 
-  test_completionItemKind_notMapped() async {
+  Future<void> test_completionItemKind_notMapped() async {
     var supportedKinds = HashSet<lsp.CompletionItemKind>();
     var result = lsp.elementKindToCompletionItemKind(
       supportedKinds,
@@ -65,7 +65,7 @@
     expect(result, isNull);
   }
 
-  test_completionItemKind_notSupported() async {
+  Future<void> test_completionItemKind_notSupported() async {
     var supportedKinds = HashSet<lsp.CompletionItemKind>();
     var result = lsp.elementKindToCompletionItemKind(
       supportedKinds,
@@ -74,17 +74,17 @@
     expect(result, isNull);
   }
 
-  test_selectionsInSnippets_empty() async {
+  Future<void> test_selectionsInSnippets_empty() async {
     var result = lsp.buildSnippetStringWithSelection('teststring', 4, 0);
     expect(result, equals(r'test${1:}string'));
   }
 
-  test_selectionsInSnippets_escaping() async {
+  Future<void> test_selectionsInSnippets_escaping() async {
     var result = lsp.buildSnippetStringWithSelection(r'te$tstri}ng', 4, 3);
     expect(result, equals(r'te\$t${1:str}i\}ng'));
   }
 
-  test_selectionsInSnippets_selection() async {
+  Future<void> test_selectionsInSnippets_selection() async {
     var result = lsp.buildSnippetStringWithSelection('teststring', 4, 3);
     expect(result, equals(r'test${1:str}ing'));
   }
diff --git a/pkg/analysis_server/test/lsp/outline_test.dart b/pkg/analysis_server/test/lsp/outline_test.dart
index 5b554eb..0d5bf89 100644
--- a/pkg/analysis_server/test/lsp/outline_test.dart
+++ b/pkg/analysis_server/test/lsp/outline_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OutlineTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class OutlineTest extends AbstractLspAnalysisServerTest {
-  test_afterChange() async {
+  Future<void> test_afterChange() async {
     final initialContent = 'class A {}';
     final updatedContent = 'class B {}';
     await initialize(initializationOptions: {'outline': true});
@@ -38,7 +38,7 @@
     expect(outlineAfterChange.children[0].element.name, equals('B'));
   }
 
-  test_initial() async {
+  Future<void> test_initial() async {
     final content = '''
 /// a
 class A {
diff --git a/pkg/analysis_server/test/lsp/priority_files_test.dart b/pkg/analysis_server/test/lsp/priority_files_test.dart
index 7a7b330..028f903 100644
--- a/pkg/analysis_server/test/lsp/priority_files_test.dart
+++ b/pkg/analysis_server/test/lsp/priority_files_test.dart
@@ -7,7 +7,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PriorityFilesTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class PriorityFilesTest extends AbstractLspAnalysisServerTest {
-  test_close() async {
+  Future<void> test_close() async {
     await initialize();
     await openFile(mainFileUri, '');
     await closeFile(mainFileUri);
@@ -26,7 +26,7 @@
     });
   }
 
-  test_open() async {
+  Future<void> test_open() async {
     await initialize();
     await openFile(mainFileUri, '');
 
diff --git a/pkg/analysis_server/test/lsp/references_test.dart b/pkg/analysis_server/test/lsp/references_test.dart
index 5520ffc..738a752 100644
--- a/pkg/analysis_server/test/lsp/references_test.dart
+++ b/pkg/analysis_server/test/lsp/references_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReferencesTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class ReferencesTest extends AbstractLspAnalysisServerTest {
-  test_acrossFiles_includeDeclaration() async {
+  Future<void> test_acrossFiles_includeDeclaration() async {
     final mainContents = '''
     import 'referenced.dart';
 
@@ -62,7 +62,7 @@
             rangeFromMarkers(referencedContents))));
   }
 
-  test_acrossFiles_withoutDeclaration() async {
+  Future<void> test_acrossFiles_withoutDeclaration() async {
     final mainContents = '''
     import 'referenced.dart';
 
@@ -99,7 +99,7 @@
     expect(loc.uri, equals(mainFileUri.toString()));
   }
 
-  test_nonDartFile() async {
+  Future<void> test_nonDartFile() async {
     newFile(pubspecFilePath, content: simplePubspecContent);
     await initialize();
 
@@ -107,7 +107,7 @@
     expect(res, isEmpty);
   }
 
-  test_singleFile_withoutDeclaration() async {
+  Future<void> test_singleFile_withoutDeclaration() async {
     final contents = '''
     f^oo() {
       [[foo]]();
@@ -127,7 +127,7 @@
     );
   }
 
-  test_unopenFile() async {
+  Future<void> test_unopenFile() async {
     final contents = '''
     f^oo() {
       [[foo]]();
diff --git a/pkg/analysis_server/test/lsp/rename_test.dart b/pkg/analysis_server/test/lsp/rename_test.dart
index e55fbe3..54a4f45 100644
--- a/pkg/analysis_server/test/lsp/rename_test.dart
+++ b/pkg/analysis_server/test/lsp/rename_test.dart
@@ -9,7 +9,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class RenameTest extends AbstractLspAnalysisServerTest {
-  test_prepare_class() {
+  Future<void> test_prepare_class() {
     const content = '''
     class MyClass {}
     final a = new [[My^Class]]();
@@ -26,7 +26,7 @@
     return _test_prepare(content, 'MyClass');
   }
 
-  test_prepare_classNewKeyword() async {
+  Future<void> test_prepare_classNewKeyword() async {
     const content = '''
     class MyClass {}
     final a = n^ew [[MyClass]]();
@@ -35,7 +35,7 @@
     return _test_prepare(content, 'MyClass');
   }
 
-  test_prepare_importPrefix() async {
+  Future<void> test_prepare_importPrefix() async {
     const content = '''
     import 'dart:async' as [[myPr^efix]];
     ''';
@@ -43,7 +43,7 @@
     return _test_prepare(content, 'myPrefix');
   }
 
-  test_prepare_importWithoutPrefix() async {
+  Future<void> test_prepare_importWithoutPrefix() async {
     const content = '''
     imp[[^]]ort 'dart:async';
     ''';
@@ -51,7 +51,7 @@
     return _test_prepare(content, '');
   }
 
-  test_prepare_importWithPrefix() async {
+  Future<void> test_prepare_importWithPrefix() async {
     const content = '''
     imp^ort 'dart:async' as [[myPrefix]];
     ''';
@@ -59,7 +59,7 @@
     return _test_prepare(content, 'myPrefix');
   }
 
-  test_prepare_invalidRenameLocation() async {
+  Future<void> test_prepare_invalidRenameLocation() async {
     const content = '''
     main() {
       // comm^ent
@@ -69,7 +69,7 @@
     return _test_prepare(content, null);
   }
 
-  test_prepare_sdkClass() async {
+  Future<void> test_prepare_sdkClass() async {
     const content = '''
     final a = new [[Ob^ject]]();
     ''';
@@ -93,7 +93,7 @@
     expect(response.error.message, contains('is defined in the SDK'));
   }
 
-  test_prepare_variable() async {
+  Future<void> test_prepare_variable() async {
     const content = '''
     main() {
       var variable = 0;
@@ -104,7 +104,7 @@
     return _test_prepare(content, 'variable');
   }
 
-  test_rename_class() {
+  Future<void> test_rename_class() {
     const content = '''
     class MyClass {}
     final a = new [[My^Class]]();
@@ -117,24 +117,7 @@
         content, 'MyNewClass', expectedContent);
   }
 
-  test_rename_withoutVersionedIdentifier() {
-    // Without sending a document version, the rename should still work because
-    // the server should use the version it had at the start of the rename
-    // operation.
-    const content = '''
-    class MyClass {}
-    final a = new [[My^Class]]();
-    ''';
-    const expectedContent = '''
-    class MyNewClass {}
-    final a = new MyNewClass();
-    ''';
-    return _test_rename_withDocumentChanges(
-        content, 'MyNewClass', expectedContent,
-        sendRenameVersion: false);
-  }
-
-  test_rename_classNewKeyword() async {
+  Future<void> test_rename_classNewKeyword() async {
     const content = '''
     class MyClass {}
     final a = n^ew MyClass();
@@ -147,7 +130,7 @@
         content, 'MyNewClass', expectedContent);
   }
 
-  test_rename_importPrefix() {
+  Future<void> test_rename_importPrefix() {
     const content = '''
     import 'dart:async' as myPr^efix;
     ''';
@@ -158,7 +141,7 @@
         content, 'myNewPrefix', expectedContent);
   }
 
-  test_rename_importWithoutPrefix() {
+  Future<void> test_rename_importWithoutPrefix() {
     const content = '''
     imp^ort 'dart:async';
     ''';
@@ -169,7 +152,7 @@
         content, 'myAddedPrefix', expectedContent);
   }
 
-  test_rename_importWithPrefix() {
+  Future<void> test_rename_importWithPrefix() {
     const content = '''
     imp^ort 'dart:async' as myPrefix;
     ''';
@@ -180,7 +163,7 @@
         content, 'myNewPrefix', expectedContent);
   }
 
-  test_rename_invalidRenameLocation() {
+  Future<void> test_rename_invalidRenameLocation() {
     const content = '''
     main() {
       // comm^ent
@@ -189,192 +172,7 @@
     return _test_rename_withDocumentChanges(content, 'MyNewClass', null);
   }
 
-  test_rename_rejectedForBadName() async {
-    const content = '''
-    class MyClass {}
-    final a = n^ew MyClass();
-    ''';
-    final error = await _test_rename_failure(content, 'not a valid class name');
-    expect(error.code, equals(ServerErrorCodes.RenameNotValid));
-    expect(error.message, contains('name must not contain'));
-  }
-
-  test_rename_rejectedForDuplicateName() async {
-    const content = '''
-    class MyOtherClass {}
-    class MyClass {}
-    final a = n^ew MyClass();
-    ''';
-    final error = await _test_rename_failure(content, 'MyOtherClass');
-    expect(error.code, equals(ServerErrorCodes.RenameNotValid));
-    expect(error.message, contains('already declares class with name'));
-  }
-
-  test_rename_rejectedForStaleDocument() async {
-    const content = '''
-    class MyClass {}
-    final a = n^ew MyClass();
-    ''';
-    final error =
-        await _test_rename_failure(content, 'MyNewClass', openFileVersion: 111);
-    expect(error.code, equals(ErrorCodes.ContentModified));
-    expect(error.message, contains('Document was modified'));
-  }
-
-  test_rename_sdkClass() async {
-    const content = '''
-    final a = new [[Ob^ject]]();
-    ''';
-
-    await newFile(mainFilePath, content: withoutMarkers(content));
-    await initialize();
-
-    final request = makeRequest(
-      Method.textDocument_rename,
-      RenameParams(
-        TextDocumentIdentifier(mainFileUri.toString()),
-        positionFromMarker(content),
-        'Object2',
-      ),
-    );
-    final response = await channel.sendRequestToServer(request);
-
-    expect(response.id, equals(request.id));
-    expect(response.result, isNull);
-    expect(response.error, isNotNull);
-    expect(response.error.code, ServerErrorCodes.RenameNotValid);
-    expect(response.error.message, contains('is defined in the SDK'));
-  }
-
-  test_rename_usingLegacyChangeInterface() async {
-    // This test initializes without support for DocumentChanges (versioning)
-    // whereas the other tests all use DocumentChanges support (preferred).
-    const content = '''
-    class MyClass {}
-    final a = new My^Class();
-    ''';
-    const expectedContent = '''
-    class MyNewClass {}
-    final a = new MyNewClass();
-    ''';
-
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(content), version: 222);
-
-    final result = await rename(
-      mainFileUri,
-      222,
-      positionFromMarker(content),
-      'MyNewClass',
-    );
-
-    // Ensure applying the changes will give us the expected content.
-    final contents = {
-      mainFilePath: withoutMarkers(content),
-    };
-    applyChanges(contents, result.changes);
-    expect(contents[mainFilePath], equals(expectedContent));
-  }
-
-  test_rename_variable() {
-    const content = '''
-    main() {
-      var variable = 0;
-      print([[vari^able]]);
-    }
-    ''';
-    const expectedContent = '''
-    main() {
-      var foo = 0;
-      print(foo);
-    }
-    ''';
-    return _test_rename_withDocumentChanges(content, 'foo', expectedContent);
-  }
-
-  _test_prepare(String content, String expectedPlaceholder) async {
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(content));
-
-    final result =
-        await prepareRename(mainFileUri, positionFromMarker(content));
-
-    if (expectedPlaceholder == null) {
-      expect(result, isNull);
-    } else {
-      expect(result.range, equals(rangeFromMarkers(content)));
-      expect(result.placeholder, equals(expectedPlaceholder));
-    }
-  }
-
-  Future<ResponseError> _test_rename_failure(
-    String content,
-    String newName, {
-    int openFileVersion = 222,
-    int renameRequestFileVersion = 222,
-  }) async {
-    await initialize(
-      workspaceCapabilities:
-          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
-    );
-    await openFile(mainFileUri, withoutMarkers(content),
-        version: openFileVersion);
-
-    final result = await renameRaw(
-      mainFileUri,
-      renameRequestFileVersion,
-      positionFromMarker(content),
-      newName,
-    );
-
-    expect(result.result, isNull);
-    expect(result.error, isNotNull);
-    return result.error;
-  }
-
-  _test_rename_withDocumentChanges(
-    String content,
-    String newName,
-    String expectedContent, {
-    sendDocumentVersion = true,
-    sendRenameVersion = true,
-  }) async {
-    // The specific number doesn't matter here, it's just a placeholder to confirm
-    // the values match.
-    final documentVersion = 222;
-    await initialize(
-      workspaceCapabilities:
-          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
-    );
-    await openFile(mainFileUri, withoutMarkers(content),
-        version: sendDocumentVersion ? documentVersion : null);
-
-    final result = await rename(
-      mainFileUri,
-      sendRenameVersion ? documentVersion : null,
-      positionFromMarker(content),
-      newName,
-    );
-    if (expectedContent == null) {
-      expect(result, isNull);
-    } else {
-      // Ensure applying the changes will give us the expected content.
-      final contents = {
-        mainFilePath: withoutMarkers(content),
-      };
-      final documentVersions = {
-        mainFilePath: documentVersion,
-      };
-      applyDocumentChanges(
-        contents,
-        result.documentChanges,
-        expectedVersions: documentVersions,
-      );
-      expect(contents[mainFilePath], equals(expectedContent));
-    }
-  }
-
-  test_rename_multipleFiles() async {
+  Future<void> test_rename_multipleFiles() async {
     final referencedFilePath =
         join(projectFolderPath, 'lib', 'referenced.dart');
     final referencedFileUri = Uri.file(referencedFilePath);
@@ -428,4 +226,206 @@
     expect(contents[mainFilePath], equals(expectedMainContent));
     expect(contents[referencedFilePath], equals(expectedReferencedContent));
   }
+
+  Future<void> test_rename_rejectedForBadName() async {
+    const content = '''
+    class MyClass {}
+    final a = n^ew MyClass();
+    ''';
+    final error = await _test_rename_failure(content, 'not a valid class name');
+    expect(error.code, equals(ServerErrorCodes.RenameNotValid));
+    expect(error.message, contains('name must not contain'));
+  }
+
+  Future<void> test_rename_rejectedForDuplicateName() async {
+    const content = '''
+    class MyOtherClass {}
+    class MyClass {}
+    final a = n^ew MyClass();
+    ''';
+    final error = await _test_rename_failure(content, 'MyOtherClass');
+    expect(error.code, equals(ServerErrorCodes.RenameNotValid));
+    expect(error.message, contains('already declares class with name'));
+  }
+
+  Future<void> test_rename_rejectedForStaleDocument() async {
+    const content = '''
+    class MyClass {}
+    final a = n^ew MyClass();
+    ''';
+    final error =
+        await _test_rename_failure(content, 'MyNewClass', openFileVersion: 111);
+    expect(error.code, equals(ErrorCodes.ContentModified));
+    expect(error.message, contains('Document was modified'));
+  }
+
+  Future<void> test_rename_sdkClass() async {
+    const content = '''
+    final a = new [[Ob^ject]]();
+    ''';
+
+    await newFile(mainFilePath, content: withoutMarkers(content));
+    await initialize();
+
+    final request = makeRequest(
+      Method.textDocument_rename,
+      RenameParams(
+        TextDocumentIdentifier(mainFileUri.toString()),
+        positionFromMarker(content),
+        'Object2',
+      ),
+    );
+    final response = await channel.sendRequestToServer(request);
+
+    expect(response.id, equals(request.id));
+    expect(response.result, isNull);
+    expect(response.error, isNotNull);
+    expect(response.error.code, ServerErrorCodes.RenameNotValid);
+    expect(response.error.message, contains('is defined in the SDK'));
+  }
+
+  Future<void> test_rename_usingLegacyChangeInterface() async {
+    // This test initializes without support for DocumentChanges (versioning)
+    // whereas the other tests all use DocumentChanges support (preferred).
+    const content = '''
+    class MyClass {}
+    final a = new My^Class();
+    ''';
+    const expectedContent = '''
+    class MyNewClass {}
+    final a = new MyNewClass();
+    ''';
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content), version: 222);
+
+    final result = await rename(
+      mainFileUri,
+      222,
+      positionFromMarker(content),
+      'MyNewClass',
+    );
+
+    // Ensure applying the changes will give us the expected content.
+    final contents = {
+      mainFilePath: withoutMarkers(content),
+    };
+    applyChanges(contents, result.changes);
+    expect(contents[mainFilePath], equals(expectedContent));
+  }
+
+  Future<void> test_rename_variable() {
+    const content = '''
+    main() {
+      var variable = 0;
+      print([[vari^able]]);
+    }
+    ''';
+    const expectedContent = '''
+    main() {
+      var foo = 0;
+      print(foo);
+    }
+    ''';
+    return _test_rename_withDocumentChanges(content, 'foo', expectedContent);
+  }
+
+  Future<void> test_rename_withoutVersionedIdentifier() {
+    // Without sending a document version, the rename should still work because
+    // the server should use the version it had at the start of the rename
+    // operation.
+    const content = '''
+    class MyClass {}
+    final a = new [[My^Class]]();
+    ''';
+    const expectedContent = '''
+    class MyNewClass {}
+    final a = new MyNewClass();
+    ''';
+    return _test_rename_withDocumentChanges(
+        content, 'MyNewClass', expectedContent,
+        sendRenameVersion: false);
+  }
+
+  Future<void> _test_prepare(String content, String expectedPlaceholder) async {
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+
+    final result =
+        await prepareRename(mainFileUri, positionFromMarker(content));
+
+    if (expectedPlaceholder == null) {
+      expect(result, isNull);
+    } else {
+      expect(result.range, equals(rangeFromMarkers(content)));
+      expect(result.placeholder, equals(expectedPlaceholder));
+    }
+  }
+
+  Future<ResponseError> _test_rename_failure(
+    String content,
+    String newName, {
+    int openFileVersion = 222,
+    int renameRequestFileVersion = 222,
+  }) async {
+    await initialize(
+      workspaceCapabilities:
+          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+    );
+    await openFile(mainFileUri, withoutMarkers(content),
+        version: openFileVersion);
+
+    final result = await renameRaw(
+      mainFileUri,
+      renameRequestFileVersion,
+      positionFromMarker(content),
+      newName,
+    );
+
+    expect(result.result, isNull);
+    expect(result.error, isNotNull);
+    return result.error;
+  }
+
+  Future<void> _test_rename_withDocumentChanges(
+    String content,
+    String newName,
+    String expectedContent, {
+    sendDocumentVersion = true,
+    sendRenameVersion = true,
+  }) async {
+    // The specific number doesn't matter here, it's just a placeholder to confirm
+    // the values match.
+    final documentVersion = 222;
+    await initialize(
+      workspaceCapabilities:
+          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+    );
+    await openFile(mainFileUri, withoutMarkers(content),
+        version: sendDocumentVersion ? documentVersion : null);
+
+    final result = await rename(
+      mainFileUri,
+      sendRenameVersion ? documentVersion : null,
+      positionFromMarker(content),
+      newName,
+    );
+    if (expectedContent == null) {
+      expect(result, isNull);
+    } else {
+      // Ensure applying the changes will give us the expected content.
+      final contents = {
+        mainFilePath: withoutMarkers(content),
+      };
+      final documentVersions = {
+        mainFilePath: documentVersion,
+      };
+      applyDocumentChanges(
+        contents,
+        result.documentChanges,
+        expectedVersions: documentVersions,
+      );
+      expect(contents[mainFilePath], equals(expectedContent));
+    }
+  }
 }
diff --git a/pkg/analysis_server/test/lsp/server_test.dart b/pkg/analysis_server/test/lsp/server_test.dart
index fb582d0..adca252 100644
--- a/pkg/analysis_server/test/lsp/server_test.dart
+++ b/pkg/analysis_server/test/lsp/server_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ServerTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class ServerTest extends AbstractLspAnalysisServerTest {
-  test_inconsistentStateError() async {
+  Future<void> test_inconsistentStateError() async {
     await initialize();
     await openFile(mainFileUri, '');
     // Attempt to make an illegal modification to the file. This indicates the
@@ -35,18 +35,18 @@
     await server.exited.timeout(const Duration(seconds: 10));
   }
 
-  test_shutdown_initialized() async {
+  Future<void> test_shutdown_initialized() async {
     await initialize();
     final response = await sendShutdown();
     expect(response, isNull);
   }
 
-  test_shutdown_uninitialized() async {
+  Future<void> test_shutdown_uninitialized() async {
     final response = await sendShutdown();
     expect(response, isNull);
   }
 
-  test_unknownNotifications_logError() async {
+  Future<void> test_unknownNotifications_logError() async {
     await initialize();
 
     final notification =
@@ -62,7 +62,7 @@
     );
   }
 
-  test_unknownOptionalNotifications_silentlyDropped() async {
+  Future<void> test_unknownOptionalNotifications_silentlyDropped() async {
     await initialize();
     final notification =
         makeNotification(Method.fromJson(r'$/randomNotification'), null);
@@ -83,9 +83,9 @@
     expect(didTimeout, isTrue);
   }
 
-  test_unknownRequest_rejected() async {
+  Future<void> test_unknownOptionalRequest_rejected() async {
     await initialize();
-    final request = makeRequest(Method.fromJson('randomRequest'), null);
+    final request = makeRequest(Method.fromJson(r'$/randomRequest'), null);
     final response = await channel.sendRequestToServer(request);
     expect(response.id, equals(request.id));
     expect(response.error, isNotNull);
@@ -93,9 +93,9 @@
     expect(response.result, isNull);
   }
 
-  test_unknownOptionalRequest_rejected() async {
+  Future<void> test_unknownRequest_rejected() async {
     await initialize();
-    final request = makeRequest(Method.fromJson(r'$/randomRequest'), null);
+    final request = makeRequest(Method.fromJson('randomRequest'), null);
     final response = await channel.sendRequestToServer(request);
     expect(response.id, equals(request.id));
     expect(response.error, isNotNull);
diff --git a/pkg/analysis_server/test/lsp/signature_help_test.dart b/pkg/analysis_server/test/lsp/signature_help_test.dart
index 3668966..c5ef295 100644
--- a/pkg/analysis_server/test/lsp/signature_help_test.dart
+++ b/pkg/analysis_server/test/lsp/signature_help_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SignatureHelpTest);
   });
@@ -16,253 +16,7 @@
 
 @reflectiveTest
 class SignatureHelpTest extends AbstractLspAnalysisServerTest {
-  test_formats_markdown() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, int i) {
-      foo(^);
-    }
-    ''';
-    final expectedLabel = 'foo(String s, int i)';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('int i', null),
-      ],
-      expectedFormat: MarkupKind.Markdown,
-    );
-  }
-
-  test_formats_notSupported() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, int i) {
-      foo(^);
-    }
-    ''';
-    final expectedLabel = 'foo(String s, int i)';
-    final expectedDoc = 'Does foo.';
-
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('int i', null),
-      ],
-      expectedFormat: null,
-    );
-  }
-
-  test_formats_plainTextOnly() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, int i) {
-      foo(^);
-    }
-    ''';
-    final expectedLabel = 'foo(String s, int i)';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.PlainText]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('int i', null),
-      ],
-      expectedFormat: MarkupKind.PlainText,
-    );
-  }
-
-  test_formats_plainTextPreferred() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, int i) {
-      foo(^);
-    }
-    ''';
-    final expectedLabel = 'foo(String s, int i)';
-    final expectedDoc = 'Does foo.';
-
-    // We say we prefer PlainText as a client, but since we only really
-    // support Markdown and the client supports it, we expect the server
-    // to provide Markdown.
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities,
-            [MarkupKind.PlainText, MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('int i', null),
-      ],
-      expectedFormat: MarkupKind.Markdown,
-    );
-  }
-
-  test_nonDartFile() async {
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.PlainText]));
-    await openFile(pubspecFileUri, simplePubspecContent);
-    final res = await getSignatureHelp(pubspecFileUri, startOfDocPos);
-    expect(res, isNull);
-  }
-
-  test_params_multipleNamed() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, {bool b = true, bool a}) {
-      foo(^);
-    }
-    ''';
-
-    final expectedLabel = 'foo(String s, {bool b = true, bool a})';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('bool b = true', null),
-        ParameterInformation('bool a', null),
-      ],
-    );
-  }
-
-  test_params_multipleOptional() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, [bool b = true, bool a]) {
-      foo(^);
-    }
-    ''';
-
-    final expectedLabel = 'foo(String s, [bool b = true, bool a])';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('bool b = true', null),
-        ParameterInformation('bool a', null),
-      ],
-    );
-  }
-
-  test_params_named() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, {bool b = true}) {
-      foo(^);
-    }
-    ''';
-
-    final expectedLabel = 'foo(String s, {bool b = true})';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('bool b = true', null),
-      ],
-    );
-  }
-
-  test_params_optional() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, [bool b = true]) {
-      foo(^);
-    }
-    ''';
-
-    final expectedLabel = 'foo(String s, [bool b = true])';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('bool b = true', null),
-      ],
-    );
-  }
-
-  test_simple() async {
-    final content = '''
-    /// Does foo.
-    foo(String s, int i) {
-      foo(^);
-    }
-    ''';
-    final expectedLabel = 'foo(String s, int i)';
-    final expectedDoc = 'Does foo.';
-
-    await initialize(
-        textDocumentCapabilities: withSignatureHelpContentFormat(
-            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
-    await openFile(mainFileUri, withoutMarkers(content));
-    await testSignature(
-      content,
-      expectedLabel,
-      expectedDoc,
-      [
-        ParameterInformation('String s', null),
-        ParameterInformation('int i', null),
-      ],
-    );
-  }
-
-  test_dartDocMacro() async {
+  Future<void> test_dartDocMacro() async {
     final content = '''
     /// {@template template_name}
     /// This is shared content.
@@ -293,7 +47,253 @@
     );
   }
 
-  test_unopenFile() async {
+  Future<void> test_formats_markdown() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, int i) {
+      foo(^);
+    }
+    ''';
+    final expectedLabel = 'foo(String s, int i)';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('int i', null),
+      ],
+      expectedFormat: MarkupKind.Markdown,
+    );
+  }
+
+  Future<void> test_formats_notSupported() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, int i) {
+      foo(^);
+    }
+    ''';
+    final expectedLabel = 'foo(String s, int i)';
+    final expectedDoc = 'Does foo.';
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('int i', null),
+      ],
+      expectedFormat: null,
+    );
+  }
+
+  Future<void> test_formats_plainTextOnly() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, int i) {
+      foo(^);
+    }
+    ''';
+    final expectedLabel = 'foo(String s, int i)';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.PlainText]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('int i', null),
+      ],
+      expectedFormat: MarkupKind.PlainText,
+    );
+  }
+
+  Future<void> test_formats_plainTextPreferred() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, int i) {
+      foo(^);
+    }
+    ''';
+    final expectedLabel = 'foo(String s, int i)';
+    final expectedDoc = 'Does foo.';
+
+    // We say we prefer PlainText as a client, but since we only really
+    // support Markdown and the client supports it, we expect the server
+    // to provide Markdown.
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities,
+            [MarkupKind.PlainText, MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('int i', null),
+      ],
+      expectedFormat: MarkupKind.Markdown,
+    );
+  }
+
+  Future<void> test_nonDartFile() async {
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.PlainText]));
+    await openFile(pubspecFileUri, simplePubspecContent);
+    final res = await getSignatureHelp(pubspecFileUri, startOfDocPos);
+    expect(res, isNull);
+  }
+
+  Future<void> test_params_multipleNamed() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, {bool b = true, bool a}) {
+      foo(^);
+    }
+    ''';
+
+    final expectedLabel = 'foo(String s, {bool b = true, bool a})';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('bool b = true', null),
+        ParameterInformation('bool a', null),
+      ],
+    );
+  }
+
+  Future<void> test_params_multipleOptional() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, [bool b = true, bool a]) {
+      foo(^);
+    }
+    ''';
+
+    final expectedLabel = 'foo(String s, [bool b = true, bool a])';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('bool b = true', null),
+        ParameterInformation('bool a', null),
+      ],
+    );
+  }
+
+  Future<void> test_params_named() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, {bool b = true}) {
+      foo(^);
+    }
+    ''';
+
+    final expectedLabel = 'foo(String s, {bool b = true})';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('bool b = true', null),
+      ],
+    );
+  }
+
+  Future<void> test_params_optional() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, [bool b = true]) {
+      foo(^);
+    }
+    ''';
+
+    final expectedLabel = 'foo(String s, [bool b = true])';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('bool b = true', null),
+      ],
+    );
+  }
+
+  Future<void> test_simple() async {
+    final content = '''
+    /// Does foo.
+    foo(String s, int i) {
+      foo(^);
+    }
+    ''';
+    final expectedLabel = 'foo(String s, int i)';
+    final expectedDoc = 'Does foo.';
+
+    await initialize(
+        textDocumentCapabilities: withSignatureHelpContentFormat(
+            emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await testSignature(
+      content,
+      expectedLabel,
+      expectedDoc,
+      [
+        ParameterInformation('String s', null),
+        ParameterInformation('int i', null),
+      ],
+    );
+  }
+
+  Future<void> test_unopenFile() async {
     final content = '''
     /// Does foo.
     foo(String s, int i) {
diff --git a/pkg/analysis_server/test/lsp/super_test.dart b/pkg/analysis_server/test/lsp/super_test.dart
index 32f79df..0b81f12 100644
--- a/pkg/analysis_server/test/lsp/super_test.dart
+++ b/pkg/analysis_server/test/lsp/super_test.dart
@@ -8,7 +8,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SuperTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class SuperTest extends AbstractLspAnalysisServerTest {
-  test_className() async {
+  Future<void> test_className() async {
     final content = '''
 class A {}
 
@@ -35,7 +35,7 @@
         equals(Location(mainFileUri.toString(), rangeFromMarkers(content))));
   }
 
-  test_insideClass() async {
+  Future<void> test_insideClass() async {
     final content = '''
 class A {}
 
@@ -56,7 +56,7 @@
         equals(Location(mainFileUri.toString(), rangeFromMarkers(content))));
   }
 
-  test_insideMethod() async {
+  Future<void> test_insideMethod() async {
     final content = '''
 class A {
   void [[foo]]() {}
@@ -82,7 +82,7 @@
         equals(Location(mainFileUri.toString(), rangeFromMarkers(content))));
   }
 
-  test_methodName() async {
+  Future<void> test_methodName() async {
     final content = '''
 class A {
   void [[foo]]() {}
@@ -108,7 +108,7 @@
         equals(Location(mainFileUri.toString(), rangeFromMarkers(content))));
   }
 
-  test_methodReturnType() async {
+  Future<void> test_methodReturnType() async {
     final content = '''
 class A {
   void [[foo]]() {}
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index 5b93e41..6ed924f 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -35,7 +35,7 @@
 import 'super_test.dart' as get_super;
 import 'workspace_symbols_test.dart' as workspace_symbols;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     analyzer_status.main();
     cancel_request.main();
diff --git a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
index 20de6a0..3558555 100644
--- a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
@@ -9,7 +9,7 @@
 
 import 'server_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(WorkspaceSymbolsTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class WorkspaceSymbolsTest extends AbstractLspAnalysisServerTest {
-  test_fullMatch() async {
+  Future<void> test_fullMatch() async {
     const content = '''
     [[String topLevel = '']];
     class MyClass {
@@ -42,7 +42,7 @@
     expect(symbols.any((s) => s.name.contains('myMethod')), isFalse);
   }
 
-  test_fuzzyMatch() async {
+  Future<void> test_fuzzyMatch() async {
     const content = '''
     String topLevel = '';
     class MyClass {
@@ -68,7 +68,7 @@
     expect(symbols.any((s) => s.name.contains('myMethod')), isFalse);
   }
 
-  test_invalidParams() async {
+  Future<void> test_invalidParams() async {
     await initialize();
 
     // Create a request that doesn't supply the query param.
@@ -89,7 +89,7 @@
     );
   }
 
-  test_partialMatch() async {
+  Future<void> test_partialMatch() async {
     const content = '''
     String topLevel = '';
     class MyClass {
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 9c85aaa..7927686 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -19,7 +19,7 @@
 
 import '../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ElementTest);
     defineReflectiveTests(ElementKindTest);
@@ -104,7 +104,7 @@
         .single;
   }
 
-  test_fromElement_CLASS() async {
+  Future<void> test_fromElement_CLASS() async {
     engine.Source source = addSource('/test.dart', '''
 @deprecated
 abstract class _A {}
@@ -143,7 +143,7 @@
     }
   }
 
-  test_fromElement_CONSTRUCTOR() async {
+  Future<void> test_fromElement_CONSTRUCTOR() async {
     engine.Source source = addSource('/test.dart', '''
 class A {
   const A.myConstructor(int a, [String b]);
@@ -169,7 +169,7 @@
     expect(element.flags, Element.FLAG_CONST);
   }
 
-  test_fromElement_CONSTRUCTOR_required_parameters_1() async {
+  Future<void> test_fromElement_CONSTRUCTOR_required_parameters_1() async {
     addMetaPackage();
     engine.Source source = addSource('/test.dart', '''
 import 'package:meta/meta.dart';    
@@ -186,7 +186,7 @@
   }
 
   /// Verify parameter re-ordering for required params
-  test_fromElement_CONSTRUCTOR_required_parameters_2() async {
+  Future<void> test_fromElement_CONSTRUCTOR_required_parameters_2() async {
     addMetaPackage();
     engine.Source source = addSource('/test.dart', '''
 import 'package:meta/meta.dart';    
@@ -204,7 +204,7 @@
   }
 
   /// Verify parameter re-ordering for required params
-  test_fromElement_CONSTRUCTOR_required_parameters_3() async {
+  Future<void> test_fromElement_CONSTRUCTOR_required_parameters_3() async {
     addMetaPackage();
     engine.Source source = addSource('/test.dart', '''
 import 'package:meta/meta.dart';    
@@ -233,7 +233,7 @@
     expect(element.flags, 0);
   }
 
-  test_fromElement_ENUM() async {
+  Future<void> test_fromElement_ENUM() async {
     engine.Source source = addSource('/test.dart', '''
 @deprecated
 enum _E1 { one, two }
@@ -272,7 +272,7 @@
     }
   }
 
-  test_fromElement_ENUM_CONSTANT() async {
+  Future<void> test_fromElement_ENUM_CONSTANT() async {
     engine.Source source = addSource('/test.dart', '''
 @deprecated
 enum _E1 { one, two }
@@ -360,7 +360,7 @@
     }
   }
 
-  test_fromElement_FIELD() async {
+  Future<void> test_fromElement_FIELD() async {
     engine.Source source = addSource('/test.dart', '''
 class A {
   static const myField = 42;
@@ -384,7 +384,7 @@
     expect(element.flags, Element.FLAG_CONST | Element.FLAG_STATIC);
   }
 
-  test_fromElement_FUNCTION_TYPE_ALIAS() async {
+  Future<void> test_fromElement_FUNCTION_TYPE_ALIAS() async {
     engine.Source source = addSource('/test.dart', '''
 typedef int F<T>(String x);
 ''');
@@ -409,7 +409,7 @@
     expect(element.flags, 0);
   }
 
-  test_fromElement_FUNCTION_TYPE_ALIAS_genericTypeAlias() async {
+  Future<void> test_fromElement_FUNCTION_TYPE_ALIAS_genericTypeAlias() async {
     engine.Source source = addSource('/test.dart', '''
 typedef F<T> = int Function(String x);
 ''');
@@ -433,7 +433,7 @@
     expect(element.flags, 0);
   }
 
-  test_fromElement_GETTER() async {
+  Future<void> test_fromElement_GETTER() async {
     engine.Source source = addSource('/test.dart', '''
 class A {
   String get myGetter => 42;
@@ -458,7 +458,7 @@
     expect(element.flags, 0);
   }
 
-  test_fromElement_LABEL() async {
+  Future<void> test_fromElement_LABEL() async {
     engine.Source source = addSource('/test.dart', '''
 main() {
 myLabel:
@@ -485,7 +485,7 @@
     expect(element.flags, 0);
   }
 
-  test_fromElement_METHOD() async {
+  Future<void> test_fromElement_METHOD() async {
     engine.Source source = addSource('/test.dart', '''
 class A {
   static List<String> myMethod(int a, {String b, int c}) {
@@ -511,7 +511,7 @@
     expect(element.flags, Element.FLAG_STATIC);
   }
 
-  test_fromElement_MIXIN() async {
+  Future<void> test_fromElement_MIXIN() async {
     engine.Source source = addSource('/test.dart', '''
 mixin A {}
 ''');
@@ -536,7 +536,7 @@
     }
   }
 
-  test_fromElement_SETTER() async {
+  Future<void> test_fromElement_SETTER() async {
     engine.Source source = addSource('/test.dart', '''
 class A {
   set mySetter(String x) {}
diff --git a/pkg/analysis_server/test/plugin/test_all.dart b/pkg/analysis_server/test/plugin/test_all.dart
index 284a4a3..4822d24 100644
--- a/pkg/analysis_server/test/plugin/test_all.dart
+++ b/pkg/analysis_server/test/plugin/test_all.dart
@@ -9,7 +9,7 @@
 /**
  * Utility for manually running all tests.
  */
-main() {
+void main() {
   defineReflectiveSuite(() {
     protocol_dart_test.main();
   }, name: 'plugin');
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index f4e6b3d..bfd8810 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -25,7 +25,7 @@
 import 'constants.dart';
 import 'mocks.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorTest);
     defineReflectiveTests(EnumTest);
@@ -334,7 +334,7 @@
   FileResult getFile(String path) => fileResults[path];
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 
 class MockErrorCode implements engine.ErrorCode {
diff --git a/pkg/analysis_server/test/protocol_test.dart b/pkg/analysis_server/test/protocol_test.dart
index 7844b03..e6dbec1 100644
--- a/pkg/analysis_server/test/protocol_test.dart
+++ b/pkg/analysis_server/test/protocol_test.dart
@@ -12,7 +12,7 @@
 
 import 'constants.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NotificationTest);
     defineReflectiveTests(RequestTest);
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index 1df1d4f..f283321 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_search_domain.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DeclarationsTest);
   });
@@ -40,7 +40,7 @@
             d.name == name))));
   }
 
-  test_class() async {
+  Future<void> test_class() async {
     addTestFile(r'''
 class C {
   int f;
@@ -71,7 +71,7 @@
     }
   }
 
-  test_enum() async {
+  Future<void> test_enum() async {
     addTestFile(r'''
 enum E {
   a, b, c
@@ -85,7 +85,7 @@
     assertHas('c', ElementKind.ENUM_CONSTANT);
   }
 
-  test_maxResults() async {
+  Future<void> test_maxResults() async {
     newFile(join(testFolder, 'a.dart'), content: r'''
 class A {}
 class B {}
@@ -108,7 +108,7 @@
     expect(declarationsResult.declarations, hasLength(4));
   }
 
-  test_mixin() async {
+  Future<void> test_mixin() async {
     addTestFile(r'''
 mixin M {
   int f;
@@ -126,7 +126,7 @@
     assertHas('m', ElementKind.METHOD, mixinName: 'M');
   }
 
-  test_multipleFiles() async {
+  Future<void> test_multipleFiles() async {
     var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
     var b = newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
 
@@ -155,7 +155,7 @@
     }
   }
 
-  test_onlyForFile() async {
+  Future<void> test_onlyForFile() async {
     var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
     newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
 
@@ -170,7 +170,7 @@
     expect(declarationsResult.files[declaration.fileIndex], a);
   }
 
-  test_parameters() async {
+  Future<void> test_parameters() async {
     addTestFile(r'''
 void f(bool a, String b) {}
 ''');
@@ -180,7 +180,7 @@
     expect(declaration.parameters, '(bool a, String b)');
   }
 
-  test_regExp() async {
+  Future<void> test_regExp() async {
     addTestFile(r'''
 class A {}
 class B {}
@@ -195,7 +195,7 @@
     assertNo('D');
   }
 
-  test_top() async {
+  Future<void> test_top() async {
     addTestFile(r'''
 int get g => 0;
 void set s(_) {}
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index de7f04e..5792f5b 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_search_domain.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ElementReferencesTest);
   });
@@ -128,7 +128,7 @@
     assertHasResult(SearchResultKind.REFERENCE, '(1)', 0);
   }
 
-  test_extension() async {
+  Future<void> test_extension() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 extension E on int {
@@ -238,7 +238,7 @@
     assertHasResult(SearchResultKind.READ, 'fff); // in m()');
   }
 
-  test_field_ofExtension_explicit_static() async {
+  Future<void> test_field_ofExtension_explicit_static() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 extension E on int {
@@ -274,7 +274,7 @@
     assertHasResult(SearchResultKind.READ, 'fff(); // in main()');
   }
 
-  test_field_ofExtension_implicit_instance() async {
+  Future<void> test_field_ofExtension_implicit_instance() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 extension E on int {
@@ -309,7 +309,7 @@
     }
   }
 
-  test_field_ofExtension_implicit_static() async {
+  Future<void> test_field_ofExtension_implicit_static() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 extension E on int {
@@ -515,7 +515,7 @@
     assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in main()');
   }
 
-  test_method_ofExtension() async {
+  Future<void> test_method_ofExtension() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 extension E on int {
diff --git a/pkg/analysis_server/test/search/member_declarations_test.dart b/pkg/analysis_server/test/search/member_declarations_test.dart
index 9afda85..8c9016e 100644
--- a/pkg/analysis_server/test/search/member_declarations_test.dart
+++ b/pkg/analysis_server/test/search/member_declarations_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_search_domain.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MemberDeclarationsTest);
   });
@@ -47,7 +47,7 @@
     return null;
   }
 
-  test_localVariable() async {
+  Future<void> test_localVariable() async {
     addTestFile('''
 class A {
   main() {
@@ -59,7 +59,7 @@
     expect(results, isEmpty);
   }
 
-  test_localVariable_forIn() async {
+  Future<void> test_localVariable_forIn() async {
     addTestFile('''
 class A {
   main() {
@@ -72,7 +72,7 @@
     expect(results, isEmpty);
   }
 
-  test_methodField() async {
+  Future<void> test_methodField() async {
     addTestFile('''
 class A {
   foo() {}
@@ -88,7 +88,7 @@
     assertHasDeclaration(ElementKind.FIELD, 'B');
   }
 
-  test_methodGetter() async {
+  Future<void> test_methodGetter() async {
     addTestFile('''
 class A {
   foo() {}
@@ -104,7 +104,7 @@
     assertHasDeclaration(ElementKind.GETTER, 'B');
   }
 
-  test_methodGetterSetter() async {
+  Future<void> test_methodGetterSetter() async {
     addTestFile('''
 class A {
   foo() {}
@@ -122,7 +122,7 @@
     assertHasDeclaration(ElementKind.SETTER, 'B');
   }
 
-  test_methodMethod() async {
+  Future<void> test_methodMethod() async {
     addTestFile('''
 class A {
   foo() {}
@@ -138,7 +138,7 @@
     assertHasDeclaration(ElementKind.METHOD, 'B');
   }
 
-  test_methodSetter() async {
+  Future<void> test_methodSetter() async {
     addTestFile('''
 class A {
   foo() {}
diff --git a/pkg/analysis_server/test/search/member_references_test.dart b/pkg/analysis_server/test/search/member_references_test.dart
index b60931a..9f65668 100644
--- a/pkg/analysis_server/test/search/member_references_test.dart
+++ b/pkg/analysis_server/test/search/member_references_test.dart
@@ -11,7 +11,7 @@
 
 import 'abstract_search_domain.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MemberReferencesTest);
   });
diff --git a/pkg/analysis_server/test/search/search_result_test.dart b/pkg/analysis_server/test/search/search_result_test.dart
index ffa7468..02c82a6 100644
--- a/pkg/analysis_server/test/search/search_result_test.dart
+++ b/pkg/analysis_server/test/search/search_result_test.dart
@@ -7,7 +7,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchResultKindTest);
   });
diff --git a/pkg/analysis_server/test/search/test_all.dart b/pkg/analysis_server/test/search/test_all.dart
index 2e85dae..403be90 100644
--- a/pkg/analysis_server/test/search/test_all.dart
+++ b/pkg/analysis_server/test/search/test_all.dart
@@ -12,10 +12,7 @@
 import 'top_level_declarations_test.dart' as top_level_declarations_test;
 import 'type_hierarchy_test.dart' as type_hierarchy_test;
 
-/**
- * Utility for manually running all tests.
- */
-main() {
+void main() {
   defineReflectiveSuite(() {
     declarations_test.main();
     element_references_test.main();
diff --git a/pkg/analysis_server/test/search/top_level_declarations_test.dart b/pkg/analysis_server/test/search/top_level_declarations_test.dart
index c28648a..6895313 100644
--- a/pkg/analysis_server/test/search/top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/search/top_level_declarations_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_search_domain.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TopLevelDeclarationsTest);
   });
@@ -56,7 +56,7 @@
     return null;
   }
 
-  test_extensionDeclaration() async {
+  Future<void> test_extensionDeclaration() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     addTestFile('''
 extension MyExtension on int {}
@@ -65,12 +65,12 @@
     assertHasDeclaration(ElementKind.EXTENSION, 'MyExtension');
   }
 
-  test_invalidRegex() async {
+  Future<void> test_invalidRegex() async {
     var result = await findTopLevelDeclarations('[A');
     expect(result, const TypeMatcher<RequestError>());
   }
 
-  test_startEndPattern() async {
+  Future<void> test_startEndPattern() async {
     addTestFile('''
 class A {} // A
 class B = Object with A;
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index a2a1be0..40a2278 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -13,7 +13,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetTypeHierarchyTest);
   });
@@ -32,7 +32,7 @@
     ];
   }
 
-  test_bad_function() async {
+  Future<void> test_bad_function() async {
     addTestFile('''
 main() {
 }
@@ -41,7 +41,7 @@
     expect(items, isNull);
   }
 
-  test_bad_noElement() async {
+  Future<void> test_bad_noElement() async {
     addTestFile('''
 main() {
   /* target */
@@ -87,7 +87,7 @@
     ]);
   }
 
-  test_class_displayName() async {
+  Future<void> test_class_displayName() async {
     addTestFile('''
 class A<T> {
 }
@@ -312,7 +312,7 @@
     ]);
   }
 
-  test_class_extendsTypeC() async {
+  Future<void> test_class_extendsTypeC() async {
     addTestFile('''
 class A {
 }
@@ -373,7 +373,7 @@
     ]);
   }
 
-  test_class_implementsTypes() async {
+  Future<void> test_class_implementsTypes() async {
     addTestFile('''
 class MA {}
 class MB {}
@@ -434,7 +434,7 @@
     ]);
   }
 
-  test_class_withTypes() async {
+  Future<void> test_class_withTypes() async {
     addTestFile('''
 class MA {}
 class MB {}
@@ -537,7 +537,7 @@
     expect(memberB.location.offset, findOffset('test(m) {}'));
   }
 
-  test_member_fromField_toField() async {
+  Future<void> test_member_fromField_toField() async {
     addTestFile('''
 class A {
   var test = 1;
@@ -555,7 +555,7 @@
     expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
   }
 
-  test_member_fromField_toGetter() async {
+  Future<void> test_member_fromField_toGetter() async {
     addTestFile('''
 class A {
   get test => 1;
@@ -573,7 +573,7 @@
     expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
   }
 
-  test_member_fromField_toSetter() async {
+  Future<void> test_member_fromField_toSetter() async {
     addTestFile('''
 class A {
   set test(a) {}
@@ -591,7 +591,7 @@
     expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
   }
 
-  test_member_fromFinalField_toGetter() async {
+  Future<void> test_member_fromFinalField_toGetter() async {
     addTestFile('''
 class A {
   get test => 1;
@@ -609,7 +609,7 @@
     expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
   }
 
-  test_member_fromFinalField_toSetter() async {
+  Future<void> test_member_fromFinalField_toSetter() async {
     addTestFile('''
 class A {
   set test(x) {}
@@ -1010,7 +1010,7 @@
         itemD.memberElement.location.offset, findOffset('test(x) {} // in D'));
   }
 
-  test_superOnly() async {
+  Future<void> test_superOnly() async {
     addTestFile('''
 class A {}
 class B {}
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 8336ebe..340d30f 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ArgListContributorTest);
   });
@@ -124,7 +124,7 @@
     return ArgListContributor();
   }
 
-  test_Annotation_imported_constructor_named_param() async {
+  Future<void> test_Annotation_imported_constructor_named_param() async {
     addSource('/home/test/lib/a.dart', '''
 library libA; class A { const A({int one, String two: 'defaultValue'}); }''');
     addTestSource('import "a.dart"; @A(^) main() { }');
@@ -133,7 +133,7 @@
         namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
   }
 
-  test_Annotation_importedConstructor_prefixed() async {
+  Future<void> test_Annotation_importedConstructor_prefixed() async {
     addSource('/home/test/lib/a.dart', '''
 class A {
   const A({int value});
@@ -148,7 +148,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'value': 'int'});
   }
 
-  test_Annotation_local_constructor_named_param() async {
+  Future<void> test_Annotation_local_constructor_named_param() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^) main() { }''');
@@ -158,7 +158,7 @@
   }
 
   @failingTest
-  test_Annotation_local_constructor_named_param_10() async {
+  Future<void> test_Annotation_local_constructor_named_param_10() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(two: '2' ^) main() { }''');
@@ -166,7 +166,7 @@
     assertSuggestions([', one: ']);
   }
 
-  test_Annotation_local_constructor_named_param_11() async {
+  Future<void> test_Annotation_local_constructor_named_param_11() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(two: '2', ^) main() { }''');
@@ -174,7 +174,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_Annotation_local_constructor_named_param_2() async {
+  Future<void> test_Annotation_local_constructor_named_param_2() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^ two: '2') main() { }''');
@@ -182,7 +182,7 @@
     assertSuggestions(['one: ,']);
   }
 
-  test_Annotation_local_constructor_named_param_3() async {
+  Future<void> test_Annotation_local_constructor_named_param_3() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^two: '2') main() { }''');
@@ -190,7 +190,7 @@
     assertSuggestions(['one: ,']);
   }
 
-  test_Annotation_local_constructor_named_param_4() async {
+  Future<void> test_Annotation_local_constructor_named_param_4() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^, two: '2') main() { }''');
@@ -198,7 +198,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_Annotation_local_constructor_named_param_5() async {
+  Future<void> test_Annotation_local_constructor_named_param_5() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^ , two: '2') main() { }''');
@@ -206,7 +206,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_Annotation_local_constructor_named_param_6() async {
+  Future<void> test_Annotation_local_constructor_named_param_6() async {
     addTestSource('''
 class A { const A(int zero, {int one, String two: 'defaultValue'}); }
 @A(0, ^, two: '2') main() { }''');
@@ -214,7 +214,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_Annotation_local_constructor_named_param_7() async {
+  Future<void> test_Annotation_local_constructor_named_param_7() async {
     addTestSource('''
 class A { const A(int zero, {int one, String two: 'defaultValue'}); }
 @A(0, ^ two: '2') main() { }''');
@@ -222,7 +222,7 @@
     assertSuggestions(['one: ,']);
   }
 
-  test_Annotation_local_constructor_named_param_8() async {
+  Future<void> test_Annotation_local_constructor_named_param_8() async {
     addTestSource('''
 class A { const A(int zero, {int one, String two: 'defaultValue'}); }
 @A(0, ^two: '2') main() { }''');
@@ -231,7 +231,7 @@
   }
 
   @failingTest
-  test_Annotation_local_constructor_named_param_9() async {
+  Future<void> test_Annotation_local_constructor_named_param_9() async {
     addTestSource('''
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(two: '2'^) main() { }''');
@@ -239,7 +239,7 @@
     assertSuggestions([', one: ']);
   }
 
-  test_Annotation_local_constructor_named_param_negative() async {
+  Future<void> test_Annotation_local_constructor_named_param_negative() async {
     addTestSource('''
 class A { const A(int one, int two, int three, {int four, String five:
   'defaultValue'}); }
@@ -248,7 +248,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_closureFunction_namedParameter() async {
+  Future<void> test_ArgumentList_closureFunction_namedParameter() async {
     addTestSource(r'''
 void f({void Function(int a, String b) closure}) {}
 
@@ -273,7 +273,8 @@
     );
   }
 
-  test_ArgumentList_closureFunction_namedParameter_hasComma() async {
+  Future<void>
+      test_ArgumentList_closureFunction_namedParameter_hasComma() async {
     addTestSource(r'''
 void f({void Function(int a, String b) closure}) {}
 
@@ -301,7 +302,7 @@
 
   /// todo (pq): implement positional functional parameters
   @failingTest
-  test_ArgumentList_closureFunction_positionalParameter() async {
+  Future<void> test_ArgumentList_closureFunction_positionalParameter() async {
     addTestSource(r'''
 void f(void Function(int a, int b) closure) {}
 
@@ -317,7 +318,7 @@
     );
   }
 
-  test_ArgumentList_closureMethod_namedParameter() async {
+  Future<void> test_ArgumentList_closureMethod_namedParameter() async {
     addTestSource(r'''
 class C {
   void f({void Function(int a, String b) closure}) {}
@@ -343,7 +344,7 @@
     );
   }
 
-  test_ArgumentList_closureParameterOptionalNamed() async {
+  Future<void> test_ArgumentList_closureParameterOptionalNamed() async {
     addTestSource(r'''
 void f({void Function(int a, {int b, int c}) closure}) {}
 
@@ -359,7 +360,7 @@
     );
   }
 
-  test_ArgumentList_closureParameterOptionalPositional() async {
+  Future<void> test_ArgumentList_closureParameterOptionalPositional() async {
     addTestSource(r'''
 void f({void Function(int a, [int b, int c]) closure]) {}
 
@@ -376,7 +377,7 @@
     );
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_0() async {
+  Future<void> test_ArgumentList_Flutter_InstanceCreationExpression_0() async {
     addFlutterPackage();
 
     addTestSource('''
@@ -397,7 +398,7 @@
         defaultArgumentListTextRanges: null);
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_01() async {
+  Future<void> test_ArgumentList_Flutter_InstanceCreationExpression_01() async {
     addFlutterPackage();
 
     addTestSource('''
@@ -419,7 +420,7 @@
         selectionOffset: 17);
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_1() async {
+  Future<void> test_ArgumentList_Flutter_InstanceCreationExpression_1() async {
     addFlutterPackage();
 
     addTestSource('''
@@ -441,7 +442,7 @@
         defaultArgumentListTextRanges: null);
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_2() async {
+  Future<void> test_ArgumentList_Flutter_InstanceCreationExpression_2() async {
     addFlutterPackage();
 
     addTestSource('''
@@ -463,7 +464,8 @@
         defaultArgumentListTextRanges: null);
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_children_dynamic() async {
+  Future<void>
+      test_ArgumentList_Flutter_InstanceCreationExpression_children_dynamic() async {
     // Ensure we don't generate unneeded <dynamic> param if a future API doesn't
     // type it's children.
     addFlutterPackage();
@@ -490,7 +492,8 @@
         defaultArgumentListTextRanges: null);
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_children_Map() async {
+  Future<void>
+      test_ArgumentList_Flutter_InstanceCreationExpression_children_Map() async {
     // Ensure we don't generate Map params for a future API
     addFlutterPackage();
 
@@ -515,7 +518,8 @@
         defaultArgListString: null);
   }
 
-  test_ArgumentList_Flutter_InstanceCreationExpression_slivers() async {
+  Future<void>
+      test_ArgumentList_Flutter_InstanceCreationExpression_slivers() async {
     addFlutterPackage();
 
     addTestSource('''
@@ -540,7 +544,7 @@
         defaultArgumentListTextRanges: null);
   }
 
-  test_ArgumentList_Flutter_MethodExpression_children() async {
+  Future<void> test_ArgumentList_Flutter_MethodExpression_children() async {
     // Ensure we don't generate params for a method call
     // TODO(brianwilkerson) This test has been changed so that it no longer has
     // anything to do with Flutter (by moving the declaration of `foo` out of
@@ -565,13 +569,13 @@
         defaultArgListString: null);
   }
 
-  test_ArgumentList_getter() async {
+  Future<void> test_ArgumentList_getter() async {
     addTestSource('class A {int get foo => 7; main() {foo(^)}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_constructor_named_param() async {
+  Future<void> test_ArgumentList_imported_constructor_named_param() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource('/home/test/lib/a.dart', 'library libA; class A{A({int one}); }');
     addTestSource('import "a.dart"; main() { new A(^);}');
@@ -579,7 +583,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_ArgumentList_imported_constructor_named_param2() async {
+  Future<void> test_ArgumentList_imported_constructor_named_param2() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource(
         '/home/test/lib/a.dart', 'library libA; class A{A.foo({int one}); }');
@@ -588,7 +592,8 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_ArgumentList_imported_constructor_named_typed_param() async {
+  Future<void>
+      test_ArgumentList_imported_constructor_named_typed_param() async {
     // ArgumentList  InstanceCreationExpression  VariableDeclaration
     addSource('/home/test/lib/a.dart',
         'library libA; class A { A({int i, String s, d}) {} }}');
@@ -598,7 +603,7 @@
         namedArgumentsWithTypes: {'i': 'int', 's': 'String', 'd': 'dynamic'});
   }
 
-  test_ArgumentList_imported_factory_named_param() async {
+  Future<void> test_ArgumentList_imported_factory_named_param() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource('/home/test/lib/a.dart',
         'library libA; class A{factory A({int one}) => null;}');
@@ -607,7 +612,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_ArgumentList_imported_factory_named_param2() async {
+  Future<void> test_ArgumentList_imported_factory_named_param2() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement
     addSource('/home/test/lib/a.dart',
         'library libA; abstract class A{factory A.foo({int one});}');
@@ -616,7 +621,7 @@
     assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
-  test_ArgumentList_imported_factory_named_typed_param() async {
+  Future<void> test_ArgumentList_imported_factory_named_typed_param() async {
     // ArgumentList  InstanceCreationExpression  VariableDeclaration
     addSource('/home/test/lib/a.dart',
         'library libA; class A {factory A({int i, String s, d}) {} }}');
@@ -626,7 +631,7 @@
         namedArgumentsWithTypes: {'i': 'int', 's': 'String', 'd': 'dynamic'});
   }
 
-  test_ArgumentList_imported_function_0() async {
+  Future<void> test_ArgumentList_imported_function_0() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
       library A;
@@ -642,7 +647,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_function_3a() async {
+  Future<void> test_ArgumentList_imported_function_3a() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
       library A;
@@ -658,7 +663,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_function_3b() async {
+  Future<void> test_ArgumentList_imported_function_3b() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
       library A;
@@ -674,7 +679,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_function_3c() async {
+  Future<void> test_ArgumentList_imported_function_3c() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
       library A;
@@ -690,7 +695,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_function_3d() async {
+  Future<void> test_ArgumentList_imported_function_3d() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
       library A;
@@ -706,7 +711,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_function_named_param() async {
+  Future<void> test_ArgumentList_imported_function_named_param() async {
     //
     addTestSource('main() { int.parse("16", ^);}');
     await computeSuggestions();
@@ -716,7 +721,7 @@
     });
   }
 
-  test_ArgumentList_imported_function_named_param1() async {
+  Future<void> test_ArgumentList_imported_function_named_param1() async {
     //
     addTestSource('main() { int.parse("16", r^);}');
     await computeSuggestions();
@@ -726,7 +731,7 @@
     });
   }
 
-  test_ArgumentList_imported_function_named_param2() async {
+  Future<void> test_ArgumentList_imported_function_named_param2() async {
     //
     addTestSource('main() { int.parse("16", radix: 7, ^);}');
     await computeSuggestions();
@@ -734,14 +739,14 @@
         namedArgumentsWithTypes: {'onError': 'int Function(String)'});
   }
 
-  test_ArgumentList_imported_function_named_param2a() async {
+  Future<void> test_ArgumentList_imported_function_named_param2a() async {
     //
     addTestSource('main() { int.parse("16", radix: ^);}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_ArgumentList_imported_function_named_param_label1() async {
+  Future<void> test_ArgumentList_imported_function_named_param_label1() async {
     //
     addTestSource('main() { int.parse("16", r^: 16);}');
     await computeSuggestions();
@@ -751,14 +756,14 @@
     }, includeColon: false);
   }
 
-  test_ArgumentList_imported_function_named_param_label2() async {
+  Future<void> test_ArgumentList_imported_function_named_param_label2() async {
     //
     addTestSource('main() { int.parse("16", ^r: 16);}');
     await computeSuggestions();
     assertSuggestions(['radix: ,', 'onError: ,']);
   }
 
-  test_ArgumentList_imported_function_named_param_label3() async {
+  Future<void> test_ArgumentList_imported_function_named_param_label3() async {
     //
     addTestSource('main() { int.parse("16", ^: 16);}');
     await computeSuggestions();
@@ -768,7 +773,8 @@
     });
   }
 
-  test_ArgumentList_local_constructor_named_fieldFormal_documentation() async {
+  Future<void>
+      test_ArgumentList_local_constructor_named_fieldFormal_documentation() async {
     String content = '''
 class A {
   /// aaa
@@ -797,7 +803,8 @@
     expect(element.location.offset, content.indexOf('fff})'));
   }
 
-  test_ArgumentList_local_constructor_named_fieldFormal_noDocumentation() async {
+  Future<void>
+      test_ArgumentList_local_constructor_named_fieldFormal_noDocumentation() async {
     String content = '''
 class A {
   int fff;
@@ -822,7 +829,7 @@
     expect(element.location.offset, content.indexOf('fff})'));
   }
 
-  test_ArgumentList_local_constructor_named_param() async {
+  Future<void> test_ArgumentList_local_constructor_named_param() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -835,7 +842,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_1() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_1() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -848,7 +855,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_2() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_2() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -861,7 +868,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_3() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_3() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -873,7 +880,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_4() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_4() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -885,7 +892,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_5() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_5() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -897,7 +904,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_6() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_6() async {
     //
     addTestSource('''
 class A { A.foo({int one, String two: 'defaultValue'}) { } }
@@ -907,7 +914,8 @@
         namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
   }
 
-  test_ArgumentList_local_constructor_named_param_prefixed_prepend() async {
+  Future<void>
+      test_ArgumentList_local_constructor_named_param_prefixed_prepend() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -920,7 +928,7 @@
         completion: 'one: ,', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_prepend() async {
+  Future<void> test_ArgumentList_local_constructor_named_param_prepend() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -933,7 +941,8 @@
         completion: 'one: ,', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_prepend_1() async {
+  Future<void>
+      test_ArgumentList_local_constructor_named_param_prepend_1() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -946,7 +955,8 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_named_param_prepend_2() async {
+  Future<void>
+      test_ArgumentList_local_constructor_named_param_prepend_2() async {
     //
     addTestSource('''
 class A { A({int one, String two: 'defaultValue'}) { } }
@@ -959,7 +969,7 @@
         completion: 'one: ', selectionOffset: 5);
   }
 
-  test_ArgumentList_local_constructor_required_param_0() async {
+  Future<void> test_ArgumentList_local_constructor_required_param_0() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -971,7 +981,7 @@
         requiredParamIndices: [1]);
   }
 
-  test_ArgumentList_local_function_3a() async {
+  Future<void> test_ArgumentList_local_function_3a() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
       expect(arg1, int arg2, {bool arg3}) { }
@@ -982,7 +992,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_local_function_3b() async {
+  Future<void> test_ArgumentList_local_function_3b() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
       expect(arg1, int arg2, {bool arg3}) { }
@@ -993,7 +1003,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_local_function_3c() async {
+  Future<void> test_ArgumentList_local_function_3c() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
       expect(arg1, int arg2, {bool arg3}) { }
@@ -1004,7 +1014,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_local_function_3d() async {
+  Future<void> test_ArgumentList_local_function_3d() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('''
       expect(arg1, int arg2, {bool arg3}) { }
@@ -1015,7 +1025,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_local_function_named_param() async {
+  Future<void> test_ArgumentList_local_function_named_param() async {
     //
     addTestSource('''
 f(v,{int radix, int onError(String s)}){}
@@ -1027,7 +1037,7 @@
     });
   }
 
-  test_ArgumentList_local_function_named_param1() async {
+  Future<void> test_ArgumentList_local_function_named_param1() async {
     //
     addTestSource('''
 f(v,{int radix, int onError(String s)}){}
@@ -1039,7 +1049,7 @@
     });
   }
 
-  test_ArgumentList_local_function_named_param2() async {
+  Future<void> test_ArgumentList_local_function_named_param2() async {
     //
     addTestSource('''
 f(v,{int radix, int onError(String s)}){}
@@ -1049,7 +1059,7 @@
         namedArgumentsWithTypes: {'onError': 'int Function(String)'});
   }
 
-  test_ArgumentList_local_function_named_param2a() async {
+  Future<void> test_ArgumentList_local_function_named_param2a() async {
     //
     addTestSource('''
 f(v,{int radix, int onError(String s)}){}
@@ -1058,7 +1068,7 @@
     assertNoSuggestions();
   }
 
-  test_ArgumentList_local_method_0() async {
+  Future<void> test_ArgumentList_local_method_0() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
       library A;
diff --git a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
index abd9c3d..04a362b 100644
--- a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
@@ -9,7 +9,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CombinatorContributorTest);
   });
@@ -22,7 +22,7 @@
     return CombinatorContributor();
   }
 
-  test_Block_inherited_local() async {
+  Future<void> test_Block_inherited_local() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addTestSource('''
       class F { var f1; f2() { } }
@@ -34,7 +34,7 @@
     assertNoSuggestions();
   }
 
-  test_Combinator_hide() async {
+  Future<void> test_Combinator_hide() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/home/test/lib/ab.dart', '''
       library libAB;
@@ -74,7 +74,7 @@
     assertNotSuggested('Object');
   }
 
-  test_Combinator_show() async {
+  Future<void> test_Combinator_show() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/home/test/lib/ab.dart', '''
       library libAB;
@@ -123,7 +123,7 @@
     assertNotSuggested('Object');
   }
 
-  test_Combinator_show_export_withShow() async {
+  Future<void> test_Combinator_show_export_withShow() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
@@ -141,14 +141,14 @@
     assertNotSuggested('B');
   }
 
-  test_Combinator_show_PI() async {
+  Future<void> test_Combinator_show_PI() async {
     addTestSource('import "dart:math" show ^;');
     await computeSuggestions();
     assertSuggestTopLevelVar('PI', 'double',
         kind: CompletionSuggestionKind.IDENTIFIER);
   }
 
-  test_Combinator_show_recursive() async {
+  Future<void> test_Combinator_show_recursive() async {
     addSource('/home/test/lib/a.dart', '''
 class A {}
 ''');
diff --git a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
index 91f0b7b..be5ab67 100644
--- a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
@@ -13,7 +13,7 @@
 
 import '../../../domain_completion_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CommonUsageSorterTest);
   });
@@ -32,7 +32,7 @@
     }
   }
 
-  test_ConstructorName() async {
+  Future<void> test_ConstructorName() async {
     // SimpleIdentifier  ConstructorName  InstanceCreationExpression
     addTestFile('import "dart:async"; class A {x() {new Future.^}}');
     await getSuggestionsWith({
@@ -48,7 +48,7 @@
     assertNoResult('A');
   }
 
-  test_namedArgument_enum() async {
+  Future<void> test_namedArgument_enum() async {
     addTestFile('''
 enum E {e1, e2}
 f({E e}) {}
@@ -66,7 +66,7 @@
         relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_BOOST_TYPE);
   }
 
-  test_PrefixedIdentifier_field() async {
+  Future<void> test_PrefixedIdentifier_field() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestFile('class A {static int s1; static int s2; x() {A.^}}');
     await getSuggestionsWith({
@@ -82,7 +82,7 @@
     assertNoResult('A');
   }
 
-  test_PrefixedIdentifier_field_inPart() async {
+  Future<void> test_PrefixedIdentifier_field_inPart() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     newFile('/project/bin/myLib.dart',
         content:
@@ -100,7 +100,7 @@
     assertNoResult('A');
   }
 
-  test_PrefixedIdentifier_getter() async {
+  Future<void> test_PrefixedIdentifier_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestFile('class A {int get g1 => 1; int get g2 => 2; x() {new A().^}}');
     await getSuggestionsWith({
@@ -116,7 +116,7 @@
     assertNoResult('A');
   }
 
-  test_PrefixedIdentifier_setter() async {
+  Future<void> test_PrefixedIdentifier_setter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestFile('class A {set s1(v) {}; set s2(v) {}; x() {new A().^}}');
     await getSuggestionsWith({
@@ -132,7 +132,7 @@
     assertNoResult('A');
   }
 
-  test_PrefixedIdentifier_static_method() async {
+  Future<void> test_PrefixedIdentifier_static_method() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestFile('import "dart:async"; class A {x() {Future.^}}');
     await getSuggestionsWith({
@@ -147,7 +147,7 @@
     assertNoResult('A');
   }
 
-  test_PropertyAccess() async {
+  Future<void> test_PropertyAccess() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addTestFile('import "dart:math"; class A {x() {new Random().^}}');
     await getSuggestionsWith({
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index f1b65fe..683d884 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -87,7 +87,7 @@
   }
 
   @override
-  setUp() {
+  void setUp() {
     super.setUp();
     completionManager = DartCompletionManager();
   }
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index 293acc2..baf3dde 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -15,7 +15,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionManagerTest);
   });
@@ -28,7 +28,7 @@
     return ImportedReferenceContributor();
   }
 
-  test_resolveDirectives() async {
+  Future<void> test_resolveDirectives() async {
     addSource('/home/test/lib/a.dart', '''
 library libA;
 /// My class.
diff --git a/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart
index 4b38249..2d8bfc3 100644
--- a/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart
@@ -8,7 +8,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionMemberContributorTest);
   });
@@ -27,7 +27,7 @@
     super.setUp();
   }
 
-  test_extension() async {
+  Future<void> test_extension() async {
     addTestSource('''
 extension E on int {}
 void f() {
@@ -38,7 +38,7 @@
     assertNoSuggestions();
   }
 
-  test_extensionOverride_doesNotMatch() async {
+  Future<void> test_extensionOverride_doesNotMatch() async {
     addTestSource('''
 extension E on int {
   bool a(int b, int c) {}
@@ -55,7 +55,7 @@
     assertSuggestSetter('c');
   }
 
-  test_extensionOverride_matches() async {
+  Future<void> test_extensionOverride_matches() async {
     addTestSource('''
 extension E on int {
   bool a(int b, int c) {}
@@ -72,7 +72,7 @@
     assertSuggestSetter('c');
   }
 
-  test_function_doesNotMatch() async {
+  Future<void> test_function_doesNotMatch() async {
     addTestSource('''
 extension E<T extends num> on List<T> {
   bool a(int b, int c) {}
@@ -90,7 +90,7 @@
     assertNotSuggested('c');
   }
 
-  test_function_matches() async {
+  Future<void> test_function_matches() async {
     addTestSource('''
 extension E on int {
   bool a(int b, int c) {}
@@ -108,7 +108,7 @@
     assertSuggestSetter('c');
   }
 
-  test_identifier_doesNotMatch() async {
+  Future<void> test_identifier_doesNotMatch() async {
     addTestSource('''
 extension E<T extends num> on List<T> {
   bool a(int b, int c) {}
@@ -125,7 +125,7 @@
     assertNotSuggested('c');
   }
 
-  test_identifier_matches() async {
+  Future<void> test_identifier_matches() async {
     addTestSource('''
 extension E<T extends num> on List<T> {
   bool a(int b, int c) {}
@@ -142,7 +142,7 @@
     assertSuggestSetter('c');
   }
 
-  test_literal_doesNotMatch() async {
+  Future<void> test_literal_doesNotMatch() async {
     addTestSource('''
 extension E on String {
   bool a(int b, int c) {}
@@ -160,7 +160,7 @@
     assertNotSuggested('c');
   }
 
-  test_literal_doesNotMatch_generic() async {
+  Future<void> test_literal_doesNotMatch_generic() async {
     addTestSource('''
 extension E<T extends num> on List<T> {
   bool a(int b, int c) {}
@@ -177,7 +177,7 @@
     assertNotSuggested('c');
   }
 
-  test_literal_matches() async {
+  Future<void> test_literal_matches() async {
     addTestSource('''
 extension E on int {
   bool a(int b, int c) {}
@@ -194,7 +194,7 @@
     assertSuggestSetter('c');
   }
 
-  test_members_inExtendedClassMethod_getter() async {
+  Future<void> test_members_inExtendedClassMethod_getter() async {
     addTestSource('''
 class Person {
   void doSomething() {
@@ -211,7 +211,7 @@
     assertSuggestGetter('name', 'String');
   }
 
-  test_members_inExtendedClassMethod_method() async {
+  Future<void> test_members_inExtendedClassMethod_method() async {
     addTestSource('''
 class Person {
   void doSomething() {
@@ -228,7 +228,7 @@
     assertSuggestMethod('work', null, 'void');
   }
 
-  test_members_inExtendedClassMethod_multipleExtensions() async {
+  Future<void> test_members_inExtendedClassMethod_multipleExtensions() async {
     addTestSource('''
 class Person {
   void doSomething() {
@@ -249,7 +249,7 @@
     assertSuggestMethod('work', null, 'void');
   }
 
-  test_members_inExtendedClassMethod_setter() async {
+  Future<void> test_members_inExtendedClassMethod_setter() async {
     addTestSource('''
 class Person {
   void doSomething() {
@@ -266,7 +266,7 @@
     assertSuggestSetter('id');
   }
 
-  test_members_inMixinMethod_method() async {
+  Future<void> test_members_inMixinMethod_method() async {
     addTestSource('''
 class Person { }
 extension E on Person {
@@ -283,7 +283,7 @@
     assertSuggestMethod('work', null, 'void');
   }
 
-  test_members_with_this_inExtendedClass() async {
+  Future<void> test_members_with_this_inExtendedClass() async {
     addTestSource('''
 class Person {
   void doSomething() {
diff --git a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
index 621ecd0..9c45414 100644
--- a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
@@ -9,7 +9,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FieldFormalContributorTest);
   });
@@ -23,7 +23,7 @@
   }
 
   /// https://github.com/dart-lang/sdk/issues/39028
-  test_mixin_constructor() async {
+  Future<void> test_mixin_constructor() async {
     addTestSource('''
 mixin M {
   M(this.^);
@@ -33,7 +33,7 @@
     expect(suggestions, isEmpty);
   }
 
-  test_ThisExpression_constructor_param() async {
+  Future<void> test_ThisExpression_constructor_param() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -69,7 +69,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param2() async {
+  Future<void> test_ThisExpression_constructor_param2() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -104,7 +104,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param3() async {
+  Future<void> test_ThisExpression_constructor_param3() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -139,7 +139,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param4() async {
+  Future<void> test_ThisExpression_constructor_param4() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -174,7 +174,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param_optional() async {
+  Future<void> test_ThisExpression_constructor_param_optional() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -190,7 +190,7 @@
     assertNotSuggested('x');
   }
 
-  test_ThisExpression_constructor_param_positional() async {
+  Future<void> test_ThisExpression_constructor_param_positional() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index bd26c3c..92c0042 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportedReferenceContributorTest);
   });
@@ -27,7 +27,7 @@
   }
 
   /// Sanity check.  Permutations tested in local_ref_contributor.
-  test_ArgDefaults_function_with_required_named() async {
+  Future<void> test_ArgDefaults_function_with_required_named() async {
     addMetaPackage();
 
     resolveSource('/home/test/lib/b.dart', '''
@@ -47,7 +47,7 @@
         defaultArgListString: 'bar, baz: null');
   }
 
-  test_ArgumentList() async {
+  Future<void> test_ArgumentList() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     resolveSource('/home/test/lib/a.dart', '''
         library A;
@@ -72,7 +72,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_imported_function() async {
+  Future<void> test_ArgumentList_imported_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     resolveSource('/home/test/lib/a.dart', '''
         library A;
@@ -98,7 +98,8 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_functionalArg() async {
+  Future<void>
+      test_ArgumentList_InstanceCreationExpression_functionalArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -128,7 +129,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_typedefArg() async {
+  Future<void> test_ArgumentList_InstanceCreationExpression_typedefArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -159,7 +160,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_function() async {
+  Future<void> test_ArgumentList_local_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     resolveSource('/home/test/lib/a.dart', '''
         library A;
@@ -185,7 +186,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_method() async {
+  Future<void> test_ArgumentList_local_method() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     resolveSource('/home/test/lib/a.dart', '''
         library A;
@@ -211,7 +212,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_functionalArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_functionalArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -241,7 +242,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_methodArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_methodArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -269,7 +270,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_namedParam() async {
+  Future<void> test_ArgumentList_namedParam() async {
     // SimpleIdentifier  NamedExpression  ArgumentList  MethodInvocation
     // ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
@@ -293,7 +294,7 @@
     assertNotSuggested('main');
   }
 
-  test_AsExpression() async {
+  Future<void> test_AsExpression() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
         class A {var b; X _c; foo() {var a; (a as ^).foo();}''');
@@ -308,7 +309,7 @@
     assertNotSuggested('==');
   }
 
-  test_AsExpression_type_subtype_extends_filter() async {
+  Future<void> test_AsExpression_type_subtype_extends_filter() async {
     // SimpleIdentifier  TypeName  AsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
           foo() { }
@@ -330,7 +331,7 @@
     assertNotSuggested('main');
   }
 
-  test_AsExpression_type_subtype_implements_filter() async {
+  Future<void> test_AsExpression_type_subtype_implements_filter() async {
     // SimpleIdentifier  TypeName  AsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
           foo() { }
@@ -352,7 +353,7 @@
     assertNotSuggested('main');
   }
 
-  test_AssignmentExpression_name() async {
+  Future<void> test_AssignmentExpression_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int ^b = 1;}');
@@ -361,7 +362,7 @@
     assertNoSuggestions();
   }
 
-  test_AssignmentExpression_RHS() async {
+  Future<void> test_AssignmentExpression_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int b = ^}');
@@ -375,7 +376,7 @@
     assertSuggestClass('Object');
   }
 
-  test_AssignmentExpression_type() async {
+  Future<void> test_AssignmentExpression_type() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -398,7 +399,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_newline() async {
+  Future<void> test_AssignmentExpression_type_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -420,7 +421,7 @@
     assertSuggestFunction('identical', 'bool');
   }
 
-  test_AssignmentExpression_type_partial() async {
+  Future<void> test_AssignmentExpression_type_partial() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -443,7 +444,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial_newline() async {
+  Future<void> test_AssignmentExpression_type_partial_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -465,7 +466,7 @@
     assertSuggestFunction('identical', 'bool');
   }
 
-  test_AwaitExpression() async {
+  Future<void> test_AwaitExpression() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -480,7 +481,7 @@
     assertSuggestClass('Object');
   }
 
-  test_AwaitExpression_function() async {
+  Future<void> test_AwaitExpression_function() async {
     resolveSource('/home/test/lib/a.dart', '''
 Future y() async {return 0;}
 ''');
@@ -499,7 +500,7 @@
     assertSuggestClass('Object');
   }
 
-  test_AwaitExpression_inherited() async {
+  Future<void> test_AwaitExpression_inherited() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib libB;
@@ -526,7 +527,7 @@
     assertNotSuggested('y');
   }
 
-  test_BinaryExpression_LHS() async {
+  Future<void> test_BinaryExpression_LHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = ^ + 2;}');
@@ -539,7 +540,7 @@
     assertNotSuggested('b');
   }
 
-  test_BinaryExpression_RHS() async {
+  Future<void> test_BinaryExpression_RHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = 2 + ^;}');
@@ -553,7 +554,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block() async {
+  Future<void> test_Block() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
@@ -656,7 +657,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final() async {
+  Future<void> test_Block_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
@@ -755,21 +756,21 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final2() async {
+  Future<void> test_Block_final2() async {
     addTestSource('main() {final S^ v;}');
 
     await computeSuggestions();
     assertSuggestClass('String');
   }
 
-  test_Block_final3() async {
+  Future<void> test_Block_final3() async {
     addTestSource('main() {final ^ v;}');
 
     await computeSuggestions();
     assertSuggestClass('String');
   }
 
-  test_Block_final_final() async {
+  Future<void> test_Block_final_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
@@ -870,7 +871,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final_var() async {
+  Future<void> test_Block_final_var() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
@@ -969,7 +970,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_identifier_partial() async {
+  Future<void> test_Block_identifier_partial() async {
     resolveSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
         class A {int x;}
@@ -1046,7 +1047,7 @@
     assertNotSuggested('HtmlElement');
   }
 
-  test_Block_inherited_imported() async {
+  Future<void> test_Block_inherited_imported() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -1077,7 +1078,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block_inherited_local() async {
+  Future<void> test_Block_inherited_local() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addTestSource('''
         class F { var f1; f2() { } get f3 => 0; set f4(fx) { } }
@@ -1101,7 +1102,7 @@
     assertNotSuggested('m2');
   }
 
-  test_Block_local_function() async {
+  Future<void> test_Block_local_function() async {
     addSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
         class A {int x;}
@@ -1152,7 +1153,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_partial_results() async {
+  Future<void> test_Block_partial_results() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
         export "dart:math" hide max;
@@ -1190,7 +1191,7 @@
     assertNotSuggested('H');
   }
 
-  test_Block_unimported() async {
+  Future<void> test_Block_unimported() async {
     addPackageFile('aaa', 'a.dart', 'class A {}');
     addTestSource('main() { ^ }');
 
@@ -1203,7 +1204,7 @@
     assertNotSuggested('Completer');
   }
 
-  test_CascadeExpression_selector1() async {
+  Future<void> test_CascadeExpression_selector1() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1228,7 +1229,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2() async {
+  Future<void> test_CascadeExpression_selector2() async {
     // SimpleIdentifier  PropertyAccess  CascadeExpression  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1251,7 +1252,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2_withTrailingReturn() async {
+  Future<void> test_CascadeExpression_selector2_withTrailingReturn() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1274,7 +1275,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_target() async {
+  Future<void> test_CascadeExpression_target() async {
     // SimpleIdentifier  CascadeExpression  ExpressionStatement
     addTestSource('''
         class A {var b; X _c;}
@@ -1294,7 +1295,7 @@
     assertNotSuggested('==');
   }
 
-  test_CatchClause_onType() async {
+  Future<void> test_CatchClause_onType() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^ {}}}');
 
@@ -1307,7 +1308,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_onType_noBrackets() async {
+  Future<void> test_CatchClause_onType_noBrackets() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^}}');
 
@@ -1319,7 +1320,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_typed() async {
+  Future<void> test_CatchClause_typed() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on E catch (e) {^}}}');
 
@@ -1332,7 +1333,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_untyped() async {
+  Future<void> test_CatchClause_untyped() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} catch (e, s) {^}}}');
 
@@ -1346,7 +1347,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body() async {
+  Future<void> test_ClassDeclaration_body() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1371,7 +1372,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final() async {
+  Future<void> test_ClassDeclaration_body_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1392,7 +1393,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field() async {
+  Future<void> test_ClassDeclaration_body_final_field() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1413,7 +1414,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field2() async {
+  Future<void> test_ClassDeclaration_body_final_field2() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1434,7 +1435,7 @@
     assertNotSuggested('Soo');
   }
 
-  test_ClassDeclaration_body_final_final() async {
+  Future<void> test_ClassDeclaration_body_final_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1455,7 +1456,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_var() async {
+  Future<void> test_ClassDeclaration_body_final_var() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1476,7 +1477,7 @@
     assertNotSuggested('x');
   }
 
-  test_Combinator_hide() async {
+  Future<void> test_Combinator_hide() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/home/test/lib/ab.dart', '''
         library libAB;
@@ -1500,7 +1501,7 @@
     assertNoSuggestions();
   }
 
-  test_Combinator_show() async {
+  Future<void> test_Combinator_show() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/home/test/lib/ab.dart', '''
         library libAB;
@@ -1526,7 +1527,7 @@
     assertNoSuggestions();
   }
 
-  test_ConditionalExpression_elseExpression() async {
+  Future<void> test_ConditionalExpression_elseExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1546,7 +1547,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_elseExpression_empty() async {
+  Future<void> test_ConditionalExpression_elseExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1575,7 +1576,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_partial_thenExpression() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1595,7 +1596,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_partial_thenExpression_empty() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1624,7 +1625,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_thenExpression() async {
+  Future<void> test_ConditionalExpression_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1644,7 +1645,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConstructorName_importedClass() async {
+  Future<void> test_ConstructorName_importedClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -1669,7 +1670,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory() async {
+  Future<void> test_ConstructorName_importedFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -1694,7 +1695,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory2() async {
+  Future<void> test_ConstructorName_importedFactory2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1712,7 +1713,7 @@
     assertNotSuggested('String');
   }
 
-  test_ConstructorName_localClass() async {
+  Future<void> test_ConstructorName_localClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1733,7 +1734,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_localFactory() async {
+  Future<void> test_ConstructorName_localFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1754,7 +1755,7 @@
     assertNotSuggested('m');
   }
 
-  test_DefaultFormalParameter_named_expression() async {
+  Future<void> test_DefaultFormalParameter_named_expression() async {
     // DefaultFormalParameter FormalParameterList MethodDeclaration
     addTestSource('''
         foo() { }
@@ -1772,7 +1773,7 @@
     assertNotSuggested('bar');
   }
 
-  test_doc_class() async {
+  Future<void> test_doc_class() async {
     addSource('/home/test/lib/a.dart', r'''
 library A;
 /// My class.
@@ -1794,7 +1795,7 @@
     }
   }
 
-  test_doc_function() async {
+  Future<void> test_doc_function() async {
     resolveSource('/home/test/lib/a.dart', r'''
 library A;
 /// My function.
@@ -1813,7 +1814,7 @@
         'My function.\nShort description.\n\nLonger description.');
   }
 
-  test_doc_function_c_style() async {
+  Future<void> test_doc_function_c_style() async {
     resolveSource('/home/test/lib/a.dart', r'''
 library A;
 /**
@@ -1834,7 +1835,7 @@
         'My function.\nShort description.\n\nLonger description.');
   }
 
-  test_enum() async {
+  Future<void> test_enum() async {
     addSource('/home/test/lib/a.dart', 'library A; enum E { one, two }');
     addTestSource('import "a.dart"; main() {^}');
     await computeSuggestions();
@@ -1843,7 +1844,7 @@
     assertNotSuggested('two');
   }
 
-  test_enum_deprecated() async {
+  Future<void> test_enum_deprecated() async {
     addSource(
         '/home/test/lib/a.dart', 'library A; @deprecated enum E { one, two }');
     addTestSource('import "a.dart"; main() {^}');
@@ -1855,7 +1856,7 @@
     assertNotSuggested('two');
   }
 
-  test_enum_filter() async {
+  Future<void> test_enum_filter() async {
     addSource('/home/test/lib/a.dart', '''
 enum E { one, two }
 enum F { three, four }
@@ -1880,7 +1881,7 @@
     assertSuggestEnumConst('F.four');
   }
 
-  test_ExpressionStatement_identifier() async {
+  Future<void> test_ExpressionStatement_identifier() async {
     // SimpleIdentifier  ExpressionStatement  Block
     resolveSource('/home/test/lib/a.dart', '''
         _B F1() { }
@@ -1910,7 +1911,7 @@
     assertNotSuggested('_B');
   }
 
-  test_ExpressionStatement_name() async {
+  Future<void> test_ExpressionStatement_name() async {
     // ExpressionStatement  Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/a.dart', '''
         B T1;
@@ -1923,7 +1924,7 @@
     assertNoSuggestions();
   }
 
-  test_extendsClause() async {
+  Future<void> test_extendsClause() async {
     newFile('/home/test/lib/a.dart', content: 'class A {}');
     addTestSource('''
 import 'a.dart';
@@ -1934,7 +1935,7 @@
     assertSuggestClass('A');
   }
 
-  test_FieldDeclaration_name_typed() async {
+  Future<void> test_FieldDeclaration_name_typed() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -1946,7 +1947,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldDeclaration_name_var() async {
+  Future<void> test_FieldDeclaration_name_var() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -1958,7 +1959,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldFormalParameter_in_non_constructor() async {
+  Future<void> test_FieldFormalParameter_in_non_constructor() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('class A {B(this.^foo) {}}');
     await computeSuggestions();
@@ -1967,7 +1968,7 @@
     assertNoSuggestions();
   }
 
-  test_ForEachStatement_body_typed() async {
+  Future<void> test_ForEachStatement_body_typed() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (int foo in bar) {^}}');
 
@@ -1979,7 +1980,7 @@
     assertSuggestClass('Object');
   }
 
-  test_ForEachStatement_body_untyped() async {
+  Future<void> test_ForEachStatement_body_untyped() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (foo in bar) {^}}');
 
@@ -1991,7 +1992,7 @@
     assertSuggestClass('Object');
   }
 
-  test_ForEachStatement_iterable() async {
+  Future<void> test_ForEachStatement_iterable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (int foo in ^) {}}');
 
@@ -2002,7 +2003,7 @@
     assertSuggestClass('Object');
   }
 
-  test_ForEachStatement_loopVariable() async {
+  Future<void> test_ForEachStatement_loopVariable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ in args) {}}');
 
@@ -2013,7 +2014,7 @@
     assertSuggestClass('String');
   }
 
-  test_ForEachStatement_loopVariable_type() async {
+  Future<void> test_ForEachStatement_loopVariable_type() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ foo in args) {}}');
 
@@ -2025,7 +2026,7 @@
     assertSuggestClass('String');
   }
 
-  test_ForEachStatement_loopVariable_type2() async {
+  Future<void> test_ForEachStatement_loopVariable_type2() async {
     // DeclaredIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (S^ foo in args) {}}');
 
@@ -2037,7 +2038,7 @@
     assertSuggestClass('String');
   }
 
-  test_FormalParameterList() async {
+  Future<void> test_FormalParameterList() async {
     // FormalParameterList MethodDeclaration
     addTestSource('''
         foo() { }
@@ -2055,7 +2056,7 @@
     assertNotSuggested('bar');
   }
 
-  test_ForStatement_body() async {
+  Future<void> test_ForStatement_body() async {
     // Block  ForStatement
     addTestSource('main(args) {for (int i; i < 10; ++i) {^}}');
 
@@ -2066,7 +2067,7 @@
     assertSuggestClass('Object');
   }
 
-  test_ForStatement_condition() async {
+  Future<void> test_ForStatement_condition() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; i^)}');
 
@@ -2076,7 +2077,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForStatement_initializer() async {
+  Future<void> test_ForStatement_initializer() async {
     addTestSource('''
 import 'dart:math';
 main() {
@@ -2094,19 +2095,19 @@
     assertSuggestClass('int');
   }
 
-  test_ForStatement_initializer_variableName_afterType() async {
+  Future<void> test_ForStatement_initializer_variableName_afterType() async {
     addTestSource('main() { for (String ^) }');
     await computeSuggestions();
     assertNotSuggested('int');
   }
 
-  test_ForStatement_typing_inKeyword() async {
+  Future<void> test_ForStatement_typing_inKeyword() async {
     addTestSource('main() { for (var v i^) }');
     await computeSuggestions();
     assertNotSuggested('int');
   }
 
-  test_ForStatement_updaters() async {
+  Future<void> test_ForStatement_updaters() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; index < 10; i^)}');
 
@@ -2116,7 +2117,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForStatement_updaters_prefix_expression() async {
+  Future<void> test_ForStatement_updaters_prefix_expression() async {
     // SimpleIdentifier  PrefixExpression  ForStatement
     addTestSource('''
         void bar() { }
@@ -2130,7 +2131,7 @@
     assertNotSuggested('bar');
   }
 
-  test_function_parameters_mixed_required_and_named() async {
+  Future<void> test_function_parameters_mixed_required_and_named() async {
     resolveSource('/home/test/lib/a.dart', '''
 int m(x, {int y}) {}
 ''');
@@ -2151,7 +2152,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_function_parameters_mixed_required_and_positional() async {
+  Future<void> test_function_parameters_mixed_required_and_positional() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m(x, [int y]) {}
 ''');
@@ -2172,7 +2173,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_function_parameters_named() async {
+  Future<void> test_function_parameters_named() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m({x, int y}) {}
 ''');
@@ -2193,7 +2194,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_function_parameters_none() async {
+  Future<void> test_function_parameters_none() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m() {}
 ''');
@@ -2212,7 +2213,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_function_parameters_positional() async {
+  Future<void> test_function_parameters_positional() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m([x, int y]) {}
 ''');
@@ -2233,7 +2234,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_function_parameters_required() async {
+  Future<void> test_function_parameters_required() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m(x, int y) {}
 ''');
@@ -2254,7 +2255,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_FunctionDeclaration_returnType_afterComment() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2284,7 +2285,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment2() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment2() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2314,7 +2315,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment3() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment3() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2345,7 +2346,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionExpression_body_function() async {
+  Future<void> test_FunctionExpression_body_function() async {
     // Block  BlockFunctionBody  FunctionExpression
     addTestSource('''
         void bar() { }
@@ -2361,7 +2362,7 @@
     assertSuggestClass('Object');
   }
 
-  test_functionTypeAlias_genericTypeAlias() async {
+  Future<void> test_functionTypeAlias_genericTypeAlias() async {
     addSource('/home/test/lib/a.dart', r'''
 typedef F = void Function();
 ''');
@@ -2376,7 +2377,7 @@
     assertSuggestFunctionTypeAlias('F', 'void');
   }
 
-  test_functionTypeAlias_old() async {
+  Future<void> test_functionTypeAlias_old() async {
     addSource('/home/test/lib/a.dart', r'''
 typedef void F();
 ''');
@@ -2391,7 +2392,7 @@
     assertSuggestFunctionTypeAlias('F', 'void');
   }
 
-  test_IfStatement() async {
+  Future<void> test_IfStatement() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (true) ^}}''');
@@ -2406,7 +2407,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_condition() async {
+  Future<void> test_IfStatement_condition() async {
     // SimpleIdentifier  IfStatement  Block  BlockFunctionBody
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -2421,7 +2422,7 @@
     assertSuggestClass('Object');
   }
 
-  test_IfStatement_empty() async {
+  Future<void> test_IfStatement_empty() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (^) something}}''');
@@ -2436,7 +2437,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_invocation() async {
+  Future<void> test_IfStatement_invocation() async {
     // SimpleIdentifier  PrefixIdentifier  IfStatement
     addTestSource('''
         main() {var a; if (a.^) something}''');
@@ -2450,13 +2451,13 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_typing_isKeyword() async {
+  Future<void> test_IfStatement_typing_isKeyword() async {
     addTestSource('main() { if (v i^) }');
     await computeSuggestions();
     assertNotSuggested('int');
   }
 
-  test_implementsClause() async {
+  Future<void> test_implementsClause() async {
     newFile('/home/test/lib/a.dart', content: 'class A {}');
     addTestSource('''
 import 'a.dart';
@@ -2467,7 +2468,7 @@
     assertSuggestClass('A');
   }
 
-  test_implicitCreation() async {
+  Future<void> test_implicitCreation() async {
     addSource('/home/test/lib/a.dart', '''
 class A {
   A.a1();
@@ -2496,7 +2497,7 @@
     assertSuggestConstructor('B.b2');
   }
 
-  test_ImportDirective_dart() async {
+  Future<void> test_ImportDirective_dart() async {
     // SimpleStringLiteral  ImportDirective
     addTestSource('''
         import "dart^";
@@ -2506,7 +2507,7 @@
     assertNoSuggestions();
   }
 
-  test_IndexExpression() async {
+  Future<void> test_IndexExpression() async {
     // ExpressionStatement  Block
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2535,7 +2536,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_IndexExpression2() async {
+  Future<void> test_IndexExpression2() async {
     // SimpleIdentifier IndexExpression ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2555,7 +2556,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_InstanceCreationExpression() async {
+  Future<void> test_InstanceCreationExpression() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {foo(){var f; {var x;}}}
 class B {B(this.x, [String boo]) { } int x;}
@@ -2604,7 +2605,7 @@
     assertNotSuggested('math');
   }
 
-  test_InstanceCreationExpression_abstractClass() async {
+  Future<void> test_InstanceCreationExpression_abstractClass() async {
     addSource('/home/test/lib/a.dart', '''
 abstract class A {
   A();
@@ -2626,7 +2627,8 @@
     assertSuggestConstructor('A.factory');
   }
 
-  test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
+  Future<void>
+      test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
     addSource('/home/test/lib/a.dart', '''
 abstract class A {}
 ''');
@@ -2642,7 +2644,7 @@
     assertNotSuggested('A');
   }
 
-  test_InstanceCreationExpression_filter() async {
+  Future<void> test_InstanceCreationExpression_filter() async {
     addSource('/home/test/lib/a.dart', '''
 class A {}
 class B extends A {}
@@ -2670,7 +2672,7 @@
     assertSuggestConstructor('D', elemOffset: -1);
   }
 
-  test_InstanceCreationExpression_imported() async {
+  Future<void> test_InstanceCreationExpression_imported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2713,7 +2715,7 @@
     assertNotSuggested('T2');
   }
 
-  test_InstanceCreationExpression_unimported() async {
+  Future<void> test_InstanceCreationExpression_unimported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/home/test/lib/ab.dart', 'class Clip { }');
     addTestSource('class A {foo(){new C^}}');
@@ -2726,7 +2728,7 @@
     assertNotSuggested('Clip');
   }
 
-  test_internal_sdk_libs() async {
+  Future<void> test_internal_sdk_libs() async {
     addTestSource('main() {p^}');
 
     await computeSuggestions();
@@ -2737,7 +2739,7 @@
     assertNotSuggested('printToConsole');
   }
 
-  test_InterpolationExpression() async {
+  Future<void> test_InterpolationExpression() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2772,7 +2774,7 @@
     assertNotSuggested('name');
   }
 
-  test_InterpolationExpression_block() async {
+  Future<void> test_InterpolationExpression_block() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2804,7 +2806,7 @@
     assertNotSuggested('name');
   }
 
-  test_InterpolationExpression_block2() async {
+  Future<void> test_InterpolationExpression_block2() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addTestSource('main() {String name; print("hello \${n^}");}');
 
@@ -2814,7 +2816,7 @@
     //assertSuggestClass('Object');
   }
 
-  test_InterpolationExpression_prefix_selector() async {
+  Future<void> test_InterpolationExpression_prefix_selector() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${name.^}");}');
 
@@ -2827,7 +2829,7 @@
     assertNotSuggested('==');
   }
 
-  test_InterpolationExpression_prefix_selector2() async {
+  Future<void> test_InterpolationExpression_prefix_selector2() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \$name.^");}');
 
@@ -2835,7 +2837,7 @@
     assertNoSuggestions();
   }
 
-  test_InterpolationExpression_prefix_target() async {
+  Future<void> test_InterpolationExpression_prefix_target() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${nam^e.length}");}');
 
@@ -2846,7 +2848,7 @@
     assertNotSuggested('length');
   }
 
-  test_IsExpression() async {
+  Future<void> test_IsExpression() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -2867,7 +2869,7 @@
     assertNotSuggested('foo');
   }
 
-  test_IsExpression_target() async {
+  Future<void> test_IsExpression_target() async {
     // IfStatement  Block  BlockFunctionBody
     addTestSource('''
         foo() { }
@@ -2886,7 +2888,7 @@
     assertSuggestClass('Object');
   }
 
-  test_IsExpression_type() async {
+  Future<void> test_IsExpression_type() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -2901,7 +2903,7 @@
     assertSuggestClass('Object');
   }
 
-  test_IsExpression_type_partial() async {
+  Future<void> test_IsExpression_type_partial() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -2916,7 +2918,7 @@
     assertSuggestClass('Object');
   }
 
-  test_IsExpression_type_subtype_extends_filter() async {
+  Future<void> test_IsExpression_type_subtype_extends_filter() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
         foo() { }
@@ -2938,7 +2940,7 @@
     assertNotSuggested('main');
   }
 
-  test_IsExpression_type_subtype_implements_filter() async {
+  Future<void> test_IsExpression_type_subtype_implements_filter() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
         foo() { }
@@ -2960,7 +2962,7 @@
     assertNotSuggested('main');
   }
 
-  test_keyword() async {
+  Future<void> test_keyword() async {
     resolveSource('/home/test/lib/b.dart', '''
         lib B;
         int newT1;
@@ -2987,7 +2989,7 @@
     assertNotSuggested('newer');
   }
 
-  test_Literal_list() async {
+  Future<void> test_Literal_list() async {
     // ']'  ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([^]);}');
 
@@ -2996,7 +2998,7 @@
     assertSuggestClass('String');
   }
 
-  test_Literal_list2() async {
+  Future<void> test_Literal_list2() async {
     // SimpleIdentifier ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([S^]);}');
 
@@ -3005,7 +3007,7 @@
     assertSuggestClass('String');
   }
 
-  test_Literal_string() async {
+  Future<void> test_Literal_string() async {
     // SimpleStringLiteral  ExpressionStatement  Block
     addTestSource('class A {a() {"hel^lo"}}');
 
@@ -3013,14 +3015,14 @@
     assertNoSuggestions();
   }
 
-  test_localVariableDeclarationName() async {
+  Future<void> test_localVariableDeclarationName() async {
     addTestSource('main() {String m^}');
     await computeSuggestions();
     assertNotSuggested('main');
     assertNotSuggested('min');
   }
 
-  test_MapLiteralEntry() async {
+  Future<void> test_MapLiteralEntry() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3057,7 +3059,7 @@
     assertNotSuggested('C2');
   }
 
-  test_MapLiteralEntry1() async {
+  Future<void> test_MapLiteralEntry1() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3084,7 +3086,7 @@
     assertNotSuggested('T2');
   }
 
-  test_MapLiteralEntry2() async {
+  Future<void> test_MapLiteralEntry2() async {
     // SimpleIdentifier  MapLiteralEntry  MapLiteral  VariableDeclaration
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3106,7 +3108,7 @@
     assertNotSuggested('T2');
   }
 
-  test_method_parameters_mixed_required_and_named() async {
+  Future<void> test_method_parameters_mixed_required_and_named() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m(x, {int y}) {}
 ''');
@@ -3127,7 +3129,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_mixed_required_and_positional() async {
+  Future<void> test_method_parameters_mixed_required_and_positional() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m(x, [int y]) {}
 ''');
@@ -3148,7 +3150,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_named() async {
+  Future<void> test_method_parameters_named() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m({x, int y}) {}
 ''');
@@ -3169,7 +3171,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_none() async {
+  Future<void> test_method_parameters_none() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m() {}
 ''');
@@ -3188,7 +3190,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_positional() async {
+  Future<void> test_method_parameters_positional() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m([x, int y]) {}
 ''');
@@ -3209,7 +3211,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_required() async {
+  Future<void> test_method_parameters_required() async {
     resolveSource('/home/test/lib/a.dart', '''
 void m(x, int y) {}
 ''');
@@ -3230,7 +3232,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_MethodDeclaration_body_getters() async {
+  Future<void> test_MethodDeclaration_body_getters() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}');
 
@@ -3242,7 +3244,7 @@
     assertNotSuggested('_g');
   }
 
-  test_MethodDeclaration_body_static() async {
+  Future<void> test_MethodDeclaration_body_static() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/c.dart', '''
         class C {
@@ -3279,7 +3281,7 @@
     assertNotSuggested('c4');
   }
 
-  test_MethodDeclaration_members() async {
+  Future<void> test_MethodDeclaration_members() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}');
 
@@ -3295,7 +3297,7 @@
     }
   }
 
-  test_MethodDeclaration_parameters_named() async {
+  Future<void> test_MethodDeclaration_parameters_named() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated Z a(X x, _, b, {y: boo}) {^}}');
 
@@ -3310,7 +3312,7 @@
     assertNotSuggested('_');
   }
 
-  test_MethodDeclaration_parameters_positional() async {
+  Future<void> test_MethodDeclaration_parameters_positional() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('''
         foo() { }
@@ -3328,7 +3330,7 @@
     assertSuggestClass('String');
   }
 
-  test_MethodDeclaration_returnType() async {
+  Future<void> test_MethodDeclaration_returnType() async {
     // ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3357,7 +3359,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3386,7 +3388,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment2() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment2() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3415,7 +3417,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment3() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment3() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     resolveSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3446,7 +3448,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodInvocation_no_semicolon() async {
+  Future<void> test_MethodInvocation_no_semicolon() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
         main() { }
@@ -3479,7 +3481,7 @@
     assertNotSuggested('==');
   }
 
-  test_MethodTypeArgumentList() async {
+  Future<void> test_MethodTypeArgumentList() async {
     addSource('/home/test/lib/a.dart', '''
 class A {}
 class B {}
@@ -3503,7 +3505,7 @@
     assertNotSuggested('main');
   }
 
-  test_MethodTypeArgumentList_2() async {
+  Future<void> test_MethodTypeArgumentList_2() async {
     addTestSource('''
 void f<S,T>() { }
 
@@ -3520,7 +3522,7 @@
     assertNotSuggested('main');
   }
 
-  test_mixin_ordering() async {
+  Future<void> test_mixin_ordering() async {
     addSource('/home/test/lib/a.dart', '''
 class B {}
 class M1 {
@@ -3542,7 +3544,7 @@
     assertNotSuggested('m');
   }
 
-  test_new_instance() async {
+  Future<void> test_new_instance() async {
     addTestSource('import "dart:math"; class A {x() {new Random().^}}');
 
     await computeSuggestions();
@@ -3554,7 +3556,7 @@
     assertNotSuggested('A');
   }
 
-  test_no_parameters_field() async {
+  Future<void> test_no_parameters_field() async {
     addSource('/home/test/lib/a.dart', '''
 int x;
 ''');
@@ -3569,7 +3571,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_no_parameters_getter() async {
+  Future<void> test_no_parameters_getter() async {
     resolveSource('/home/test/lib/a.dart', '''
 int get x => null;
 ''');
@@ -3584,7 +3586,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_no_parameters_setter() async {
+  Future<void> test_no_parameters_setter() async {
     addSource('/home/test/lib/a.dart', '''
 set x(int value) {};
 ''');
@@ -3599,14 +3601,14 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_parameterName_excludeTypes() async {
+  Future<void> test_parameterName_excludeTypes() async {
     addTestSource('m(int ^) {}');
     await computeSuggestions();
     assertNotSuggested('int');
     assertNotSuggested('bool');
   }
 
-  test_partFile_TypeName() async {
+  Future<void> test_partFile_TypeName() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3641,7 +3643,7 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_TypeName2() async {
+  Future<void> test_partFile_TypeName2() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
         lib libB;
@@ -3676,7 +3678,7 @@
     assertNotSuggested('m');
   }
 
-  test_PrefixedIdentifier_class_const() async {
+  Future<void> test_PrefixedIdentifier_class_const() async {
     // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3723,7 +3725,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_imported() async {
+  Future<void> test_PrefixedIdentifier_class_imported() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3760,7 +3762,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_local() async {
+  Future<void> test_PrefixedIdentifier_class_local() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
         main() {A a; a.^}
@@ -3794,7 +3796,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_getter() async {
+  Future<void> test_PrefixedIdentifier_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^}');
 
@@ -3802,7 +3804,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_library() async {
+  Future<void> test_PrefixedIdentifier_library() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3829,7 +3831,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3856,7 +3858,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly2() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3883,7 +3885,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_parameter() async {
+  Future<void> test_PrefixedIdentifier_parameter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3902,7 +3904,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_prefix() async {
+  Future<void> test_PrefixedIdentifier_prefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
         class A {static int bar = 10;}
@@ -3924,7 +3926,7 @@
     assertNotSuggested('_B');
   }
 
-  test_PrefixedIdentifier_propertyAccess() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^}');
 
@@ -3935,7 +3937,7 @@
     assertNotSuggested('compareTo');
   }
 
-  test_PrefixedIdentifier_propertyAccess_newStmt() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess_newStmt() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^ int y = 0;}');
 
@@ -3946,7 +3948,7 @@
     assertNotSuggested('compareTo');
   }
 
-  test_PrefixedIdentifier_trailingStmt_const() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_const() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('const String g = "hello"; f() {g.^ int y = 0;}');
 
@@ -3954,7 +3956,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_field() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_field() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g; f() {g.^ int y = 0;}}');
 
@@ -3962,7 +3964,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_function() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_function() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g() => "one"; f() {g.^ int y = 0;}');
 
@@ -3970,7 +3972,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('typedef String g(); f() {g.^ int y = 0;}');
 
@@ -3978,7 +3980,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_getter() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^ int y = 0;}');
 
@@ -3986,7 +3988,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_typed() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_typed() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {String g; g.^ int y = 0;}');
 
@@ -3994,7 +3996,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_untyped() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_untyped() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {var g = "hello"; g.^ int y = 0;}');
 
@@ -4002,7 +4004,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_method() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_method() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g() {}; f() {g.^ int y = 0;}}');
 
@@ -4010,7 +4012,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {f(String g) {g.^ int y = 0;}}');
 
@@ -4018,7 +4020,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param2() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param2() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f(String g) {g.^ int y = 0;}');
 
@@ -4026,7 +4028,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g; f() {g.^ int y = 0;}');
 
@@ -4034,7 +4036,7 @@
     assertNotSuggested('length');
   }
 
-  test_PropertyAccess_expression() async {
+  Future<void> test_PropertyAccess_expression() async {
     // SimpleIdentifier  MethodInvocation  PropertyAccess  ExpressionStatement
     addTestSource('class A {a() {"hello".to^String().length}}');
 
@@ -4048,7 +4050,7 @@
     assertNotSuggested('==');
   }
 
-  test_PropertyAccess_noTarget() async {
+  Future<void> test_PropertyAccess_noTarget() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/home/test/lib/ab.dart', 'class Foo { }');
     addTestSource('class C {foo(){.^}}');
@@ -4057,7 +4059,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_noTarget2() async {
+  Future<void> test_PropertyAccess_noTarget2() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/home/test/lib/ab.dart', 'class Foo { }');
     addTestSource('main() {.^}');
@@ -4066,7 +4068,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_selector() async {
+  Future<void> test_PropertyAccess_selector() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement  Block
     addTestSource('class A {a() {"hello".length.^}}');
 
@@ -4080,7 +4082,7 @@
     assertNotSuggested('==');
   }
 
-  test_SwitchStatement_c() async {
+  Future<void> test_SwitchStatement_c() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {c^}}}');
 
@@ -4088,7 +4090,7 @@
     assertNoSuggestions();
   }
 
-  test_SwitchStatement_case() async {
+  Future<void> test_SwitchStatement_case() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {var t; switch(x) {case 0: ^}}}');
 
@@ -4099,7 +4101,7 @@
     assertSuggestClass('String');
   }
 
-  test_SwitchStatement_empty() async {
+  Future<void> test_SwitchStatement_empty() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {^}}}');
 
@@ -4107,7 +4109,7 @@
     assertNoSuggestions();
   }
 
-  test_ThisExpression_block() async {
+  Future<void> test_ThisExpression_block() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
         main() { }
@@ -4143,7 +4145,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor() async {
+  Future<void> test_ThisExpression_constructor() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
         main() { }
@@ -4179,7 +4181,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param() async {
+  Future<void> test_ThisExpression_constructor_param() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -4217,7 +4219,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param2() async {
+  Future<void> test_ThisExpression_constructor_param2() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -4254,7 +4256,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param3() async {
+  Future<void> test_ThisExpression_constructor_param3() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -4291,7 +4293,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param4() async {
+  Future<void> test_ThisExpression_constructor_param4() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -4328,7 +4330,7 @@
     assertNotSuggested('==');
   }
 
-  test_TopLevelVariableDeclaration_typed_name() async {
+  Future<void> test_TopLevelVariableDeclaration_typed_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} B ^');
@@ -4337,7 +4339,7 @@
     assertNoSuggestions();
   }
 
-  test_TopLevelVariableDeclaration_untyped_name() async {
+  Future<void> test_TopLevelVariableDeclaration_untyped_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} var ^');
@@ -4346,7 +4348,7 @@
     assertNoSuggestions();
   }
 
-  test_TypeArgumentList() async {
+  Future<void> test_TypeArgumentList() async {
     // SimpleIdentifier  BinaryExpression  ExpressionStatement
     resolveSource('/home/test/lib/a.dart', '''
         class C1 {int x;}
@@ -4372,7 +4374,7 @@
     assertNotSuggested('F2');
   }
 
-  test_TypeArgumentList2() async {
+  Future<void> test_TypeArgumentList2() async {
     // TypeName  TypeArgumentList  TypeName
     addSource('/home/test/lib/a.dart', '''
         class C1 {int x;}
@@ -4393,7 +4395,7 @@
     assertNotSuggested('C2');
   }
 
-  test_TypeArgumentList_recursive() async {
+  Future<void> test_TypeArgumentList_recursive() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {}
 ''');
@@ -4413,7 +4415,7 @@
     assertSuggestClass('B');
   }
 
-  test_VariableDeclaration_name() async {
+  Future<void> test_VariableDeclaration_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addSource('/home/test/lib/b.dart', '''
@@ -4430,7 +4432,7 @@
     assertNoSuggestions();
   }
 
-  test_VariableDeclarationList_final() async {
+  Future<void> test_VariableDeclarationList_final() async {
     // VariableDeclarationList  VariableDeclarationStatement  Block
     addTestSource('main() {final ^} class C { }');
 
@@ -4440,7 +4442,7 @@
     assertNotSuggested('==');
   }
 
-  test_VariableDeclarationStatement_RHS() async {
+  Future<void> test_VariableDeclarationStatement_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
@@ -4465,7 +4467,7 @@
     assertNotSuggested('e');
   }
 
-  test_VariableDeclarationStatement_RHS_missing_semicolon() async {
+  Future<void> test_VariableDeclarationStatement_RHS_missing_semicolon() async {
     // VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     resolveSource('/home/test/lib/b.dart', '''
@@ -4496,7 +4498,7 @@
     assertNotSuggested('e');
   }
 
-  test_withClause_mixin() async {
+  Future<void> test_withClause_mixin() async {
     newFile('/home/test/lib/a.dart', content: 'mixin M {}');
     addTestSource('''
 import 'a.dart';
@@ -4507,7 +4509,7 @@
     assertSuggestMixin('M');
   }
 
-  test_YieldStatement() async {
+  Future<void> test_YieldStatement() async {
     addTestSource('''
 void main() async* {
   yield ^
diff --git a/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
index 29526b5..2b43a5c 100644
--- a/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
@@ -12,7 +12,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InheritedReferenceContributorTest);
   });
@@ -29,7 +29,7 @@
   }
 
   /// Sanity check.  Permutations tested in local_ref_contributor.
-  test_ArgDefaults_inherited_method_with_required_named() async {
+  Future<void> test_ArgDefaults_inherited_method_with_required_named() async {
     addMetaPackage();
     resolveSource('/home/test/lib/b.dart', '''
 import 'package:meta/meta.dart';
@@ -50,7 +50,7 @@
         defaultArgListString: 'bar, baz: null');
   }
 
-  test_AwaitExpression_inherited() async {
+  Future<void> test_AwaitExpression_inherited() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     resolveSource('/home/test/lib/b.dart', '''
 lib libB;
@@ -76,7 +76,7 @@
     assertSuggestMethod('y', 'A', 'Future<dynamic>');
   }
 
-  test_Block_inherited_imported() async {
+  Future<void> test_Block_inherited_imported() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     resolveSource('/home/test/lib/b.dart', '''
       lib B;
@@ -103,7 +103,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block_inherited_local() async {
+  Future<void> test_Block_inherited_local() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addTestSource('''
 class F { var f1; f2() { } get f3 => 0; set f4(fx) { } }
@@ -127,7 +127,7 @@
     assertSuggestMethod('m2', 'M', 'int');
   }
 
-  test_flutter_setState_hasPrefix() async {
+  Future<void> test_flutter_setState_hasPrefix() async {
     var spaces_4 = ' ' * 4;
     var spaces_6 = ' ' * 6;
     await _check_flutter_setState(
@@ -139,7 +139,7 @@
         20);
   }
 
-  test_flutter_setState_longPrefix() async {
+  Future<void> test_flutter_setState_longPrefix() async {
     var spaces_6 = ' ' * 6;
     var spaces_8 = ' ' * 8;
     await _check_flutter_setState(
@@ -151,7 +151,7 @@
         22);
   }
 
-  test_flutter_setState_noPrefix() async {
+  Future<void> test_flutter_setState_noPrefix() async {
     var spaces_4 = ' ' * 4;
     var spaces_6 = ' ' * 6;
     await _check_flutter_setState(
@@ -163,7 +163,7 @@
         20);
   }
 
-  test_inherited() async {
+  Future<void> test_inherited() async {
     resolveSource('/home/test/lib/b.dart', '''
 lib libB;
 class A2 {
@@ -204,7 +204,7 @@
     assertSuggestMethod('y2', 'A2', 'int');
   }
 
-  test_method_inClass() async {
+  Future<void> test_method_inClass() async {
     addTestSource('''
 class A {
   void m(x, int y) {}
@@ -215,7 +215,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_inMixin() async {
+  Future<void> test_method_inMixin() async {
     addTestSource('''
 mixin A {
   void m(x, int y) {}
@@ -226,7 +226,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_inMixin_fromSuperclassConstraint() async {
+  Future<void> test_method_inMixin_fromSuperclassConstraint() async {
     addTestSource('''
 class C {
   void c(x, int y) {}
@@ -239,7 +239,7 @@
     assertSuggestMethod('c', 'C', 'void');
   }
 
-  test_method_parameters_mixed_required_and_named() async {
+  Future<void> test_method_parameters_mixed_required_and_named() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   void m(x, {int y}) {}
@@ -262,7 +262,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_mixed_required_and_named_local() async {
+  Future<void> test_method_parameters_mixed_required_and_named_local() async {
     addTestSource('''
 class A {
   void m(x, {int y}) {}
@@ -282,7 +282,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_mixed_required_and_positional() async {
+  Future<void> test_method_parameters_mixed_required_and_positional() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   void m(x, [int y]) {}
@@ -305,7 +305,8 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_mixed_required_and_positional_local() async {
+  Future<void>
+      test_method_parameters_mixed_required_and_positional_local() async {
     addTestSource('''
 class A {
   void m(x, [int y]) {}
@@ -325,7 +326,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_named() async {
+  Future<void> test_method_parameters_named() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   void m({x, int y}) {}
@@ -348,7 +349,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_named_local() async {
+  Future<void> test_method_parameters_named_local() async {
     addTestSource('''
 class A {
   void m({x, int y}) {}
@@ -368,7 +369,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_none() async {
+  Future<void> test_method_parameters_none() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   void m() {}
@@ -388,7 +389,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_none_local() async {
+  Future<void> test_method_parameters_none_local() async {
     addTestSource('''
 class A {
   void m() {}
@@ -405,7 +406,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_positional() async {
+  Future<void> test_method_parameters_positional() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   void m([x, int y]) {}
@@ -428,7 +429,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_positional_local() async {
+  Future<void> test_method_parameters_positional_local() async {
     addTestSource('''
 class A {
   void m([x, int y]) {}
@@ -448,7 +449,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_required() async {
+  Future<void> test_method_parameters_required() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   void m(x, int y) {}
@@ -471,7 +472,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_mixin_ordering() async {
+  Future<void> test_mixin_ordering() async {
     resolveSource('/home/test/lib/a.dart', '''
 class B {}
 class M1 {
@@ -493,7 +494,7 @@
     assertSuggestMethod('m', 'M1', 'void');
   }
 
-  test_no_parameters_field() async {
+  Future<void> test_no_parameters_field() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   int x;
@@ -510,7 +511,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_no_parameters_getter() async {
+  Future<void> test_no_parameters_getter() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   int get x => null;
@@ -527,7 +528,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_no_parameters_setter() async {
+  Future<void> test_no_parameters_setter() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {
   set x(int value) {};
@@ -544,7 +545,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_outside_class() async {
+  Future<void> test_outside_class() async {
     resolveSource('/home/test/lib/b.dart', '''
 lib libB;
 class A2 {
@@ -585,7 +586,7 @@
     assertNotSuggested('y2');
   }
 
-  test_static_field() async {
+  Future<void> test_static_field() async {
     resolveSource('/home/test/lib/b.dart', '''
 lib libB;
 class A2 {
@@ -626,7 +627,7 @@
     assertNotSuggested('y2');
   }
 
-  test_static_method() async {
+  Future<void> test_static_method() async {
     resolveSource('/home/test/lib/b.dart', '''
 lib libB;
 class A2 {
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index 4331d17..ebe6350 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -13,7 +13,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(KeywordContributorTest);
     defineReflectiveTests(KeywordContributorWithExtensionMethodsTest);
@@ -439,33 +439,33 @@
   bool isEnabled(Feature feature) =>
       driver.analysisOptions.contextFeatures.isEnabled(feature);
 
-  test_after_class_noPrefix() async {
+  Future<void> test_after_class_noPrefix() async {
     addTestSource('class A {} ^');
     await computeSuggestions();
     assertSuggestKeywords(declarationKeywords, relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_after_class_prefix() async {
+  Future<void> test_after_class_prefix() async {
     addTestSource('class A {} c^');
     await computeSuggestions();
     assertSuggestKeywords(declarationKeywords, relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_after_import_noPrefix() async {
+  Future<void> test_after_import_noPrefix() async {
     addTestSource('import "foo"; ^');
     await computeSuggestions();
     assertSuggestKeywords(directiveAndDeclarationKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_after_import_prefix() async {
+  Future<void> test_after_import_prefix() async {
     addTestSource('import "foo"; c^');
     await computeSuggestions();
     assertSuggestKeywords(directiveAndDeclarationKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async() async {
+  Future<void> test_anonymous_function_async() async {
     addTestSource('main() {foo(() ^ {}}}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -473,7 +473,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async2() async {
+  Future<void> test_anonymous_function_async2() async {
     addTestSource('main() {foo(() a^ {}}}');
     await computeSuggestions();
     // Fasta adds a closing paren after the first `}`
@@ -485,27 +485,27 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async3() async {
+  Future<void> test_anonymous_function_async3() async {
     addTestSource('main() {foo(() async ^ {}}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_anonymous_function_async4() async {
+  Future<void> test_anonymous_function_async4() async {
     addTestSource('main() {foo(() ^ => 2}}');
     await computeSuggestions();
     assertSuggestKeywords([],
         pseudoKeywords: ['async'], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async5() async {
+  Future<void> test_anonymous_function_async5() async {
     addTestSource('main() {foo(() ^}}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE,
         pseudoKeywords: ['async', 'async*', 'sync*']);
   }
 
-  test_anonymous_function_async6() async {
+  Future<void> test_anonymous_function_async6() async {
     addTestSource('main() {foo("bar", () as^{}}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -513,7 +513,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async7() async {
+  Future<void> test_anonymous_function_async7() async {
     addTestSource('main() {foo("bar", () as^ => null');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -522,7 +522,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async8() async {
+  Future<void> test_anonymous_function_async8() async {
     addTestSource('main() {foo(() ^ {})}}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -530,7 +530,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_anonymous_function_async9() async {
+  Future<void> test_anonymous_function_async9() async {
     addTestSource('main() {foo(() a^ {})}}');
     await computeSuggestions();
     // Fasta interprets the argument as a function expression
@@ -540,81 +540,81 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_argument() async {
+  Future<void> test_argument() async {
     addTestSource('main() {foo(^);}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_argument2() async {
+  Future<void> test_argument2() async {
     addTestSource('main() {foo(n^);}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_argument_literal() async {
+  Future<void> test_argument_literal() async {
     addTestSource('main() {foo("^");}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_argument_named() async {
+  Future<void> test_argument_named() async {
     addTestSource('main() {foo(bar: ^);}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_argument_named2() async {
+  Future<void> test_argument_named2() async {
     addTestSource('main() {foo(bar: n^);}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_argument_named_literal() async {
+  Future<void> test_argument_named_literal() async {
     addTestSource('main() {foo(bar: "^");}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_assignment_field() async {
+  Future<void> test_assignment_field() async {
     addTestSource('class A {var foo = ^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_assignment_field2() async {
+  Future<void> test_assignment_field2() async {
     addTestSource('class A {var foo = n^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_assignment_local() async {
+  Future<void> test_assignment_local() async {
     addTestSource('main() {var foo = ^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_assignment_local2() async {
+  Future<void> test_assignment_local2() async {
     addTestSource('main() {var foo = n^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_assignment_local2_async() async {
+  Future<void> test_assignment_local2_async() async {
     addTestSource('main() async {var foo = n^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE,
         pseudoKeywords: ['await']);
   }
 
-  test_assignment_local_async() async {
+  Future<void> test_assignment_local_async() async {
     addTestSource('main() async {var foo = ^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE,
         pseudoKeywords: ['await']);
   }
 
-  test_before_import() async {
+  Future<void> test_before_import() async {
     addTestSource('^ import foo;');
     await computeSuggestions();
     assertSuggestKeywords(
@@ -622,7 +622,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_catch_1a() async {
+  Future<void> test_catch_1a() async {
     // '}'  Block  BlockFunctionBody  FunctionExpression
     addTestSource('main() {try {} ^}');
     await computeSuggestions();
@@ -632,7 +632,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_1b() async {
+  Future<void> test_catch_1b() async {
     // [ExpressionStatement 'c']  Block  BlockFunctionBody  FunctionExpression
     addTestSource('main() {try {} c^}');
     await computeSuggestions();
@@ -642,7 +642,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_1c() async {
+  Future<void> test_catch_1c() async {
     // [EmptyStatement] Block BlockFunction FunctionExpression
     addTestSource('main() {try {} ^;}');
     await computeSuggestions();
@@ -652,7 +652,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_1d() async {
+  Future<void> test_catch_1d() async {
     // [EmptyStatement] Block BlockFunction FunctionExpression
     addTestSource('main() {try {} ^ Foo foo;}');
     await computeSuggestions();
@@ -662,7 +662,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_2a() async {
+  Future<void> test_catch_2a() async {
     // '}'  Block  BlockFunctionBody  FunctionExpression
     addTestSource('main() {try {} on SomeException {} ^}');
     await computeSuggestions();
@@ -673,7 +673,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_2b() async {
+  Future<void> test_catch_2b() async {
     // [ExpressionStatement 'c']  Block  BlockFunctionBody  FunctionExpression
     addTestSource('main() {try {} on SomeException {} c^}');
     await computeSuggestions();
@@ -684,7 +684,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_2c() async {
+  Future<void> test_catch_2c() async {
     // [EmptyStatement] Block BlockFunction FunctionExpression
     addTestSource('main() {try {} on SomeException {} ^;}');
     await computeSuggestions();
@@ -695,7 +695,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_2d() async {
+  Future<void> test_catch_2d() async {
     // [EmptyStatement] Block BlockFunction FunctionExpression
     addTestSource('main() {try {} on SomeException {} ^ Foo foo;}');
     await computeSuggestions();
@@ -706,7 +706,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_3a() async {
+  Future<void> test_catch_3a() async {
     // '}'  Block  BlockFunctionBody  FunctionExpression
     addTestSource('main() {try {} catch (e) {} ^}');
     await computeSuggestions();
@@ -717,7 +717,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_3b() async {
+  Future<void> test_catch_3b() async {
     // [ExpressionStatement 'c']  Block  BlockFunctionBody  FunctionExpression
     addTestSource('main() {try {} catch (e) {} c^}');
     await computeSuggestions();
@@ -728,7 +728,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_3c() async {
+  Future<void> test_catch_3c() async {
     // [EmptyStatement] Block BlockFunction FunctionExpression
     addTestSource('main() {try {} catch (e) {} ^;}');
     await computeSuggestions();
@@ -739,7 +739,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_3d() async {
+  Future<void> test_catch_3d() async {
     // [EmptyStatement] Block BlockFunction FunctionExpression
     addTestSource('main() {try {} catch (e) {} ^ Foo foo;}');
     await computeSuggestions();
@@ -750,7 +750,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_4a1() async {
+  Future<void> test_catch_4a1() async {
     // [CatchClause]  TryStatement  Block
     addTestSource('main() {try {} ^ on SomeException {}}');
     await computeSuggestions();
@@ -759,7 +759,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_4a2() async {
+  Future<void> test_catch_4a2() async {
     // ['c' VariableDeclarationStatement]  Block  BlockFunctionBody
     addTestSource('main() {try {} c^ on SomeException {}}');
     await computeSuggestions();
@@ -770,7 +770,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_4b1() async {
+  Future<void> test_catch_4b1() async {
     // [CatchClause]  TryStatement  Block
     addTestSource('main() {try {} ^ catch (e) {}}');
     await computeSuggestions();
@@ -779,7 +779,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_4b2() async {
+  Future<void> test_catch_4b2() async {
     // ['c' ExpressionStatement]  Block  BlockFunctionBody
     addTestSource('main() {try {} c^ catch (e) {}}');
     await computeSuggestions();
@@ -790,7 +790,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_4c1() async {
+  Future<void> test_catch_4c1() async {
     // ['finally']  TryStatement  Block
     addTestSource('main() {try {} ^ finally {}}');
     await computeSuggestions();
@@ -799,7 +799,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_4c2() async {
+  Future<void> test_catch_4c2() async {
     // ['c' ExpressionStatement]  Block  BlockFunctionBody
     addTestSource('main() {try {} c^ finally {}}');
     await computeSuggestions();
@@ -810,7 +810,7 @@
     assertSuggestKeywords(keywords, pseudoKeywords: ['on']);
   }
 
-  test_catch_block() async {
+  Future<void> test_catch_block() async {
     // '}'  Block  CatchClause  TryStatement  Block
     addTestSource('main() {try {} catch (e) {^}}}');
     await computeSuggestions();
@@ -820,71 +820,71 @@
     assertSuggestKeywords(keywords);
   }
 
-  test_class() async {
+  Future<void> test_class() async {
     addTestSource('class A e^ { }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.EXTENDS, Keyword.IMPLEMENTS],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_body() async {
+  Future<void> test_class_body() async {
     addTestSource('class A {^}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords);
   }
 
-  test_class_body_beginning() async {
+  Future<void> test_class_body_beginning() async {
     addTestSource('class A {^ var foo;}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords);
   }
 
-  test_class_body_between() async {
+  Future<void> test_class_body_between() async {
     addTestSource('class A {var bar; ^ var foo;}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords);
   }
 
-  test_class_body_end() async {
+  Future<void> test_class_body_end() async {
     addTestSource('class A {var foo; ^}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords);
   }
 
-  test_class_extends() async {
+  Future<void> test_class_extends() async {
     addTestSource('class A extends foo ^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS, Keyword.WITH],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_extends2() async {
+  Future<void> test_class_extends2() async {
     addTestSource('class A extends foo i^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS, Keyword.WITH],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_extends3() async {
+  Future<void> test_class_extends3() async {
     addTestSource('class A extends foo i^ { }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS, Keyword.WITH],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_extends_name() async {
+  Future<void> test_class_extends_name() async {
     addTestSource('class A extends ^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_class_implements() async {
+  Future<void> test_class_implements() async {
     addTestSource('class A ^ implements foo');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.EXTENDS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_implements2() async {
+  Future<void> test_class_implements2() async {
     addTestSource('class A e^ implements foo');
     await computeSuggestions();
     assertSuggestKeywords(
@@ -894,7 +894,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_implements3() async {
+  Future<void> test_class_implements3() async {
     addTestSource('class A e^ implements foo { }');
     await computeSuggestions();
     assertSuggestKeywords(
@@ -904,13 +904,13 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_implements_name() async {
+  Future<void> test_class_implements_name() async {
     addTestSource('class A implements ^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_class_member_const_afterStatic() async {
+  Future<void> test_class_member_const_afterStatic() async {
     addTestSource('''
 class C {
   static c^
@@ -920,7 +920,7 @@
     assertSuggestKeywords(staticMember);
   }
 
-  test_class_member_final_afterStatic() async {
+  Future<void> test_class_member_final_afterStatic() async {
     addTestSource('''
 class C {
   static f^
@@ -930,153 +930,153 @@
     assertSuggestKeywords(staticMember);
   }
 
-  test_class_name() async {
+  Future<void> test_class_name() async {
     addTestSource('class ^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_class_noBody() async {
+  Future<void> test_class_noBody() async {
     addTestSource('class A ^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.EXTENDS, Keyword.IMPLEMENTS],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_noBody2() async {
+  Future<void> test_class_noBody2() async {
     addTestSource('class A e^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.EXTENDS, Keyword.IMPLEMENTS],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_noBody3() async {
+  Future<void> test_class_noBody3() async {
     addTestSource('class A e^ String foo;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.EXTENDS, Keyword.IMPLEMENTS],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_with() async {
+  Future<void> test_class_with() async {
     addTestSource('class A extends foo with bar ^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_with2() async {
+  Future<void> test_class_with2() async {
     addTestSource('class A extends foo with bar i^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_with3() async {
+  Future<void> test_class_with3() async {
     addTestSource('class A extends foo with bar i^ { }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_class_with_name() async {
+  Future<void> test_class_with_name() async {
     addTestSource('class A extends foo with ^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_constructor_initializers_first() async {
+  Future<void> test_constructor_initializers_first() async {
     addTestSource('class A { int f; A() : ^, f = 1; }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.ASSERT]);
   }
 
-  test_constructor_initializers_last() async {
+  Future<void> test_constructor_initializers_last() async {
     addTestSource('class A { A() : ^; }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.ASSERT, Keyword.SUPER, Keyword.THIS]);
   }
 
-  test_constructor_param_noPrefix() async {
+  Future<void> test_constructor_param_noPrefix() async {
     addTestSource('class A { A(^) {});}');
     await computeSuggestions();
     assertSuggestKeywords(constructorParameter);
   }
 
-  test_constructor_param_prefix() async {
+  Future<void> test_constructor_param_prefix() async {
     addTestSource('class A { A(t^) {});}');
     await computeSuggestions();
     assertSuggestKeywords(constructorParameter);
   }
 
-  test_do_break_continue_insideClass() async {
+  Future<void> test_do_break_continue_insideClass() async {
     addTestSource('class A {foo() {do {^} while (true);}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInLoopInClass,
         relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_do_break_continue_outsideClass() async {
+  Future<void> test_do_break_continue_outsideClass() async {
     addTestSource('main() {do {^} while (true);}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInLoopOutsideClass,
         relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_empty() async {
+  Future<void> test_empty() async {
     addTestSource('^');
     await computeSuggestions();
     assertSuggestKeywords(directiveDeclarationAndLibraryKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_for_break_continue_insideClass() async {
+  Future<void> test_for_break_continue_insideClass() async {
     addTestSource('class A {foo() {for (int x in myList) {^}}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInLoopInClass,
         relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_for_break_continue_outsideClass() async {
+  Future<void> test_for_break_continue_outsideClass() async {
     addTestSource('main() {for (int x in myList) {^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInLoopOutsideClass,
         relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_for_expression_in() async {
+  Future<void> test_for_expression_in() async {
     addTestSource('main() {for (int x i^)}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IN], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_for_expression_in2() async {
+  Future<void> test_for_expression_in2() async {
     addTestSource('main() {for (int x in^)}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IN], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_for_expression_in_inInitializer() async {
+  Future<void> test_for_expression_in_inInitializer() async {
     addTestSource('main() {for (int i^)}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_for_expression_init() async {
+  Future<void> test_for_expression_init() async {
     addTestSource('main() {for (int x = i^)}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_for_expression_init2() async {
+  Future<void> test_for_expression_init2() async {
     addTestSource('main() {for (int x = in^)}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_for_initialization_var() async {
+  Future<void> test_for_initialization_var() async {
     addTestSource('main() {for (^)}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.VAR], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_function_async() async {
+  Future<void> test_function_async() async {
     addTestSource('main()^');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -1084,7 +1084,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_function_async2() async {
+  Future<void> test_function_async2() async {
     addTestSource('main()^{}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -1092,7 +1092,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_function_async3() async {
+  Future<void> test_function_async3() async {
     addTestSource('main()a^');
     await computeSuggestions();
     assertSuggestKeywords(declarationKeywords,
@@ -1100,7 +1100,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_function_async4() async {
+  Future<void> test_function_async4() async {
     addTestSource('main()a^{}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -1108,7 +1108,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_function_async5() async {
+  Future<void> test_function_async5() async {
     addTestSource('main()a^ Foo foo;');
     await computeSuggestions();
     assertSuggestKeywords(declarationKeywords,
@@ -1116,7 +1116,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_function_body_inClass_constructorInitializer() async {
+  Future<void> test_function_body_inClass_constructorInitializer() async {
     addTestSource(r'''
 foo(p) {}
 class A {
@@ -1128,7 +1128,7 @@
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_function_body_inClass_constructorInitializer_async() async {
+  Future<void> test_function_body_inClass_constructorInitializer_async() async {
     addTestSource(r'''
 foo(p) {}
 class A {
@@ -1141,7 +1141,8 @@
         pseudoKeywords: ['await']);
   }
 
-  test_function_body_inClass_constructorInitializer_async_star() async {
+  Future<void>
+      test_function_body_inClass_constructorInitializer_async_star() async {
     addTestSource(r'''
   foo(p) {}
   class A {
@@ -1154,7 +1155,7 @@
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_function_body_inClass_field() async {
+  Future<void> test_function_body_inClass_field() async {
     addTestSource(r'''
 class A {
   var f = () {^};
@@ -1164,7 +1165,7 @@
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_function_body_inClass_methodBody() async {
+  Future<void> test_function_body_inClass_methodBody() async {
     addTestSource(r'''
 class A {
   m() {
@@ -1176,7 +1177,7 @@
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_function_body_inClass_methodBody_inFunction() async {
+  Future<void> test_function_body_inClass_methodBody_inFunction() async {
     addTestSource(r'''
 class A {
   m() {
@@ -1190,7 +1191,7 @@
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_function_body_inClass_methodBody_inFunction_async() async {
+  Future<void> test_function_body_inClass_methodBody_inFunction_async() async {
     addTestSource(r'''
 class A {
   m() {
@@ -1204,7 +1205,8 @@
     assertSuggestKeywords(statementStartInClass, pseudoKeywords: ['await']);
   }
 
-  test_function_body_inClass_methodBody_inFunction_async_star() async {
+  Future<void>
+      test_function_body_inClass_methodBody_inFunction_async_star() async {
     addTestSource(r'''
   class A {
     m() {
@@ -1219,61 +1221,61 @@
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_function_body_inUnit() async {
+  Future<void> test_function_body_inUnit() async {
     addTestSource('main() {^}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_function_body_inUnit_afterBlock() async {
+  Future<void> test_function_body_inUnit_afterBlock() async {
     addTestSource('main() {{}^}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_function_body_inUnit_async() async {
+  Future<void> test_function_body_inUnit_async() async {
     addTestSource('main() async {^}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass,
         pseudoKeywords: ['await']);
   }
 
-  test_function_body_inUnit_async_star() async {
+  Future<void> test_function_body_inUnit_async_star() async {
     addTestSource('main() async* {n^}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass,
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_function_body_inUnit_async_star2() async {
+  Future<void> test_function_body_inUnit_async_star2() async {
     addTestSource('main() async* {n^ foo}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass,
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_function_body_inUnit_sync_star() async {
+  Future<void> test_function_body_inUnit_sync_star() async {
     addTestSource('main() sync* {n^}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass,
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_function_body_inUnit_sync_star2() async {
+  Future<void> test_function_body_inUnit_sync_star2() async {
     addTestSource('main() sync* {n^ foo}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass,
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_if_after_else() async {
+  Future<void> test_if_after_else() async {
     addTestSource('main() { if (true) {} else ^ }');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass,
         relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_if_afterThen_nextCloseCurlyBrace0() async {
+  Future<void> test_if_afterThen_nextCloseCurlyBrace0() async {
     addTestSource('main() { if (true) {} ^ }');
     await computeSuggestions();
     List<Keyword> keywords = [];
@@ -1282,7 +1284,7 @@
     assertSuggestKeywords(keywords, relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_if_afterThen_nextCloseCurlyBrace1() async {
+  Future<void> test_if_afterThen_nextCloseCurlyBrace1() async {
     addTestSource('main() { if (true) {} e^ }');
     await computeSuggestions();
     List<Keyword> keywords = [];
@@ -1291,7 +1293,7 @@
     assertSuggestKeywords(keywords, relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_if_afterThen_nextStatement0() async {
+  Future<void> test_if_afterThen_nextStatement0() async {
     addTestSource('main() { if (true) {} ^ print(0); }');
     await computeSuggestions();
     List<Keyword> keywords = [];
@@ -1300,91 +1302,91 @@
     assertSuggestKeywords(keywords, relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_if_condition_isKeyword() async {
+  Future<void> test_if_condition_isKeyword() async {
     addTestSource('main() { if (v i^) {} }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_if_condition_isKeyword2() async {
+  Future<void> test_if_condition_isKeyword2() async {
     addTestSource('main() { if (v i^ && false) {} }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_if_expression_in_class() async {
+  Future<void> test_if_expression_in_class() async {
     addTestSource('class A {foo() {if (^) }}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_if_expression_in_class2() async {
+  Future<void> test_if_expression_in_class2() async {
     addTestSource('class A {foo() {if (n^) }}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_if_expression_in_function() async {
+  Future<void> test_if_expression_in_function() async {
     addTestSource('foo() {if (^) }');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_if_expression_in_function2() async {
+  Future<void> test_if_expression_in_function2() async {
     addTestSource('foo() {if (n^) }');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_if_in_class() async {
+  Future<void> test_if_in_class() async {
     addTestSource('class A {foo() {if (true) ^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_if_in_class2() async {
+  Future<void> test_if_in_class2() async {
     addTestSource('class A {foo() {if (true) ^;}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_if_in_class3() async {
+  Future<void> test_if_in_class3() async {
     addTestSource('class A {foo() {if (true) r^;}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_if_in_class4() async {
+  Future<void> test_if_in_class4() async {
     addTestSource('class A {foo() {if (true) ^ go();}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_if_outside_class() async {
+  Future<void> test_if_outside_class() async {
     addTestSource('foo() {if (true) ^}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_if_outside_class2() async {
+  Future<void> test_if_outside_class2() async {
     addTestSource('foo() {if (true) ^;}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_if_outside_class3() async {
+  Future<void> test_if_outside_class3() async {
     addTestSource('foo() {if (true) r^;}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_if_outside_class4() async {
+  Future<void> test_if_outside_class4() async {
     addTestSource('foo() {if (true) ^ go();}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartOutsideClass);
   }
 
-  test_ifOrForElement_forElement() async {
+  Future<void> test_ifOrForElement_forElement() async {
     addTestSource('''
 f() => [for (var e in c) ^];
 ''');
@@ -1392,7 +1394,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_ifElement_else() async {
+  Future<void> test_ifOrForElement_ifElement_else() async {
     addTestSource('''
 f() => [if (true) 1 else ^];
 ''');
@@ -1400,7 +1402,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_ifElement_then() async {
+  Future<void> test_ifOrForElement_ifElement_then() async {
     addTestSource('''
 f() => [if (true) ^];
 ''');
@@ -1408,7 +1410,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_list_empty() async {
+  Future<void> test_ifOrForElement_list_empty() async {
     addTestSource('''
 f() => [^];
 ''');
@@ -1416,7 +1418,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_list_first() async {
+  Future<void> test_ifOrForElement_list_first() async {
     addTestSource('''
 f() => [^1, 2];
 ''');
@@ -1424,7 +1426,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_list_last() async {
+  Future<void> test_ifOrForElement_list_last() async {
     addTestSource('''
 f() => [1, 2, ^];
 ''');
@@ -1432,7 +1434,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_list_middle() async {
+  Future<void> test_ifOrForElement_list_middle() async {
     addTestSource('''
 f() => [1, ^, 2];
 ''');
@@ -1440,7 +1442,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_map_empty() async {
+  Future<void> test_ifOrForElement_map_empty() async {
     addTestSource('''
 f() => <String, int>{^};
 ''');
@@ -1448,7 +1450,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_map_first() async {
+  Future<void> test_ifOrForElement_map_first() async {
     addTestSource('''
 f() => <String, int>{^'a' : 1};
 ''');
@@ -1456,7 +1458,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_map_last() async {
+  Future<void> test_ifOrForElement_map_last() async {
     addTestSource('''
 f() => <String, int>{'a' : 1, 'b' : 2, ^};
 ''');
@@ -1464,7 +1466,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_map_middle() async {
+  Future<void> test_ifOrForElement_map_middle() async {
     addTestSource('''
 f() => <String, int>{'a' : 1, ^, 'b' : 2];
 ''');
@@ -1472,7 +1474,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_set_empty() async {
+  Future<void> test_ifOrForElement_set_empty() async {
     addTestSource('''
 f() => <int>{^};
 ''');
@@ -1480,7 +1482,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_set_first() async {
+  Future<void> test_ifOrForElement_set_first() async {
     addTestSource('''
 f() => <int>{^1, 2};
 ''');
@@ -1488,7 +1490,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_set_last() async {
+  Future<void> test_ifOrForElement_set_last() async {
     addTestSource('''
 f() => <int>{1, 2, ^};
 ''');
@@ -1496,7 +1498,7 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_ifOrForElement_set_middle() async {
+  Future<void> test_ifOrForElement_set_middle() async {
     addTestSource('''
 f() => <int>{1, ^, 2};
 ''');
@@ -1504,58 +1506,58 @@
     assertSuggestKeywords(COLLECTION_ELEMENT_START);
   }
 
-  test_import() async {
+  Future<void> test_import() async {
     addTestSource('import "foo" deferred as foo ^;');
     await computeSuggestions();
     assertSuggestKeywords([],
         pseudoKeywords: ['show', 'hide'], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_as() async {
+  Future<void> test_import_as() async {
     addTestSource('import "foo" deferred ^;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_as2() async {
+  Future<void> test_import_as2() async {
     addTestSource('import "foo" deferred a^;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_as3() async {
+  Future<void> test_import_as3() async {
     addTestSource('import "foo" deferred a^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred() async {
+  Future<void> test_import_deferred() async {
     addTestSource('import "foo" ^ as foo;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.DEFERRED], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred2() async {
+  Future<void> test_import_deferred2() async {
     addTestSource('import "foo" d^ as foo;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.DEFERRED], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred3() async {
+  Future<void> test_import_deferred3() async {
     addTestSource('import "foo" d^ show foo;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
         pseudoKeywords: ['deferred as'], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred4() async {
+  Future<void> test_import_deferred4() async {
     addTestSource('import "foo" d^ hide foo;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
         pseudoKeywords: ['deferred as'], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred5() async {
+  Future<void> test_import_deferred5() async {
     addTestSource('import "foo" d^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1563,7 +1565,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred6() async {
+  Future<void> test_import_deferred6() async {
     addTestSource('import "foo" d^ import');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1571,7 +1573,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_as() async {
+  Future<void> test_import_deferred_as() async {
     addTestSource('import "foo" ^;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1579,7 +1581,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_as2() async {
+  Future<void> test_import_deferred_as2() async {
     addTestSource('import "foo" d^;');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1587,7 +1589,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_as3() async {
+  Future<void> test_import_deferred_as3() async {
     addTestSource('import "foo" ^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1595,7 +1597,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_as4() async {
+  Future<void> test_import_deferred_as4() async {
     addTestSource('import "foo" d^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1603,7 +1605,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_as5() async {
+  Future<void> test_import_deferred_as5() async {
     addTestSource('import "foo" sh^ import "bar"; import "baz";');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.AS],
@@ -1611,14 +1613,14 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_not() async {
+  Future<void> test_import_deferred_not() async {
     addTestSource('import "foo" as foo ^;');
     await computeSuggestions();
     assertSuggestKeywords([],
         pseudoKeywords: ['show', 'hide'], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_deferred_partial() async {
+  Future<void> test_import_deferred_partial() async {
     addTestSource('import "package:foo/foo.dart" def^ as foo;');
     await computeSuggestions();
     expect(replacementOffset, 30);
@@ -1628,13 +1630,13 @@
     expect(suggestions[0].selectionLength, 0);
   }
 
-  test_import_incomplete() async {
+  Future<void> test_import_incomplete() async {
     addTestSource('import "^"');
     await computeSuggestions();
     expect(suggestions, isEmpty);
   }
 
-  test_import_partial() async {
+  Future<void> test_import_partial() async {
     addTestSource('imp^ import "package:foo/foo.dart"; import "bar.dart";');
     await computeSuggestions();
     expect(replacementOffset, 0);
@@ -1644,7 +1646,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_partial2() async {
+  Future<void> test_import_partial2() async {
     addTestSource('^imp import "package:foo/foo.dart";');
     await computeSuggestions();
     expect(replacementOffset, 0);
@@ -1654,7 +1656,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_partial3() async {
+  Future<void> test_import_partial3() async {
     addTestSource(' ^imp import "package:foo/foo.dart"; import "bar.dart";');
     await computeSuggestions();
     expect(replacementOffset, 1);
@@ -1664,7 +1666,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_partial4() async {
+  Future<void> test_import_partial4() async {
     addTestSource('^ imp import "package:foo/foo.dart";');
     await computeSuggestions();
     expect(replacementOffset, 0);
@@ -1674,7 +1676,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_partial5() async {
+  Future<void> test_import_partial5() async {
     addTestSource('library libA; imp^ import "package:foo/foo.dart";');
     await computeSuggestions();
     expect(replacementOffset, 14);
@@ -1684,7 +1686,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_import_partial6() async {
+  Future<void> test_import_partial6() async {
     addTestSource(
         'library bar; import "zoo.dart"; imp^ import "package:foo/foo.dart";');
     await computeSuggestions();
@@ -1695,69 +1697,69 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_integerLiteral_inArgumentList() async {
+  Future<void> test_integerLiteral_inArgumentList() async {
     addTestSource('main() { print(42^); }');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_integerLiteral_inListLiteral() async {
+  Future<void> test_integerLiteral_inListLiteral() async {
     addTestSource('main() { var items = [42^]; }');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_is_expression() async {
+  Future<void> test_is_expression() async {
     addTestSource('main() {if (x is^)}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_is_expression_partial() async {
+  Future<void> test_is_expression_partial() async {
     addTestSource('main() {if (x i^)}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_library() async {
+  Future<void> test_library() async {
     addTestSource('library foo;^');
     await computeSuggestions();
     assertSuggestKeywords(directiveAndDeclarationKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_library_declaration() async {
+  Future<void> test_library_declaration() async {
     addTestSource('library ^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_library_declaration2() async {
+  Future<void> test_library_declaration2() async {
     addTestSource('library a^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_library_declaration3() async {
+  Future<void> test_library_declaration3() async {
     addTestSource('library a.^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_library_name() async {
+  Future<void> test_library_name() async {
     addTestSource('library ^');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_method_async() async {
+  Future<void> test_method_async() async {
     addTestSource('class A { foo() ^}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords,
         pseudoKeywords: ['async', 'async*', 'sync*']);
   }
 
-  test_method_async2() async {
+  Future<void> test_method_async2() async {
     addTestSource('class A { foo() ^{}}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -1765,14 +1767,14 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_method_async3() async {
+  Future<void> test_method_async3() async {
     addTestSource('class A { foo() a^}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords,
         pseudoKeywords: ['async', 'async*', 'sync*']);
   }
 
-  test_method_async4() async {
+  Future<void> test_method_async4() async {
     addTestSource('class A { foo() a^{}}');
     await computeSuggestions();
     assertSuggestKeywords([],
@@ -1780,262 +1782,262 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_method_async5() async {
+  Future<void> test_method_async5() async {
     addTestSource('class A { foo() ^ Foo foo;}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords,
         pseudoKeywords: ['async', 'async*', 'sync*']);
   }
 
-  test_method_async6() async {
+  Future<void> test_method_async6() async {
     addTestSource('class A { foo() a^ Foo foo;}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords,
         pseudoKeywords: ['async', 'async*', 'sync*']);
   }
 
-  test_method_async7() async {
+  Future<void> test_method_async7() async {
     addTestSource('class A { foo() ^ => Foo foo;}');
     await computeSuggestions();
     assertSuggestKeywords([],
         pseudoKeywords: ['async'], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_method_async8() async {
+  Future<void> test_method_async8() async {
     addTestSource('class A { foo() a^ Foo foo;}');
     await computeSuggestions();
     assertSuggestKeywords(classBodyKeywords,
         pseudoKeywords: ['async', 'async*', 'sync*']);
   }
 
-  test_method_body() async {
+  Future<void> test_method_body() async {
     addTestSource('class A { foo() {^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass);
   }
 
-  test_method_body2() async {
+  Future<void> test_method_body2() async {
     addTestSource('class A { foo() => ^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_method_body3() async {
+  Future<void> test_method_body3() async {
     addTestSource('class A { foo() => ^ Foo foo;}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_method_body4() async {
+  Future<void> test_method_body4() async {
     addTestSource('class A { foo() => ^;}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_method_body_async() async {
+  Future<void> test_method_body_async() async {
     addTestSource('class A { foo() async {^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass, pseudoKeywords: ['await']);
   }
 
-  test_method_body_async2() async {
+  Future<void> test_method_body_async2() async {
     addTestSource('class A { foo() async => ^}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE, pseudoKeywords: ['await']);
   }
 
-  test_method_body_async3() async {
+  Future<void> test_method_body_async3() async {
     addTestSource('class A { foo() async => ^ Foo foo;}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE, pseudoKeywords: ['await']);
   }
 
-  test_method_body_async4() async {
+  Future<void> test_method_body_async4() async {
     addTestSource('class A { foo() async => ^;}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE, pseudoKeywords: ['await']);
   }
 
-  test_method_body_async_star() async {
+  Future<void> test_method_body_async_star() async {
     addTestSource('class A { foo() async* {^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInClass,
         pseudoKeywords: ['await', 'yield', 'yield*']);
   }
 
-  test_method_body_expression1() async {
+  Future<void> test_method_body_expression1() async {
     addTestSource('class A { foo() {return b == true ? ^}}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_method_body_expression2() async {
+  Future<void> test_method_body_expression2() async {
     addTestSource('class A { foo() {return b == true ? 1 : ^}}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_method_body_return() async {
+  Future<void> test_method_body_return() async {
     addTestSource('class A { foo() {return ^}}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
-  test_method_invocation() async {
+  Future<void> test_method_invocation() async {
     addTestSource('class A { foo() {bar.^}}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_method_invocation2() async {
+  Future<void> test_method_invocation2() async {
     addTestSource('class A { foo() {bar.as^}}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_method_param_named_init() async {
+  Future<void> test_method_param_named_init() async {
     addTestSource('class A { foo({bool bar: ^}) {}}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_method_param_named_init2() async {
+  Future<void> test_method_param_named_init2() async {
     addTestSource('class A { foo({bool bar: f^}) {}}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_method_param_noPrefix() async {
+  Future<void> test_method_param_noPrefix() async {
     addTestSource('class A { foo(^) {});}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(methodParameter);
   }
 
-  test_method_param_positional_init() async {
+  Future<void> test_method_param_positional_init() async {
     addTestSource('class A { foo([bool bar = ^]) {}}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_method_param_positional_init2() async {
+  Future<void> test_method_param_positional_init2() async {
     addTestSource('class A { foo([bool bar = f^]) {}}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_method_param_prefix() async {
+  Future<void> test_method_param_prefix() async {
     addTestSource('class A { foo(t^) {});}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(methodParameter);
   }
 
-  test_mixin() async {
+  Future<void> test_mixin() async {
     addTestSource('mixin M o^ { }');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.ON, Keyword.IMPLEMENTS],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_mixin_afterOnClause() async {
+  Future<void> test_mixin_afterOnClause() async {
     addTestSource('mixin M on A i^ { } class A {}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.IMPLEMENTS], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_named_constructor_invocation() async {
+  Future<void> test_named_constructor_invocation() async {
     addTestSource('void main() {new Future.^}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_newInstance() async {
+  Future<void> test_newInstance() async {
     addTestSource('class A { foo() {new ^}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_newInstance2() async {
+  Future<void> test_newInstance2() async {
     addTestSource('class A { foo() {new ^ print("foo");}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_newInstance_prefixed() async {
+  Future<void> test_newInstance_prefixed() async {
     addTestSource('class A { foo() {new A.^}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_newInstance_prefixed2() async {
+  Future<void> test_newInstance_prefixed2() async {
     addTestSource('class A { foo() {new A.^ print("foo");}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_part_of() async {
+  Future<void> test_part_of() async {
     addTestSource('part of foo;^');
     await computeSuggestions();
     assertSuggestKeywords(directiveAndDeclarationKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_partial_class() async {
+  Future<void> test_partial_class() async {
     addTestSource('cl^');
     await computeSuggestions();
     assertSuggestKeywords(directiveDeclarationAndLibraryKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_partial_class2() async {
+  Future<void> test_partial_class2() async {
     addTestSource('library a; cl^');
     await computeSuggestions();
     assertSuggestKeywords(directiveAndDeclarationKeywords,
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_prefixed_field() async {
+  Future<void> test_prefixed_field() async {
     addTestSource('class A { int x; foo() {x.^}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_prefixed_field2() async {
+  Future<void> test_prefixed_field2() async {
     addTestSource('class A { int x; foo() {x.^ print("foo");}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_prefixed_library() async {
+  Future<void> test_prefixed_library() async {
     addTestSource('import "b" as b; class A { foo() {b.^}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_prefixed_local() async {
+  Future<void> test_prefixed_local() async {
     addTestSource('class A { foo() {int x; x.^}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_prefixed_local2() async {
+  Future<void> test_prefixed_local2() async {
     addTestSource('class A { foo() {int x; x.^ print("foo");}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_property_access() async {
+  Future<void> test_property_access() async {
     addTestSource('class A { get x => 7; foo() {new A().^}}');
     await computeSuggestions();
     assertSuggestKeywords([]);
   }
 
-  test_spreadElement() async {
+  Future<void> test_spreadElement() async {
     addTestSource('''
 f() => [...^];
 ''');
@@ -2043,53 +2045,53 @@
     assertSuggestKeywords(KeywordContributorTest.EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_switch_expression() async {
+  Future<void> test_switch_expression() async {
     addTestSource('main() {switch(^) {}}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_switch_expression2() async {
+  Future<void> test_switch_expression2() async {
     addTestSource('main() {switch(n^) {}}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_switch_expression3() async {
+  Future<void> test_switch_expression3() async {
     addTestSource('main() {switch(n^)}');
     await computeSuggestions();
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
-  test_switch_start() async {
+  Future<void> test_switch_start() async {
     addTestSource('main() {switch(1) {^}}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.CASE, Keyword.DEFAULT],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_start2() async {
+  Future<void> test_switch_start2() async {
     addTestSource('main() {switch(1) {^ case 1:}}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.CASE, Keyword.DEFAULT],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_start3() async {
+  Future<void> test_switch_start3() async {
     addTestSource('main() {switch(1) {^default:}}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.CASE, Keyword.DEFAULT],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_start4() async {
+  Future<void> test_switch_start4() async {
     addTestSource('main() {switch(1) {^ default:}}');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.CASE, Keyword.DEFAULT],
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_start5() async {
+  Future<void> test_switch_start5() async {
     addTestSource('main() {switch(1) {c^ default:}}');
     await computeSuggestions();
     expect(replacementOffset, 19);
@@ -2098,7 +2100,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_start6() async {
+  Future<void> test_switch_start6() async {
     addTestSource('main() {switch(1) {c^}}');
     await computeSuggestions();
     expect(replacementOffset, 19);
@@ -2107,7 +2109,7 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_start7() async {
+  Future<void> test_switch_start7() async {
     addTestSource('main() {switch(1) { c^ }}');
     await computeSuggestions();
     expect(replacementOffset, 20);
@@ -2116,38 +2118,38 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_switch_statement_case_break_insideClass() async {
+  Future<void> test_switch_statement_case_break_insideClass() async {
     addTestSource('class A{foo() {switch(1) {case 1: b^}}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInSwitchCaseInClass);
   }
 
-  test_switch_statement_case_break_outsideClass() async {
+  Future<void> test_switch_statement_case_break_outsideClass() async {
     addTestSource('foo() {switch(1) {case 1: b^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInSwitchCaseOutsideClass);
   }
 
-  test_switch_statement_insideClass() async {
+  Future<void> test_switch_statement_insideClass() async {
     addTestSource('class A{foo() {switch(1) {case 1:^}}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInSwitchInClass);
   }
 
-  test_switch_statement_outsideClass() async {
+  Future<void> test_switch_statement_outsideClass() async {
     addTestSource('main() {switch(1) {case 1:^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInSwitchOutsideClass);
   }
 
-  test_while_break_continue() async {
+  Future<void> test_while_break_continue() async {
     addTestSource('main() {while (true) {^}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInLoopOutsideClass,
         relevance: DART_RELEVANCE_KEYWORD);
   }
 
-  test_while_break_continue2() async {
+  Future<void> test_while_break_continue2() async {
     addTestSource('class A {foo() {while (true) {^}}}');
     await computeSuggestions();
     assertSuggestKeywords(statementStartInLoopInClass,
@@ -2191,31 +2193,31 @@
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
   }
 
-  test_class_body_empty() async {
+  Future<void> test_class_body_empty() async {
     addTestSource('extension E on int {^}');
     await computeSuggestions();
     assertSuggestKeywords(extensionBodyKeywords);
   }
 
-  test_extension_body_beginning() async {
+  Future<void> test_extension_body_beginning() async {
     addTestSource('extension E on int {^ foo() {}}');
     await computeSuggestions();
     assertSuggestKeywords(extensionBodyKeywords);
   }
 
-  test_extension_body_between() async {
+  Future<void> test_extension_body_between() async {
     addTestSource('extension E on int {foo() {} ^ void bar() {}}');
     await computeSuggestions();
     assertSuggestKeywords(extensionBodyKeywords);
   }
 
-  test_extension_body_end() async {
+  Future<void> test_extension_body_end() async {
     addTestSource('extension E on int {foo() {} ^}');
     await computeSuggestions();
     assertSuggestKeywords(extensionBodyKeywords);
   }
 
-  test_extension_member_const_afterStatic() async {
+  Future<void> test_extension_member_const_afterStatic() async {
     addTestSource('''
 extension E on int {
   static c^
@@ -2225,7 +2227,7 @@
     assertSuggestKeywords(staticMember);
   }
 
-  test_extension_member_final_afterStatic() async {
+  Future<void> test_extension_member_final_afterStatic() async {
     addTestSource('''
 extension E on int {
   static f^
@@ -2235,19 +2237,19 @@
     assertSuggestKeywords(staticMember);
   }
 
-  test_extension_noBody_named() async {
+  Future<void> test_extension_noBody_named() async {
     addTestSource('extension E ^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.ON], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_extension_noBody_unnamed() async {
+  Future<void> test_extension_noBody_unnamed() async {
     addTestSource('extension ^');
     await computeSuggestions();
     assertSuggestKeywords([Keyword.ON], relevance: DART_RELEVANCE_HIGH);
   }
 
-  test_method_type_params() async {
+  Future<void> test_method_type_params() async {
     addTestSource('''
 void f<T>() {}
 
diff --git a/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
index 99e55eb..e6a7f5b 100644
--- a/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LabelContributorTest);
   });
@@ -40,7 +40,7 @@
     return LabelContributor();
   }
 
-  test_break_ignores_outer_functions_using_closure() async {
+  Future<void> test_break_ignores_outer_functions_using_closure() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -56,7 +56,7 @@
     assertNotSuggested('foo');
   }
 
-  test_break_ignores_outer_functions_using_local_function() async {
+  Future<void> test_break_ignores_outer_functions_using_local_function() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -72,7 +72,7 @@
     assertNotSuggested('foo');
   }
 
-  test_break_ignores_toplevel_variables() async {
+  Future<void> test_break_ignores_toplevel_variables() async {
     addTestSource('''
 int x;
 void main() {
@@ -85,7 +85,7 @@
     assertNotSuggested('x');
   }
 
-  test_break_ignores_unrelated_statements() async {
+  Future<void> test_break_ignores_unrelated_statements() async {
     addTestSource('''
 void main() {
   foo: while (true) {}
@@ -101,7 +101,7 @@
     assertNotSuggested('bar');
   }
 
-  test_break_to_enclosing_loop() async {
+  Future<void> test_break_to_enclosing_loop() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -116,7 +116,7 @@
     assertSuggestLabel('bar');
   }
 
-  test_continue_from_loop_to_switch() async {
+  Future<void> test_continue_from_loop_to_switch() async {
     addTestSource('''
 void main() {
   switch (x) {
@@ -138,7 +138,7 @@
     assertSuggestLabel('baz');
   }
 
-  test_continue_from_switch_to_loop() async {
+  Future<void> test_continue_from_switch_to_loop() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -153,7 +153,8 @@
     assertSuggestLabel('foo');
   }
 
-  test_continue_ignores_outer_functions_using_closure_with_loop() async {
+  Future<void>
+      test_continue_ignores_outer_functions_using_closure_with_loop() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -169,7 +170,8 @@
     assertNotSuggested('foo');
   }
 
-  test_continue_ignores_outer_functions_using_closure_with_switch() async {
+  Future<void>
+      test_continue_ignores_outer_functions_using_closure_with_switch() async {
     addTestSource('''
 void main() {
   switch (x) {
@@ -186,7 +188,8 @@
     assertNotSuggested('foo');
   }
 
-  test_continue_ignores_outer_functions_using_local_function_with_loop() async {
+  Future<void>
+      test_continue_ignores_outer_functions_using_local_function_with_loop() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -202,7 +205,8 @@
     assertNotSuggested('foo');
   }
 
-  test_continue_ignores_outer_functions_using_local_function_with_switch() async {
+  Future<void>
+      test_continue_ignores_outer_functions_using_local_function_with_switch() async {
     addTestSource('''
 void main() {
   switch (x) {
@@ -219,7 +223,7 @@
     assertNotSuggested('foo');
   }
 
-  test_continue_ignores_unrelated_statements() async {
+  Future<void> test_continue_ignores_unrelated_statements() async {
     addTestSource('''
 void main() {
   foo: while (true) {}
@@ -235,7 +239,7 @@
     assertNotSuggested('bar');
   }
 
-  test_continue_to_earlier_case() async {
+  Future<void> test_continue_to_earlier_case() async {
     addTestSource('''
 void main() {
   switch (x) {
@@ -250,7 +254,7 @@
     assertSuggestLabel('foo');
   }
 
-  test_continue_to_enclosing_loop() async {
+  Future<void> test_continue_to_enclosing_loop() async {
     addTestSource('''
 void main() {
   foo: while (true) {
@@ -265,7 +269,7 @@
     assertSuggestLabel('bar');
   }
 
-  test_continue_to_enclosing_switch() async {
+  Future<void> test_continue_to_enclosing_switch() async {
     addTestSource('''
 void main() {
   switch (x) {
@@ -288,7 +292,7 @@
     assertSuggestLabel('baz');
   }
 
-  test_continue_to_later_case() async {
+  Future<void> test_continue_to_later_case() async {
     addTestSource('''
 void main() {
   switch (x) {
@@ -303,7 +307,7 @@
     assertSuggestLabel('foo');
   }
 
-  test_continue_to_same_case() async {
+  Future<void> test_continue_to_same_case() async {
     addTestSource('''
 void main() {
   switch (x) {
diff --git a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
index a02d8b9..3e6ea08 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
 //    defineReflectiveTests(LibraryMemberContributorTest);
     defineReflectiveTests(LibraryMemberContributorWithExtensionMethodsTest);
@@ -24,7 +24,7 @@
     return LibraryMemberContributor();
   }
 
-  test_libraryPrefix() async {
+  Future<void> test_libraryPrefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('import "dart:async" as bar; foo() {bar.^}');
     await computeSuggestions();
@@ -32,14 +32,14 @@
     assertNotSuggested('loadLibrary');
   }
 
-  test_libraryPrefix2() async {
+  Future<void> test_libraryPrefix2() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('import "dart:async" as bar; foo() {bar.^ print("f")}');
     await computeSuggestions();
     assertSuggestClass('Future');
   }
 
-  test_libraryPrefix3() async {
+  Future<void> test_libraryPrefix3() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('import "dart:async" as bar; foo() {new bar.F^ print("f")}');
     await computeSuggestions();
@@ -47,7 +47,7 @@
     assertSuggestConstructor('Future.delayed');
   }
 
-  test_libraryPrefix_cascade() async {
+  Future<void> test_libraryPrefix_cascade() async {
     addTestSource('''
     import "dart:math" as math;
     main() {math..^}''');
@@ -55,7 +55,7 @@
     assertNoSuggestions();
   }
 
-  test_libraryPrefix_cascade2() async {
+  Future<void> test_libraryPrefix_cascade2() async {
     addTestSource('''
     import "dart:math" as math;
     main() {math.^.}''');
@@ -63,7 +63,7 @@
     assertSuggestFunction('min', 'T');
   }
 
-  test_libraryPrefix_cascade3() async {
+  Future<void> test_libraryPrefix_cascade3() async {
     addTestSource('''
     import "dart:math" as math;
     main() {math..^a}''');
@@ -71,7 +71,7 @@
     assertNoSuggestions();
   }
 
-  test_libraryPrefix_cascade4() async {
+  Future<void> test_libraryPrefix_cascade4() async {
     addTestSource('''
     import "dart:math" as math;
     main() {math.^.a}''');
@@ -79,7 +79,7 @@
     assertSuggestFunction('min', 'T');
   }
 
-  test_libraryPrefix_deferred() async {
+  Future<void> test_libraryPrefix_deferred() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('import "dart:async" deferred as bar; foo() {bar.^}');
     await computeSuggestions();
@@ -87,7 +87,7 @@
     assertSuggestFunction('loadLibrary', 'Future<dynamic>');
   }
 
-  test_libraryPrefix_deferred_inPart() async {
+  Future<void> test_libraryPrefix_deferred_inPart() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
         library testA;
@@ -101,7 +101,7 @@
     assertNotSuggested('foo');
   }
 
-  test_libraryPrefix_with_exports() async {
+  Future<void> test_libraryPrefix_with_exports() async {
     addSource('/home/test/lib/a.dart', 'library libA; class A { }');
     addSource('/home/test/lib/b.dart', '''
         library libB;
@@ -116,7 +116,7 @@
     assertNotSuggested('C');
   }
 
-  test_PrefixedIdentifier_library() async {
+  Future<void> test_PrefixedIdentifier_library() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -141,7 +141,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_export_withShow() async {
+  Future<void> test_PrefixedIdentifier_library_export_withShow() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
@@ -160,7 +160,7 @@
     assertNotSuggested('B');
   }
 
-  test_PrefixedIdentifier_library_import_withShow() async {
+  Future<void> test_PrefixedIdentifier_library_import_withShow() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
@@ -176,7 +176,7 @@
     assertNotSuggested('B');
   }
 
-  test_PrefixedIdentifier_library_inPart() async {
+  Future<void> test_PrefixedIdentifier_library_inPart() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -206,7 +206,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -231,7 +231,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly2() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -256,7 +256,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_parameter() async {
+  Future<void> test_PrefixedIdentifier_parameter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -270,7 +270,7 @@
     assertNoSuggestions();
   }
 
-  test_PrefixedIdentifier_prefix() async {
+  Future<void> test_PrefixedIdentifier_prefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
         class A {static int bar = 10;}
@@ -297,7 +297,7 @@
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
   }
 
-  test_extension() async {
+  Future<void> test_extension() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 extension MyExt on int {}
diff --git a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
index 2ecf6a6..1891fbf 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LibraryPrefixContributorTest);
   });
@@ -40,7 +40,7 @@
     return LibraryPrefixContributor();
   }
 
-  test_Block() async {
+  Future<void> test_Block() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
@@ -87,7 +87,7 @@
     assertSuggestLibraryPrefixes(['g']);
   }
 
-  test_Block_final_final() async {
+  Future<void> test_Block_final_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
@@ -134,7 +134,7 @@
     assertSuggestLibraryPrefixes(['g']);
   }
 
-  test_Block_final_var() async {
+  Future<void> test_Block_final_var() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
@@ -181,7 +181,7 @@
     assertSuggestLibraryPrefixes(['g']);
   }
 
-  test_ClassDeclaration_body() async {
+  Future<void> test_ClassDeclaration_body() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -196,7 +196,7 @@
     assertSuggestLibraryPrefixes(['x']);
   }
 
-  test_ClassDeclaration_body_final() async {
+  Future<void> test_ClassDeclaration_body_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -211,7 +211,7 @@
     assertSuggestLibraryPrefixes(['x']);
   }
 
-  test_ClassDeclaration_body_final_field() async {
+  Future<void> test_ClassDeclaration_body_final_field() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -226,7 +226,7 @@
     assertSuggestLibraryPrefixes(['x']);
   }
 
-  test_ClassDeclaration_body_final_field2() async {
+  Future<void> test_ClassDeclaration_body_final_field2() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -241,7 +241,7 @@
     assertSuggestLibraryPrefixes(['Soo']);
   }
 
-  test_ClassDeclaration_body_final_final() async {
+  Future<void> test_ClassDeclaration_body_final_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -256,7 +256,7 @@
     assertSuggestLibraryPrefixes(['x']);
   }
 
-  test_ClassDeclaration_body_final_var() async {
+  Future<void> test_ClassDeclaration_body_final_var() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -271,7 +271,7 @@
     assertSuggestLibraryPrefixes(['x']);
   }
 
-  test_InstanceCreationExpression() async {
+  Future<void> test_InstanceCreationExpression() async {
     addSource('/home/test/lib/a.dart', '''
 class A {foo(){var f; {var x;}}}
 class B {B(this.x, [String boo]) { } int x;}
@@ -284,13 +284,13 @@
     assertSuggestLibraryPrefixes(['math', 't']);
   }
 
-  test_InstanceCreationExpression2() async {
+  Future<void> test_InstanceCreationExpression2() async {
     addTestSource('import "dart:convert" as json;f() {var x=new js^}');
     await computeSuggestions();
     assertSuggestLibraryPrefixes(['json']);
   }
 
-  test_InstanceCreationExpression_inPart() async {
+  Future<void> test_InstanceCreationExpression_inPart() async {
     addSource('/home/test/lib/a.dart', '''
 class A {foo(){var f; {var x;}}}
 class B {B(this.x, [String boo]) { } int x;}
@@ -308,7 +308,7 @@
     assertSuggestLibraryPrefixes(['math', 't']);
   }
 
-  test_InstanceCreationExpression_inPart_detached() async {
+  Future<void> test_InstanceCreationExpression_inPart_detached() async {
     addSource('/home/test/lib/a.dart', '''
 class A {foo(){var f; {var x;}}}
 class B {B(this.x, [String boo]) { } int x;}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index f7ae6b1..8e5f5cb 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalConstructorContributorTest);
   });
@@ -55,7 +55,7 @@
   }
 
   /// Sanity check.  Permutations tested in local_ref_contributor.
-  test_ArgDefaults_cons_with_required_named() async {
+  Future<void> test_ArgDefaults_cons_with_required_named() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -71,7 +71,7 @@
     assertSuggestConstructor('A', defaultArgListString: 'bar, baz: null');
   }
 
-  test_ArgumentList() async {
+  Future<void> test_ArgumentList() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -100,7 +100,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_imported_function() async {
+  Future<void> test_ArgumentList_imported_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -130,7 +130,8 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_functionalArg() async {
+  Future<void>
+      test_ArgumentList_InstanceCreationExpression_functionalArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -162,7 +163,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_typedefArg() async {
+  Future<void> test_ArgumentList_InstanceCreationExpression_typedefArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -195,7 +196,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_function() async {
+  Future<void> test_ArgumentList_local_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -225,7 +226,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_method() async {
+  Future<void> test_ArgumentList_local_method() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -255,7 +256,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_functionalArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_functionalArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -287,7 +288,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_methodArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_methodArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -317,7 +318,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_namedParam() async {
+  Future<void> test_ArgumentList_namedParam() async {
     // SimpleIdentifier  NamedExpression  ArgumentList  MethodInvocation
     // ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
@@ -336,7 +337,7 @@
     assertNotSuggested('main');
   }
 
-  test_AsExpression() async {
+  Future<void> test_AsExpression() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
         class A {var b; X _c; foo() {var a; (a as ^).foo();}''');
@@ -351,7 +352,7 @@
     assertNotSuggested('==');
   }
 
-  test_AssignmentExpression_name() async {
+  Future<void> test_AssignmentExpression_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int ^b = 1;}');
@@ -360,7 +361,7 @@
     assertNoSuggestions();
   }
 
-  test_AssignmentExpression_RHS() async {
+  Future<void> test_AssignmentExpression_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int b = ^}');
@@ -378,7 +379,7 @@
     assertNotSuggested('Object');
   }
 
-  test_AssignmentExpression_type() async {
+  Future<void> test_AssignmentExpression_type() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -406,7 +407,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_newline() async {
+  Future<void> test_AssignmentExpression_type_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -433,7 +434,7 @@
     assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial() async {
+  Future<void> test_AssignmentExpression_type_partial() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -461,7 +462,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial_newline() async {
+  Future<void> test_AssignmentExpression_type_partial_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -488,7 +489,7 @@
     assertNotSuggested('identical');
   }
 
-  test_AwaitExpression() async {
+  Future<void> test_AwaitExpression() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -507,7 +508,7 @@
     assertNotSuggested('Object');
   }
 
-  test_BinaryExpression_LHS() async {
+  Future<void> test_BinaryExpression_LHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = ^ + 2;}');
@@ -520,7 +521,7 @@
     assertNotSuggested('b');
   }
 
-  test_BinaryExpression_RHS() async {
+  Future<void> test_BinaryExpression_RHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = 2 + ^;}');
@@ -534,7 +535,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block() async {
+  Future<void> test_Block() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
@@ -632,7 +633,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final() async {
+  Future<void> test_Block_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
@@ -731,21 +732,21 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final2() async {
+  Future<void> test_Block_final2() async {
     addTestSource('main() {final S^ v;}');
     await computeSuggestions();
 
     assertNotSuggested('String');
   }
 
-  test_Block_final3() async {
+  Future<void> test_Block_final3() async {
     addTestSource('main() {final ^ v;}');
     await computeSuggestions();
 
     assertNotSuggested('String');
   }
 
-  test_Block_final_final() async {
+  Future<void> test_Block_final_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
@@ -844,7 +845,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final_var() async {
+  Future<void> test_Block_final_var() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
@@ -943,7 +944,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_identifier_partial() async {
+  Future<void> test_Block_identifier_partial() async {
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
 class A {int x;}
@@ -1026,7 +1027,7 @@
     assertNotSuggested('HtmlElement');
   }
 
-  test_Block_inherited_imported() async {
+  Future<void> test_Block_inherited_imported() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -1057,7 +1058,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block_inherited_local() async {
+  Future<void> test_Block_inherited_local() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addTestSource('''
 class F { var f1; f2() { } get f3 => 0; set f4(fx) { } }
@@ -1081,7 +1082,7 @@
     assertNotSuggested('m2');
   }
 
-  test_Block_local_function() async {
+  Future<void> test_Block_local_function() async {
     addSource('/testAB.dart', '''
 export "dart:math" hide max;
 class A {int x;}
@@ -1132,7 +1133,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_unimported() async {
+  Future<void> test_Block_unimported() async {
     addPackageFile('aaa', 'a.dart', 'class A {}');
     addTestSource('main() { ^ }');
 
@@ -1145,7 +1146,7 @@
     assertNotSuggested('Future');
   }
 
-  test_CascadeExpression_selector1() async {
+  Future<void> test_CascadeExpression_selector1() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1170,7 +1171,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2() async {
+  Future<void> test_CascadeExpression_selector2() async {
     // SimpleIdentifier  PropertyAccess  CascadeExpression  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1193,7 +1194,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2_withTrailingReturn() async {
+  Future<void> test_CascadeExpression_selector2_withTrailingReturn() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1216,7 +1217,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_target() async {
+  Future<void> test_CascadeExpression_target() async {
     // SimpleIdentifier  CascadeExpression  ExpressionStatement
     addTestSource('''
 class A {var b; X _c;}
@@ -1241,7 +1242,7 @@
     assertNotSuggested('==');
   }
 
-  test_CatchClause_onType() async {
+  Future<void> test_CatchClause_onType() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^ {}}}');
     await computeSuggestions();
@@ -1254,7 +1255,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_onType_noBrackets() async {
+  Future<void> test_CatchClause_onType_noBrackets() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^}}');
     await computeSuggestions();
@@ -1266,7 +1267,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_typed() async {
+  Future<void> test_CatchClause_typed() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on E catch (e) {^}}}');
     await computeSuggestions();
@@ -1279,7 +1280,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_untyped() async {
+  Future<void> test_CatchClause_untyped() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} catch (e, s) {^}}}');
     await computeSuggestions();
@@ -1293,7 +1294,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body() async {
+  Future<void> test_ClassDeclaration_body() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1314,7 +1315,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final() async {
+  Future<void> test_ClassDeclaration_body_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1335,7 +1336,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field() async {
+  Future<void> test_ClassDeclaration_body_final_field() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1356,7 +1357,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field2() async {
+  Future<void> test_ClassDeclaration_body_final_field2() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1377,7 +1378,7 @@
     assertNotSuggested('Soo');
   }
 
-  test_ClassDeclaration_body_final_final() async {
+  Future<void> test_ClassDeclaration_body_final_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1398,7 +1399,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_var() async {
+  Future<void> test_ClassDeclaration_body_final_var() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1419,7 +1420,7 @@
     assertNotSuggested('x');
   }
 
-  test_Combinator_hide() async {
+  Future<void> test_Combinator_hide() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/testAB.dart', '''
 library libAB;
@@ -1443,7 +1444,7 @@
     assertNoSuggestions();
   }
 
-  test_Combinator_show() async {
+  Future<void> test_Combinator_show() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/testAB.dart', '''
 library libAB;
@@ -1469,7 +1470,7 @@
     assertNoSuggestions();
   }
 
-  test_ConditionalExpression_elseExpression() async {
+  Future<void> test_ConditionalExpression_elseExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1489,7 +1490,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_elseExpression_empty() async {
+  Future<void> test_ConditionalExpression_elseExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1519,7 +1520,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_partial_thenExpression() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1539,7 +1540,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_partial_thenExpression_empty() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1569,7 +1570,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_thenExpression() async {
+  Future<void> test_ConditionalExpression_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1589,42 +1590,43 @@
     //assertNotSuggested('T1');
   }
 
-  test_constructor_parameters_mixed_required_and_named() async {
+  Future<void> test_constructor_parameters_mixed_required_and_named() async {
     addTestSource('class A {A(x, {int y}) {^}}');
     await computeSuggestions();
     assertNotSuggested('x');
     assertNotSuggested('y');
   }
 
-  test_constructor_parameters_mixed_required_and_positional() async {
+  Future<void>
+      test_constructor_parameters_mixed_required_and_positional() async {
     addTestSource('class A {A(x, [int y]) {^}}');
     await computeSuggestions();
     assertNotSuggested('x');
     assertNotSuggested('y');
   }
 
-  test_constructor_parameters_named() async {
+  Future<void> test_constructor_parameters_named() async {
     addTestSource('class A {A({x, int y}) {^}}');
     await computeSuggestions();
     assertNotSuggested('x');
     assertNotSuggested('y');
   }
 
-  test_constructor_parameters_positional() async {
+  Future<void> test_constructor_parameters_positional() async {
     addTestSource('class A {A([x, int y]) {^}}');
     await computeSuggestions();
     assertNotSuggested('x');
     assertNotSuggested('y');
   }
 
-  test_constructor_parameters_required() async {
+  Future<void> test_constructor_parameters_required() async {
     addTestSource('class A {A(x, int y) {^}}');
     await computeSuggestions();
     assertNotSuggested('x');
     assertNotSuggested('y');
   }
 
-  test_ConstructorName_importedClass() async {
+  Future<void> test_ConstructorName_importedClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -1649,7 +1651,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory() async {
+  Future<void> test_ConstructorName_importedFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -1674,7 +1676,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory2() async {
+  Future<void> test_ConstructorName_importedFactory2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1692,7 +1694,7 @@
     assertNotSuggested('String');
   }
 
-  test_ConstructorName_localClass() async {
+  Future<void> test_ConstructorName_localClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1713,7 +1715,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_localFactory() async {
+  Future<void> test_ConstructorName_localFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1734,7 +1736,7 @@
     assertNotSuggested('m');
   }
 
-  test_DefaultFormalParameter_named_expression() async {
+  Future<void> test_DefaultFormalParameter_named_expression() async {
     // DefaultFormalParameter FormalParameterList MethodDeclaration
     addTestSource('''
 foo() { }
@@ -1756,7 +1758,7 @@
     assertNotSuggested('bar');
   }
 
-  test_enum() async {
+  Future<void> test_enum() async {
     addTestSource('enum E { one, two } main() {^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1764,7 +1766,7 @@
     assertNotSuggested('two');
   }
 
-  test_enum_deprecated() async {
+  Future<void> test_enum_deprecated() async {
     addTestSource('@deprecated enum E { one, two } main() {^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1772,7 +1774,7 @@
     assertNotSuggested('two');
   }
 
-  test_ExpressionStatement_identifier() async {
+  Future<void> test_ExpressionStatement_identifier() async {
     // SimpleIdentifier  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 _B F1() { }
@@ -1802,7 +1804,7 @@
     assertNotSuggested('_B');
   }
 
-  test_ExpressionStatement_name() async {
+  Future<void> test_ExpressionStatement_name() async {
     // ExpressionStatement  Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/a.dart', '''
         B T1;
@@ -1815,7 +1817,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldDeclaration_name_typed() async {
+  Future<void> test_FieldDeclaration_name_typed() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -1827,7 +1829,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldDeclaration_name_var() async {
+  Future<void> test_FieldDeclaration_name_var() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -1839,7 +1841,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldFormalParameter_in_non_constructor() async {
+  Future<void> test_FieldFormalParameter_in_non_constructor() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('class A {B(this.^foo) {}}');
     await computeSuggestions();
@@ -1849,7 +1851,7 @@
     assertNoSuggestions();
   }
 
-  test_ForEachStatement_body_typed() async {
+  Future<void> test_ForEachStatement_body_typed() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (int foo in bar) {^}}');
     await computeSuggestions();
@@ -1861,7 +1863,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_body_untyped() async {
+  Future<void> test_ForEachStatement_body_untyped() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (foo in bar) {^}}');
     await computeSuggestions();
@@ -1873,7 +1875,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_iterable() async {
+  Future<void> test_ForEachStatement_iterable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (int foo in ^) {}}');
     await computeSuggestions();
@@ -1884,7 +1886,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_loopVariable() async {
+  Future<void> test_ForEachStatement_loopVariable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ in args) {}}');
     await computeSuggestions();
@@ -1895,7 +1897,7 @@
     assertNotSuggested('String');
   }
 
-  test_ForEachStatement_loopVariable_type() async {
+  Future<void> test_ForEachStatement_loopVariable_type() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ foo in args) {}}');
     await computeSuggestions();
@@ -1907,7 +1909,7 @@
     assertNotSuggested('String');
   }
 
-  test_ForEachStatement_loopVariable_type2() async {
+  Future<void> test_ForEachStatement_loopVariable_type2() async {
     // DeclaredIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (S^ foo in args) {}}');
     await computeSuggestions();
@@ -1919,7 +1921,7 @@
     assertNotSuggested('String');
   }
 
-  test_FormalParameterList() async {
+  Future<void> test_FormalParameterList() async {
     // FormalParameterList MethodDeclaration
     addTestSource('''
 foo() { }
@@ -1937,7 +1939,7 @@
     assertNotSuggested('bar');
   }
 
-  test_ForStatement_body() async {
+  Future<void> test_ForStatement_body() async {
     // Block  ForStatement
     addTestSource('main(args) {for (int i; i < 10; ++i) {^}}');
     await computeSuggestions();
@@ -1948,7 +1950,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForStatement_condition() async {
+  Future<void> test_ForStatement_condition() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; i^)}');
     await computeSuggestions();
@@ -1958,7 +1960,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForStatement_initializer() async {
+  Future<void> test_ForStatement_initializer() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {List a; for (^)}');
     await computeSuggestions();
@@ -1970,7 +1972,7 @@
     assertNotSuggested('int');
   }
 
-  test_ForStatement_updaters() async {
+  Future<void> test_ForStatement_updaters() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; index < 10; i^)}');
     await computeSuggestions();
@@ -1980,7 +1982,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForStatement_updaters_prefix_expression() async {
+  Future<void> test_ForStatement_updaters_prefix_expression() async {
     // SimpleIdentifier  PrefixExpression  ForStatement
     addTestSource('''
 void bar() { }
@@ -1994,7 +1996,7 @@
     assertNotSuggested('bar');
   }
 
-  test_function_parameters_mixed_required_and_named() async {
+  Future<void> test_function_parameters_mixed_required_and_named() async {
     addTestSource('''
 void m(x, {int y}) {}
 class B extends A {
@@ -2005,7 +2007,7 @@
     assertNotSuggested('m');
   }
 
-  test_function_parameters_mixed_required_and_positional() async {
+  Future<void> test_function_parameters_mixed_required_and_positional() async {
     addTestSource('''
 void m(x, [int y]) {}
 class B extends A {
@@ -2016,7 +2018,7 @@
     assertNotSuggested('m');
   }
 
-  test_function_parameters_named() async {
+  Future<void> test_function_parameters_named() async {
     addTestSource('''
 void m({x, int y}) {}
 class B extends A {
@@ -2027,7 +2029,7 @@
     assertNotSuggested('m');
   }
 
-  test_function_parameters_none() async {
+  Future<void> test_function_parameters_none() async {
     addTestSource('''
 void m() {}
 class B extends A {
@@ -2038,7 +2040,7 @@
     assertNotSuggested('m');
   }
 
-  test_function_parameters_positional() async {
+  Future<void> test_function_parameters_positional() async {
     addTestSource('''
 void m([x, int y]) {}
 class B extends A {
@@ -2049,7 +2051,7 @@
     assertNotSuggested('m');
   }
 
-  test_function_parameters_required() async {
+  Future<void> test_function_parameters_required() async {
     addTestSource('''
 void m(x, int y) {}
 class B extends A {
@@ -2060,7 +2062,7 @@
     assertNotSuggested('m');
   }
 
-  test_FunctionDeclaration_returnType_afterComment() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2090,7 +2092,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment2() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment2() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2120,7 +2122,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment3() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment3() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2151,7 +2153,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionExpression_body_function() async {
+  Future<void> test_FunctionExpression_body_function() async {
     // Block  BlockFunctionBody  FunctionExpression
     addTestSource('''
         void bar() { }
@@ -2167,7 +2169,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IfStatement() async {
+  Future<void> test_IfStatement() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (true) ^}}''');
@@ -2186,7 +2188,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_condition() async {
+  Future<void> test_IfStatement_condition() async {
     // SimpleIdentifier  IfStatement  Block  BlockFunctionBody
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -2205,7 +2207,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IfStatement_empty() async {
+  Future<void> test_IfStatement_empty() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (^) something}}''');
@@ -2224,7 +2226,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_invocation() async {
+  Future<void> test_IfStatement_invocation() async {
     // SimpleIdentifier  PrefixIdentifier  IfStatement
     addTestSource('''
 main() {var a; if (a.^) something}''');
@@ -2238,14 +2240,14 @@
     assertNotSuggested('==');
   }
 
-  test_ignore_symbol_being_completed() async {
+  Future<void> test_ignore_symbol_being_completed() async {
     addTestSource('class MyClass { } main(MC^) { }');
     await computeSuggestions();
     assertNotSuggested('MyClass');
     assertNotSuggested('MC');
   }
 
-  test_ImportDirective_dart() async {
+  Future<void> test_ImportDirective_dart() async {
     // SimpleStringLiteral  ImportDirective
     addTestSource('''
 import "dart^";
@@ -2255,7 +2257,7 @@
     assertNoSuggestions();
   }
 
-  test_inDartDoc_reference1() async {
+  Future<void> test_inDartDoc_reference1() async {
     addTestSource('''
 /// The [^
 main(aaa, bbb) {}''');
@@ -2263,7 +2265,7 @@
     assertNotSuggested('main');
   }
 
-  test_inDartDoc_reference2() async {
+  Future<void> test_inDartDoc_reference2() async {
     addTestSource('''
 /// The [m^
 main(aaa, bbb) {}''');
@@ -2271,7 +2273,7 @@
     assertNotSuggested('main');
   }
 
-  test_inDartDoc_reference3() async {
+  Future<void> test_inDartDoc_reference3() async {
     addTestSource('''
 /// The [^]
 main(aaa, bbb) {}''');
@@ -2279,7 +2281,7 @@
     assertNotSuggested('main');
   }
 
-  test_inDartDoc_reference4() async {
+  Future<void> test_inDartDoc_reference4() async {
     addTestSource('''
 /// The [m^]
 main(aaa, bbb) {}''');
@@ -2287,7 +2289,7 @@
     assertNotSuggested('main');
   }
 
-  test_IndexExpression() async {
+  Future<void> test_IndexExpression() async {
     // ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2317,7 +2319,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_IndexExpression2() async {
+  Future<void> test_IndexExpression2() async {
     // SimpleIdentifier IndexExpression ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2337,7 +2339,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_InstanceCreationExpression() async {
+  Future<void> test_InstanceCreationExpression() async {
     addTestSource('''
 class A {foo(){var f; {var x;}}}
 class B {B(this.x, [String boo]) { } int x;}
@@ -2380,7 +2382,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_InstanceCreationExpression_abstractClass() async {
+  Future<void> test_InstanceCreationExpression_abstractClass() async {
     addTestSource('''
 abstract class A {
   A();
@@ -2398,7 +2400,8 @@
     assertSuggestConstructor('A.factory');
   }
 
-  test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
+  Future<void>
+      test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
     addTestSource('''
 abstract class A {}
 
@@ -2410,7 +2413,8 @@
     assertNotSuggested('A');
   }
 
-  test_InstanceCreationExpression_assignment_expression_filter() async {
+  Future<void>
+      test_InstanceCreationExpression_assignment_expression_filter() async {
     addTestSource('''
 class A {} class B extends A {} class C implements A {} class D {}
 main() {
@@ -2431,7 +2435,8 @@
     assertSuggestConstructor('D', elemOffset: -1);
   }
 
-  test_InstanceCreationExpression_assignment_expression_filter2() async {
+  Future<void>
+      test_InstanceCreationExpression_assignment_expression_filter2() async {
     addTestSource('''
 class A {} class B extends A {} class C implements A {} class D {}
 main() {
@@ -2452,7 +2457,7 @@
     assertSuggestConstructor('D', elemOffset: -1);
   }
 
-  test_InstanceCreationExpression_imported() async {
+  Future<void> test_InstanceCreationExpression_imported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2483,7 +2488,7 @@
     assertNotSuggested('T2');
   }
 
-  test_InstanceCreationExpression_invocationArgument() async {
+  Future<void> test_InstanceCreationExpression_invocationArgument() async {
     addTestSource('''
 class A {} class B extends A {} class C {}
 void foo(A a) {}
@@ -2501,7 +2506,8 @@
     assertSuggestConstructor('C', elemOffset: -1);
   }
 
-  test_InstanceCreationExpression_invocationArgument_named() async {
+  Future<void>
+      test_InstanceCreationExpression_invocationArgument_named() async {
     addTestSource('''
 class A {} class B extends A {} class C {}
 void foo({A a}) {}
@@ -2519,7 +2525,7 @@
     assertSuggestConstructor('C', elemOffset: -1);
   }
 
-  test_InstanceCreationExpression_unimported() async {
+  Future<void> test_InstanceCreationExpression_unimported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/testAB.dart', 'class Foo { }');
     addTestSource('class C {foo(){new F^}}');
@@ -2531,7 +2537,8 @@
     assertNotSuggested('Foo');
   }
 
-  test_InstanceCreationExpression_variable_declaration_filter() async {
+  Future<void>
+      test_InstanceCreationExpression_variable_declaration_filter() async {
     addTestSource('''
 class A {} class B extends A {} class C implements A {} class D {}
 main() {
@@ -2551,7 +2558,8 @@
     assertSuggestConstructor('D', elemOffset: -1);
   }
 
-  test_InstanceCreationExpression_variable_declaration_filter2() async {
+  Future<void>
+      test_InstanceCreationExpression_variable_declaration_filter2() async {
     addTestSource('''
 class A {} class B extends A {} class C implements A {} class D {}
 main() {
@@ -2571,7 +2579,7 @@
     assertSuggestConstructor('D', elemOffset: -1);
   }
 
-  test_InterpolationExpression() async {
+  Future<void> test_InterpolationExpression() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2605,7 +2613,7 @@
     assertNotSuggested('name');
   }
 
-  test_InterpolationExpression_block() async {
+  Future<void> test_InterpolationExpression_block() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2639,7 +2647,7 @@
     assertNotSuggested('name');
   }
 
-  test_InterpolationExpression_block2() async {
+  Future<void> test_InterpolationExpression_block2() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addTestSource('main() {String name; print("hello \${n^}");}');
     await computeSuggestions();
@@ -2649,7 +2657,7 @@
     //assertNotSuggested('Object');
   }
 
-  test_InterpolationExpression_prefix_selector() async {
+  Future<void> test_InterpolationExpression_prefix_selector() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${name.^}");}');
     await computeSuggestions();
@@ -2662,7 +2670,7 @@
     assertNotSuggested('==');
   }
 
-  test_InterpolationExpression_prefix_selector2() async {
+  Future<void> test_InterpolationExpression_prefix_selector2() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \$name.^");}');
     await computeSuggestions();
@@ -2670,7 +2678,7 @@
     assertNoSuggestions();
   }
 
-  test_InterpolationExpression_prefix_target() async {
+  Future<void> test_InterpolationExpression_prefix_target() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${nam^e.length}");}');
     await computeSuggestions();
@@ -2681,7 +2689,7 @@
     assertNotSuggested('length');
   }
 
-  test_IsExpression() async {
+  Future<void> test_IsExpression() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -2702,7 +2710,7 @@
     assertNotSuggested('foo');
   }
 
-  test_IsExpression_target() async {
+  Future<void> test_IsExpression_target() async {
     // IfStatement  Block  BlockFunctionBody
     addTestSource('''
 foo() { }
@@ -2725,7 +2733,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type() async {
+  Future<void> test_IsExpression_type() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -2740,7 +2748,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type_partial() async {
+  Future<void> test_IsExpression_type_partial() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -2755,7 +2763,7 @@
     assertNotSuggested('Object');
   }
 
-  test_keyword() async {
+  Future<void> test_keyword() async {
     addSource('/home/test/lib/b.dart', '''
 lib B;
 int newT1;
@@ -2782,7 +2790,7 @@
     assertNotSuggested('newer');
   }
 
-  test_Literal_list() async {
+  Future<void> test_Literal_list() async {
     // ']'  ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([^]);}');
     await computeSuggestions();
@@ -2791,7 +2799,7 @@
     assertNotSuggested('String');
   }
 
-  test_Literal_list2() async {
+  Future<void> test_Literal_list2() async {
     // SimpleIdentifier ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([S^]);}');
     await computeSuggestions();
@@ -2800,7 +2808,7 @@
     assertNotSuggested('String');
   }
 
-  test_Literal_string() async {
+  Future<void> test_Literal_string() async {
     // SimpleStringLiteral  ExpressionStatement  Block
     addTestSource('class A {a() {"hel^lo"}}');
     await computeSuggestions();
@@ -2808,7 +2816,7 @@
     assertNoSuggestions();
   }
 
-  test_localVariableDeclarationName() async {
+  Future<void> test_localVariableDeclarationName() async {
     addTestSource('main() {String m^}');
     await computeSuggestions();
 
@@ -2816,7 +2824,7 @@
     assertNotSuggested('min');
   }
 
-  test_MapLiteralEntry() async {
+  Future<void> test_MapLiteralEntry() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2849,7 +2857,7 @@
     }
   }
 
-  test_MapLiteralEntry1() async {
+  Future<void> test_MapLiteralEntry1() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2871,7 +2879,7 @@
     assertNotSuggested('T2');
   }
 
-  test_MapLiteralEntry2() async {
+  Future<void> test_MapLiteralEntry2() async {
     // SimpleIdentifier  MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2893,7 +2901,7 @@
     assertNotSuggested('T2');
   }
 
-  test_method_parameters_mixed_required_and_named() async {
+  Future<void> test_method_parameters_mixed_required_and_named() async {
     addTestSource('''
 class A {
   void m(x, {int y}) {}
@@ -2906,7 +2914,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_mixed_required_and_positional() async {
+  Future<void> test_method_parameters_mixed_required_and_positional() async {
     addTestSource('''
 class A {
   void m(x, [int y]) {}
@@ -2919,7 +2927,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_named() async {
+  Future<void> test_method_parameters_named() async {
     addTestSource('''
 class A {
   void m({x, int y}) {}
@@ -2932,7 +2940,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_none() async {
+  Future<void> test_method_parameters_none() async {
     addTestSource('''
 class A {
   void m() {}
@@ -2945,7 +2953,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_positional() async {
+  Future<void> test_method_parameters_positional() async {
     addTestSource('''
 class A {
   void m([x, int y]) {}
@@ -2958,7 +2966,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_required() async {
+  Future<void> test_method_parameters_required() async {
     addTestSource('''
 class A {
   void m(x, int y) {}
@@ -2971,7 +2979,7 @@
     assertNotSuggested('m');
   }
 
-  test_MethodDeclaration_body_getters() async {
+  Future<void> test_MethodDeclaration_body_getters() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}');
     await computeSuggestions();
@@ -2983,7 +2991,7 @@
     assertNotSuggested('_g');
   }
 
-  test_MethodDeclaration_body_static() async {
+  Future<void> test_MethodDeclaration_body_static() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testC.dart', '''
 class C {
@@ -3020,7 +3028,7 @@
     assertNotSuggested('c4');
   }
 
-  test_MethodDeclaration_members() async {
+  Future<void> test_MethodDeclaration_members() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}');
     await computeSuggestions();
@@ -3034,7 +3042,7 @@
     assertNotSuggested('bool');
   }
 
-  test_MethodDeclaration_parameters_named() async {
+  Future<void> test_MethodDeclaration_parameters_named() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated Z a(X x, _, b, {y: boo}) {^}}');
     await computeSuggestions();
@@ -3049,7 +3057,7 @@
     assertNotSuggested('_');
   }
 
-  test_MethodDeclaration_parameters_positional() async {
+  Future<void> test_MethodDeclaration_parameters_positional() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('''
 foo() { }
@@ -3067,7 +3075,7 @@
     assertNotSuggested('String');
   }
 
-  test_MethodDeclaration_returnType() async {
+  Future<void> test_MethodDeclaration_returnType() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3096,7 +3104,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3125,7 +3133,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment2() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment2() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3154,7 +3162,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment3() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment3() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3185,7 +3193,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodInvocation_no_semicolon() async {
+  Future<void> test_MethodInvocation_no_semicolon() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
 main() { }
@@ -3218,22 +3226,22 @@
     assertNotSuggested('==');
   }
 
-  test_missing_params_constructor() async {
+  Future<void> test_missing_params_constructor() async {
     addTestSource('class C1{C1{} main(){C^}}');
     await computeSuggestions();
   }
 
-  test_missing_params_function() async {
+  Future<void> test_missing_params_function() async {
     addTestSource('int f1{} main(){f^}');
     await computeSuggestions();
   }
 
-  test_missing_params_method() async {
+  Future<void> test_missing_params_method() async {
     addTestSource('class C1{int f1{} main(){f^}}');
     await computeSuggestions();
   }
 
-  test_new_instance() async {
+  Future<void> test_new_instance() async {
     addTestSource('import "dart:math"; class A {x() {new Random().^}}');
     await computeSuggestions();
 
@@ -3245,7 +3253,7 @@
     assertNotSuggested('A');
   }
 
-  test_overrides() async {
+  Future<void> test_overrides() async {
     addTestSource('''
 class A {m() {}}
 class B extends A {m() {^}}
@@ -3254,7 +3262,7 @@
     assertNotSuggested('m');
   }
 
-  test_parameterName_excludeTypes() async {
+  Future<void> test_parameterName_excludeTypes() async {
     addTestSource('m(int ^) {}');
     await computeSuggestions();
 
@@ -3262,7 +3270,7 @@
     assertNotSuggested('bool');
   }
 
-  test_partFile_TypeName() async {
+  Future<void> test_partFile_TypeName() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3295,7 +3303,7 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_TypeName2() async {
+  Future<void> test_partFile_TypeName2() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3328,7 +3336,7 @@
     assertNotSuggested('m');
   }
 
-  test_PrefixedIdentifier_class_const() async {
+  Future<void> test_PrefixedIdentifier_class_const() async {
     // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3375,7 +3383,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_imported() async {
+  Future<void> test_PrefixedIdentifier_class_imported() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3412,7 +3420,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_local() async {
+  Future<void> test_PrefixedIdentifier_class_local() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 main() {A a; a.^}
@@ -3446,7 +3454,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_getter() async {
+  Future<void> test_PrefixedIdentifier_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^}');
     await computeSuggestions();
@@ -3454,7 +3462,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_library() async {
+  Future<void> test_PrefixedIdentifier_library() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3481,7 +3489,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3508,7 +3516,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly2() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3535,7 +3543,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_parameter() async {
+  Future<void> test_PrefixedIdentifier_parameter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3554,7 +3562,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_prefix() async {
+  Future<void> test_PrefixedIdentifier_prefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
 class A {static int bar = 10;}
@@ -3577,7 +3585,7 @@
     assertNotSuggested('_B');
   }
 
-  test_PrefixedIdentifier_propertyAccess() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^}');
     await computeSuggestions();
@@ -3588,7 +3596,7 @@
     assertNotSuggested('compareTo');
   }
 
-  test_PrefixedIdentifier_propertyAccess_newStmt() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess_newStmt() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^ int y = 0;}');
     await computeSuggestions();
@@ -3599,7 +3607,7 @@
     assertNotSuggested('compareTo');
   }
 
-  test_PrefixedIdentifier_trailingStmt_const() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_const() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('const String g = "hello"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3607,7 +3615,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_field() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_field() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g; f() {g.^ int y = 0;}}');
     await computeSuggestions();
@@ -3615,7 +3623,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_function() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_function() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g() => "one"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3623,7 +3631,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('typedef String g(); f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3631,7 +3639,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_getter() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3639,7 +3647,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_typed() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_typed() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {String g; g.^ int y = 0;}');
     await computeSuggestions();
@@ -3647,7 +3655,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_untyped() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_untyped() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {var g = "hello"; g.^ int y = 0;}');
     await computeSuggestions();
@@ -3655,7 +3663,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_method() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_method() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g() {}; f() {g.^ int y = 0;}}');
     await computeSuggestions();
@@ -3663,7 +3671,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {f(String g) {g.^ int y = 0;}}');
     await computeSuggestions();
@@ -3671,7 +3679,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param2() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param2() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f(String g) {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3679,7 +3687,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3687,28 +3695,28 @@
     assertNotSuggested('length');
   }
 
-  test_prioritization() async {
+  Future<void> test_prioritization() async {
     addTestSource('main() {var ab; var _ab; ^}');
     await computeSuggestions();
     assertNotSuggested('ab');
     assertNotSuggested('_ab');
   }
 
-  test_prioritization_private() async {
+  Future<void> test_prioritization_private() async {
     addTestSource('main() {var ab; var _ab; _^}');
     await computeSuggestions();
     assertNotSuggested('ab');
     assertNotSuggested('_ab');
   }
 
-  test_prioritization_public() async {
+  Future<void> test_prioritization_public() async {
     addTestSource('main() {var ab; var _ab; a^}');
     await computeSuggestions();
     assertNotSuggested('ab');
     assertNotSuggested('_ab');
   }
 
-  test_PropertyAccess_expression() async {
+  Future<void> test_PropertyAccess_expression() async {
     // SimpleIdentifier  MethodInvocation  PropertyAccess  ExpressionStatement
     addTestSource('class A {a() {"hello".to^String().length}}');
     await computeSuggestions();
@@ -3722,7 +3730,7 @@
     assertNotSuggested('==');
   }
 
-  test_PropertyAccess_noTarget() async {
+  Future<void> test_PropertyAccess_noTarget() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/testAB.dart', 'class Foo { }');
     addTestSource('class C {foo(){.^}}');
@@ -3731,7 +3739,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_noTarget2() async {
+  Future<void> test_PropertyAccess_noTarget2() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/testAB.dart', 'class Foo { }');
     addTestSource('main() {.^}');
@@ -3740,7 +3748,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_selector() async {
+  Future<void> test_PropertyAccess_selector() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement  Block
     addTestSource('class A {a() {"hello".length.^}}');
     await computeSuggestions();
@@ -3754,13 +3762,13 @@
     assertNotSuggested('==');
   }
 
-  test_shadowed_name() async {
+  Future<void> test_shadowed_name() async {
     addTestSource('var a; class A { var a; m() { ^ } }');
     await computeSuggestions();
     assertNotSuggested('a');
   }
 
-  test_SwitchStatement_c() async {
+  Future<void> test_SwitchStatement_c() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {c^}}}');
     await computeSuggestions();
@@ -3768,7 +3776,7 @@
     assertNoSuggestions();
   }
 
-  test_SwitchStatement_case() async {
+  Future<void> test_SwitchStatement_case() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {var t; switch(x) {case 0: ^}}}');
     await computeSuggestions();
@@ -3783,7 +3791,7 @@
     assertNotSuggested('String');
   }
 
-  test_SwitchStatement_empty() async {
+  Future<void> test_SwitchStatement_empty() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {^}}}');
     await computeSuggestions();
@@ -3791,7 +3799,7 @@
     assertNoSuggestions();
   }
 
-  test_ThisExpression_block() async {
+  Future<void> test_ThisExpression_block() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
 main() { }
@@ -3827,7 +3835,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor() async {
+  Future<void> test_ThisExpression_constructor() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
 main() { }
@@ -3863,7 +3871,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param() async {
+  Future<void> test_ThisExpression_constructor_param() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -3901,7 +3909,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param2() async {
+  Future<void> test_ThisExpression_constructor_param2() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -3938,7 +3946,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param3() async {
+  Future<void> test_ThisExpression_constructor_param3() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -3975,7 +3983,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param4() async {
+  Future<void> test_ThisExpression_constructor_param4() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -4012,7 +4020,7 @@
     assertNotSuggested('==');
   }
 
-  test_TopLevelVariableDeclaration_typed_name() async {
+  Future<void> test_TopLevelVariableDeclaration_typed_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} B ^');
@@ -4021,7 +4029,7 @@
     assertNoSuggestions();
   }
 
-  test_TopLevelVariableDeclaration_untyped_name() async {
+  Future<void> test_TopLevelVariableDeclaration_untyped_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} var ^');
@@ -4030,7 +4038,7 @@
     assertNoSuggestions();
   }
 
-  test_TypeArgumentList() async {
+  Future<void> test_TypeArgumentList() async {
     // SimpleIdentifier  BinaryExpression  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
 class C1 {int x;}
@@ -4056,7 +4064,7 @@
     assertNotSuggested('F2');
   }
 
-  test_TypeArgumentList2() async {
+  Future<void> test_TypeArgumentList2() async {
     // TypeName  TypeArgumentList  TypeName
     addSource('/home/test/lib/a.dart', '''
 class C1 {int x;}
@@ -4077,7 +4085,7 @@
     assertNotSuggested('C2');
   }
 
-  test_VariableDeclaration_name() async {
+  Future<void> test_VariableDeclaration_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addSource('/home/test/lib/b.dart', '''
@@ -4094,7 +4102,7 @@
     assertNoSuggestions();
   }
 
-  test_VariableDeclarationList_final() async {
+  Future<void> test_VariableDeclarationList_final() async {
     // VariableDeclarationList  VariableDeclarationStatement  Block
     addTestSource('main() {final ^} class C { }');
     await computeSuggestions();
@@ -4104,7 +4112,7 @@
     assertNotSuggested('==');
   }
 
-  test_VariableDeclarationStatement_RHS() async {
+  Future<void> test_VariableDeclarationStatement_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
@@ -4133,7 +4141,7 @@
     assertNotSuggested('e');
   }
 
-  test_VariableDeclarationStatement_RHS_missing_semicolon() async {
+  Future<void> test_VariableDeclarationStatement_RHS_missing_semicolon() async {
     // VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
diff --git a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
index 4b1d3aa..f1b60ed 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalLibraryContributorTest);
     defineReflectiveTests(LocalLibraryContributorWithExtensionMethodsTest);
@@ -24,7 +24,7 @@
     return LocalLibraryContributor();
   }
 
-  test_partFile_Constructor() async {
+  Future<void> test_partFile_Constructor() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -58,7 +58,7 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_Constructor2() async {
+  Future<void> test_partFile_Constructor2() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -92,7 +92,8 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_InstanceCreationExpression_assignment_filter() async {
+  Future<void>
+      test_partFile_InstanceCreationExpression_assignment_filter() async {
     // ConstructorName  InstanceCreationExpression  VariableDeclarationList
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -144,7 +145,8 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_InstanceCreationExpression_variable_declaration_filter() async {
+  Future<void>
+      test_partFile_InstanceCreationExpression_variable_declaration_filter() async {
     // ConstructorName  InstanceCreationExpression  VariableDeclarationList
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -194,7 +196,7 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_TypeName() async {
+  Future<void> test_partFile_TypeName() async {
     addSource('/home/test/lib/b.dart', '''
         lib B;
         int T1;
@@ -239,7 +241,7 @@
     assertNotSuggested('z');
   }
 
-  test_partFile_TypeName2() async {
+  Future<void> test_partFile_TypeName2() async {
     addSource('/home/test/lib/b.dart', '''
         lib B;
         int T1;
@@ -296,7 +298,7 @@
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
   }
 
-  test_partFile_extension() async {
+  Future<void> test_partFile_extension() async {
     addSource('/home/test/lib/a.dart', '''
 part of libA;
 extension E on int {}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index cb7fffc..e03c3c7 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -11,7 +11,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalReferenceContributorTest);
     defineReflectiveTests(LocalReferenceContributorWithExtensionMethodsTest);
@@ -77,7 +77,7 @@
     return LocalReferenceContributor();
   }
 
-  test_ArgDefaults_function() async {
+  Future<void> test_ArgDefaults_function() async {
     addTestSource('''
 bool hasLength(int a, bool b) => false;
 void main() {h^}''');
@@ -89,7 +89,7 @@
         defaultArgumentListTextRanges: [0, 1, 3, 1]);
   }
 
-  test_ArgDefaults_function_none() async {
+  Future<void> test_ArgDefaults_function_none() async {
     addTestSource('''
 bool hasLength() => false;
 void main() {h^}''');
@@ -101,7 +101,7 @@
         defaultArgumentListTextRanges: null);
   }
 
-  test_ArgDefaults_function_with_optional_positional() async {
+  Future<void> test_ArgDefaults_function_with_optional_positional() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -116,7 +116,7 @@
         defaultArgumentListTextRanges: [0, 3]);
   }
 
-  test_ArgDefaults_function_with_required_named() async {
+  Future<void> test_ArgDefaults_function_with_required_named() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -131,7 +131,7 @@
         defaultArgumentListTextRanges: [0, 3, 10, 4]);
   }
 
-  test_ArgDefaults_method_with_required_named() async {
+  Future<void> test_ArgDefaults_method_with_required_named() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -150,7 +150,7 @@
         defaultArgumentListTextRanges: [0, 3, 10, 4]);
   }
 
-  test_ArgumentList() async {
+  Future<void> test_ArgumentList() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -176,7 +176,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_imported_function() async {
+  Future<void> test_ArgumentList_imported_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -203,7 +203,8 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_functionalArg() async {
+  Future<void>
+      test_ArgumentList_InstanceCreationExpression_functionalArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -233,7 +234,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_typedefArg() async {
+  Future<void> test_ArgumentList_InstanceCreationExpression_typedefArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -264,7 +265,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_function() async {
+  Future<void> test_ArgumentList_local_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -291,7 +292,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_method() async {
+  Future<void> test_ArgumentList_local_method() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -318,7 +319,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_functionalArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_functionalArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -351,7 +352,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_functionalArg2() async {
+  Future<void> test_ArgumentList_MethodInvocation_functionalArg2() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -386,7 +387,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_methodArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_methodArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 library A;
@@ -412,7 +413,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_namedFieldParam_tear_off() async {
+  Future<void> test_ArgumentList_namedFieldParam_tear_off() async {
     addSource('/home/test/lib/a.dart', '''
 typedef void VoidCallback();
         
@@ -441,7 +442,7 @@
         csKind: CompletionSuggestionKind.IDENTIFIER);
   }
 
-  test_ArgumentList_namedParam() async {
+  Future<void> test_ArgumentList_namedParam() async {
     // SimpleIdentifier  NamedExpression  ArgumentList  MethodInvocation
     // ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
@@ -461,7 +462,7 @@
     assertNotSuggested('main');
   }
 
-  test_ArgumentList_namedParam_filter() async {
+  Future<void> test_ArgumentList_namedParam_filter() async {
     // SimpleIdentifier  NamedExpression  ArgumentList
     // InstanceCreationExpression
     addTestSource('''
@@ -498,7 +499,7 @@
         relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
   }
 
-  test_ArgumentList_namedParam_tear_off() async {
+  Future<void> test_ArgumentList_namedParam_tear_off() async {
     addSource('/home/test/lib/a.dart', '''
 typedef void VoidCallback();
         
@@ -526,7 +527,7 @@
         csKind: CompletionSuggestionKind.IDENTIFIER);
   }
 
-  test_ArgumentList_namedParam_tear_off_1() async {
+  Future<void> test_ArgumentList_namedParam_tear_off_1() async {
     addSource('/home/test/lib/a.dart', '''
 typedef void VoidCallback();
         
@@ -554,7 +555,7 @@
         csKind: CompletionSuggestionKind.IDENTIFIER);
   }
 
-  test_ArgumentList_namedParam_tear_off_2() async {
+  Future<void> test_ArgumentList_namedParam_tear_off_2() async {
     addSource('/home/test/lib/a.dart', '''
 typedef void VoidCallback();
         
@@ -582,7 +583,7 @@
         csKind: CompletionSuggestionKind.IDENTIFIER);
   }
 
-  test_AsExpression_type() async {
+  Future<void> test_AsExpression_type() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
         class A {var b; X _c; foo() {var a; (a as ^).foo();}''');
@@ -597,7 +598,7 @@
     assertNotSuggested('==');
   }
 
-  test_AsExpression_type_filter_extends() async {
+  Future<void> test_AsExpression_type_filter_extends() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
 class A {} class B extends A {} class C extends A {} class D {}
@@ -613,7 +614,7 @@
     assertNotSuggested('Object');
   }
 
-  test_AsExpression_type_filter_implements() async {
+  Future<void> test_AsExpression_type_filter_implements() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
 class A {} class B implements A {} class C implements A {} class D {}
@@ -629,7 +630,7 @@
     assertNotSuggested('Object');
   }
 
-  test_AsExpression_type_filter_undefined_type() async {
+  Future<void> test_AsExpression_type_filter_undefined_type() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
 class A {}
@@ -641,7 +642,7 @@
     assertSuggestClass('A');
   }
 
-  test_AssignmentExpression_name() async {
+  Future<void> test_AssignmentExpression_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int ^b = 1;}');
@@ -650,7 +651,7 @@
     assertNoSuggestions();
   }
 
-  test_AssignmentExpression_RHS() async {
+  Future<void> test_AssignmentExpression_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int b = ^}');
@@ -665,7 +666,7 @@
     assertNotSuggested('Object');
   }
 
-  test_AssignmentExpression_type() async {
+  Future<void> test_AssignmentExpression_type() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -689,7 +690,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_newline() async {
+  Future<void> test_AssignmentExpression_type_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -713,7 +714,7 @@
     assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial() async {
+  Future<void> test_AssignmentExpression_type_partial() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -737,7 +738,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial_newline() async {
+  Future<void> test_AssignmentExpression_type_partial_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -761,7 +762,7 @@
     assertNotSuggested('identical');
   }
 
-  test_AwaitExpression() async {
+  Future<void> test_AwaitExpression() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -777,7 +778,7 @@
     assertNotSuggested('Object');
   }
 
-  test_AwaitExpression2() async {
+  Future<void> test_AwaitExpression2() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     addTestSource('''
         class A {
@@ -795,7 +796,7 @@
     assertNotSuggested('Object');
   }
 
-  test_BinaryExpression_LHS() async {
+  Future<void> test_BinaryExpression_LHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = ^ + 2;}');
@@ -812,7 +813,7 @@
     assertNotSuggested('b');
   }
 
-  test_BinaryExpression_RHS() async {
+  Future<void> test_BinaryExpression_RHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = 2 + ^;}');
@@ -826,7 +827,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block() async {
+  Future<void> test_Block() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
@@ -924,7 +925,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final() async {
+  Future<void> test_Block_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
@@ -1023,21 +1024,21 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final2() async {
+  Future<void> test_Block_final2() async {
     addTestSource('main() {final S^ v;}');
     await computeSuggestions();
 
     assertNotSuggested('String');
   }
 
-  test_Block_final3() async {
+  Future<void> test_Block_final3() async {
     addTestSource('main() {final ^ v;}');
     await computeSuggestions();
 
     assertNotSuggested('String');
   }
 
-  test_Block_final_final() async {
+  Future<void> test_Block_final_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
@@ -1136,7 +1137,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final_var() async {
+  Future<void> test_Block_final_var() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
@@ -1235,7 +1236,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_identifier_partial() async {
+  Future<void> test_Block_identifier_partial() async {
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
 class A {int x;}
@@ -1314,7 +1315,7 @@
     assertNotSuggested('HtmlElement');
   }
 
-  test_Block_inherited_imported() async {
+  Future<void> test_Block_inherited_imported() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     resolveSource('/home/test/lib/b.dart', '''
 lib B;
@@ -1345,7 +1346,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block_inherited_local() async {
+  Future<void> test_Block_inherited_local() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addTestSource('''
 class F { var f1; f2() { } get f3 => 0; set f4(fx) { } }
@@ -1369,7 +1370,7 @@
     assertNotSuggested('m2');
   }
 
-  test_Block_local_function() async {
+  Future<void> test_Block_local_function() async {
     addSource('/home/test/lib/ab.dart', '''
 export "dart:math" hide max;
 class A {int x;}
@@ -1420,7 +1421,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_unimported() async {
+  Future<void> test_Block_unimported() async {
     addPackageFile('aaa', 'a.dart', 'class A {}');
     addTestSource('main() { ^ }');
 
@@ -1433,7 +1434,7 @@
     assertNotSuggested('Future');
   }
 
-  test_CascadeExpression_selector1() async {
+  Future<void> test_CascadeExpression_selector1() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1458,7 +1459,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2() async {
+  Future<void> test_CascadeExpression_selector2() async {
     // SimpleIdentifier  PropertyAccess  CascadeExpression  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1481,7 +1482,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2_withTrailingReturn() async {
+  Future<void> test_CascadeExpression_selector2_withTrailingReturn() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1504,7 +1505,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_target() async {
+  Future<void> test_CascadeExpression_target() async {
     // SimpleIdentifier  CascadeExpression  ExpressionStatement
     addTestSource('''
 class A {var b; X _c;}
@@ -1524,7 +1525,7 @@
     assertNotSuggested('==');
   }
 
-  test_CatchClause_onType() async {
+  Future<void> test_CatchClause_onType() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^ {}}}');
     await computeSuggestions();
@@ -1537,7 +1538,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_onType_noBrackets() async {
+  Future<void> test_CatchClause_onType_noBrackets() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^}}');
     await computeSuggestions();
@@ -1549,7 +1550,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_typed() async {
+  Future<void> test_CatchClause_typed() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on E catch (e) {^}}}');
     await computeSuggestions();
@@ -1562,7 +1563,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_untyped() async {
+  Future<void> test_CatchClause_untyped() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} catch (e, s) {^}}}');
     await computeSuggestions();
@@ -1576,7 +1577,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body() async {
+  Future<void> test_ClassDeclaration_body() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1606,7 +1607,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final() async {
+  Future<void> test_ClassDeclaration_body_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1627,7 +1628,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field() async {
+  Future<void> test_ClassDeclaration_body_final_field() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1648,7 +1649,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field2() async {
+  Future<void> test_ClassDeclaration_body_final_field2() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1669,7 +1670,7 @@
     assertNotSuggested('Soo');
   }
 
-  test_ClassDeclaration_body_final_final() async {
+  Future<void> test_ClassDeclaration_body_final_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1690,7 +1691,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_var() async {
+  Future<void> test_ClassDeclaration_body_final_var() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -1711,7 +1712,7 @@
     assertNotSuggested('x');
   }
 
-  test_classReference_in_comment() async {
+  Future<void> test_classReference_in_comment() async {
     addTestSource(r'''
 class Abc { }
 class Abcd { }
@@ -1726,7 +1727,7 @@
 
   /// see: https://github.com/dart-lang/sdk/issues/36037
   @failingTest
-  test_classReference_in_comment_eof() async {
+  Future<void> test_classReference_in_comment_eof() async {
     addTestSource(r'''
 class Abc { }
 class Abcd { }
@@ -1738,7 +1739,7 @@
     assertNotSuggested('Abcd');
   }
 
-  test_Combinator_hide() async {
+  Future<void> test_Combinator_hide() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/home/test/lib/ab.dart', '''
 library libAB;
@@ -1762,7 +1763,7 @@
     assertNoSuggestions();
   }
 
-  test_Combinator_show() async {
+  Future<void> test_Combinator_show() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/home/test/lib/ab.dart', '''
 library libAB;
@@ -1788,7 +1789,7 @@
     assertNoSuggestions();
   }
 
-  test_ConditionalExpression_elseExpression() async {
+  Future<void> test_ConditionalExpression_elseExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1809,7 +1810,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_elseExpression_empty() async {
+  Future<void> test_ConditionalExpression_elseExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1837,7 +1838,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_partial_thenExpression() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1858,7 +1859,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_partial_thenExpression_empty() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1886,7 +1887,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_ConditionalExpression_thenExpression() async {
+  Future<void> test_ConditionalExpression_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -1907,42 +1908,43 @@
     //assertNotSuggested('T1');
   }
 
-  test_constructor_parameters_mixed_required_and_named() async {
+  Future<void> test_constructor_parameters_mixed_required_and_named() async {
     addTestSource('class A {A(x, {int y}) {^}}');
     await computeSuggestions();
     assertSuggestParameter('x', null);
     assertSuggestParameter('y', 'int');
   }
 
-  test_constructor_parameters_mixed_required_and_positional() async {
+  Future<void>
+      test_constructor_parameters_mixed_required_and_positional() async {
     addTestSource('class A {A(x, [int y]) {^}}');
     await computeSuggestions();
     assertSuggestParameter('x', null);
     assertSuggestParameter('y', 'int');
   }
 
-  test_constructor_parameters_named() async {
+  Future<void> test_constructor_parameters_named() async {
     addTestSource('class A {A({x, int y}) {^}}');
     await computeSuggestions();
     assertSuggestParameter('x', null);
     assertSuggestParameter('y', 'int');
   }
 
-  test_constructor_parameters_positional() async {
+  Future<void> test_constructor_parameters_positional() async {
     addTestSource('class A {A([x, int y]) {^}}');
     await computeSuggestions();
     assertSuggestParameter('x', null);
     assertSuggestParameter('y', 'int');
   }
 
-  test_constructor_parameters_required() async {
+  Future<void> test_constructor_parameters_required() async {
     addTestSource('class A {A(x, int y) {^}}');
     await computeSuggestions();
     assertSuggestParameter('x', null);
     assertSuggestParameter('y', 'int');
   }
 
-  test_ConstructorFieldInitializer_name() async {
+  Future<void> test_ConstructorFieldInitializer_name() async {
     addTestSource('''
 class A {
   final int foo;
@@ -1956,7 +1958,7 @@
     assertSuggestField('foo', 'int', relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_ConstructorFieldInitializer_value() async {
+  Future<void> test_ConstructorFieldInitializer_value() async {
     addTestSource('''
 var foo = 0;
 
@@ -1976,7 +1978,7 @@
     );
   }
 
-  test_ConstructorName_importedClass() async {
+  Future<void> test_ConstructorName_importedClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -2001,7 +2003,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory() async {
+  Future<void> test_ConstructorName_importedFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -2026,7 +2028,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory2() async {
+  Future<void> test_ConstructorName_importedFactory2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -2044,7 +2046,7 @@
     assertNotSuggested('String');
   }
 
-  test_ConstructorName_localClass() async {
+  Future<void> test_ConstructorName_localClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -2065,7 +2067,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_localFactory() async {
+  Future<void> test_ConstructorName_localFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -2086,7 +2088,7 @@
     assertNotSuggested('m');
   }
 
-  test_DefaultFormalParameter_named_expression() async {
+  Future<void> test_DefaultFormalParameter_named_expression() async {
     // DefaultFormalParameter FormalParameterList MethodDeclaration
     addTestSource('''
 foo() { }
@@ -2104,7 +2106,7 @@
     assertNotSuggested('identical');
   }
 
-  test_doc_classMember() async {
+  Future<void> test_doc_classMember() async {
     String docLines = r'''
   /// My documentation.
   /// Short description.
@@ -2149,7 +2151,7 @@
     }
   }
 
-  test_doc_topLevel() async {
+  Future<void> test_doc_topLevel() async {
     String docLines = r'''
 /// My documentation.
 /// Short description.
@@ -2208,7 +2210,7 @@
     }
   }
 
-  test_enum() async {
+  Future<void> test_enum() async {
     addTestSource('enum E { one, two } main() {^}');
     await computeSuggestions();
     assertSuggestEnum('E');
@@ -2218,7 +2220,7 @@
     assertNotSuggested('two');
   }
 
-  test_enum_deprecated() async {
+  Future<void> test_enum_deprecated() async {
     addTestSource('@deprecated enum E { one, two } main() {^}');
     await computeSuggestions();
     assertSuggestEnum('E', isDeprecated: true);
@@ -2228,7 +2230,7 @@
     assertNotSuggested('two');
   }
 
-  test_enum_filter() async {
+  Future<void> test_enum_filter() async {
     addTestSource('''
 enum E { one, two }
 enum F { three, four }
@@ -2250,7 +2252,7 @@
     assertSuggestEnumConst('F.four');
   }
 
-  test_enum_filter_assignment() async {
+  Future<void> test_enum_filter_assignment() async {
     addTestSource('''
 enum E { one, two }
 enum F { three, four }
@@ -2271,7 +2273,7 @@
     assertSuggestEnumConst('F.four');
   }
 
-  test_enum_filter_binaryEquals() async {
+  Future<void> test_enum_filter_binaryEquals() async {
     addTestSource('''
 enum E { one, two }
 enum F { three, four }
@@ -2291,7 +2293,7 @@
     assertSuggestEnumConst('F.four');
   }
 
-  test_enum_filter_switchCase() async {
+  Future<void> test_enum_filter_switchCase() async {
     addTestSource('''
 enum E { one, two }
 enum F { three, four }
@@ -2313,7 +2315,7 @@
     assertSuggestEnumConst('F.four');
   }
 
-  test_enum_filter_variableDeclaration() async {
+  Future<void> test_enum_filter_variableDeclaration() async {
     addTestSource('''
 enum E { one, two }
 enum F { three, four }
@@ -2333,7 +2335,7 @@
     assertSuggestEnumConst('F.four');
   }
 
-  test_expression_localVariable() async {
+  Future<void> test_expression_localVariable() async {
     addTestSource('''
 void f() {
   var v = 0;
@@ -2344,7 +2346,7 @@
     assertSuggestLocalVariable('v', 'int');
   }
 
-  test_expression_parameter() async {
+  Future<void> test_expression_parameter() async {
     addTestSource('''
 void f(int a) {
   ^
@@ -2354,7 +2356,7 @@
     assertSuggestParameter('a', 'int');
   }
 
-  test_expression_typeParameter_classDeclaration() async {
+  Future<void> test_expression_typeParameter_classDeclaration() async {
     addTestSource('''
 class A<T> {
   void m() {
@@ -2368,7 +2370,7 @@
     assertNotSuggested('U');
   }
 
-  test_expression_typeParameter_classTypeAlias() async {
+  Future<void> test_expression_typeParameter_classTypeAlias() async {
     addTestSource('''
 class A<U> {}
 class B<T> = A<^>;
@@ -2378,7 +2380,7 @@
     assertNotSuggested('U');
   }
 
-  test_expression_typeParameter_functionDeclaration() async {
+  Future<void> test_expression_typeParameter_functionDeclaration() async {
     addTestSource('''
 void f<T>() {
   ^
@@ -2390,7 +2392,7 @@
     assertNotSuggested('U');
   }
 
-  test_expression_typeParameter_functionDeclaration_local() async {
+  Future<void> test_expression_typeParameter_functionDeclaration_local() async {
     addTestSource('''
 void f() {
   void g2<U>() {}
@@ -2404,7 +2406,7 @@
     assertNotSuggested('U');
   }
 
-  test_expression_typeParameter_functionTypeAlias() async {
+  Future<void> test_expression_typeParameter_functionTypeAlias() async {
     addTestSource('''
 typedef void F<T>(^);
 ''');
@@ -2412,7 +2414,7 @@
     assertSuggestTypeParameter('T');
   }
 
-  test_expression_typeParameter_genericTypeAlias() async {
+  Future<void> test_expression_typeParameter_genericTypeAlias() async {
     addTestSource('''
 typedef F<T> = void Function<U>(^);
 ''');
@@ -2421,7 +2423,7 @@
     assertSuggestTypeParameter('U');
   }
 
-  test_expression_typeParameter_methodDeclaration() async {
+  Future<void> test_expression_typeParameter_methodDeclaration() async {
     addTestSource('''
 class A {
   void m<T>() {
@@ -2435,7 +2437,7 @@
     assertNotSuggested('U');
   }
 
-  test_expression_typeParameter_mixinDeclaration() async {
+  Future<void> test_expression_typeParameter_mixinDeclaration() async {
     addTestSource('''
 mixin M<T> {
   void m() {
@@ -2449,7 +2451,7 @@
     assertNotSuggested('U');
   }
 
-  test_ExpressionStatement_identifier() async {
+  Future<void> test_ExpressionStatement_identifier() async {
     // SimpleIdentifier  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 _B F1() { }
@@ -2478,7 +2480,7 @@
     assertNotSuggested('_B');
   }
 
-  test_ExpressionStatement_name() async {
+  Future<void> test_ExpressionStatement_name() async {
     // ExpressionStatement  Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/a.dart', '''
         B T1;
@@ -2491,7 +2493,7 @@
     assertNoSuggestions();
   }
 
-  test_extendsClause() async {
+  Future<void> test_extendsClause() async {
     addTestSource('''
 class A {}
 mixin M {}
@@ -2502,7 +2504,7 @@
     assertNotSuggested('M');
   }
 
-  test_FieldDeclaration_name_typed() async {
+  Future<void> test_FieldDeclaration_name_typed() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -2514,7 +2516,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldDeclaration_name_var() async {
+  Future<void> test_FieldDeclaration_name_var() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -2526,7 +2528,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldFormalParameter_in_non_constructor() async {
+  Future<void> test_FieldFormalParameter_in_non_constructor() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('class A {B(this.^foo) {}}');
     await computeSuggestions();
@@ -2536,7 +2538,7 @@
     assertNoSuggestions();
   }
 
-  test_forEachPartsWithIdentifier_class() async {
+  Future<void> test_forEachPartsWithIdentifier_class() async {
     addTestSource('''
 class C {}
 
@@ -2550,7 +2552,7 @@
     // Using `C` in for-each is invalid, but we should not crash.
   }
 
-  test_forEachPartsWithIdentifier_localLevelVariable() async {
+  Future<void> test_forEachPartsWithIdentifier_localLevelVariable() async {
     addTestSource('''
 main() {
   int v;
@@ -2565,7 +2567,7 @@
     assertSuggestLocalVariable('v', 'int');
   }
 
-  test_forEachPartsWithIdentifier_topLevelVariable() async {
+  Future<void> test_forEachPartsWithIdentifier_topLevelVariable() async {
     addTestSource('''
 int v;
 main() {
@@ -2581,7 +2583,7 @@
         relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
   }
 
-  test_ForEachStatement() async {
+  Future<void> test_ForEachStatement() async {
     // SimpleIdentifier  ForEachStatement
     addTestSource('main() {List<int> values; for (int index in ^)}');
     await computeSuggestions();
@@ -2592,7 +2594,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForEachStatement2() async {
+  Future<void> test_ForEachStatement2() async {
     // SimpleIdentifier  ForEachStatement
     addTestSource('main() {List<int> values; for (int index in i^)}');
     await computeSuggestions();
@@ -2603,7 +2605,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForEachStatement3() async {
+  Future<void> test_ForEachStatement3() async {
     // SimpleIdentifier ParenthesizedExpression  ForEachStatement
     addTestSource('main() {List<int> values; for (int index in (i^))}');
     await computeSuggestions();
@@ -2614,7 +2616,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForEachStatement_body_typed() async {
+  Future<void> test_ForEachStatement_body_typed() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (int foo in bar) {^}}');
     await computeSuggestions();
@@ -2626,7 +2628,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_body_untyped() async {
+  Future<void> test_ForEachStatement_body_untyped() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (var foo in bar) {^}}');
     await computeSuggestions();
@@ -2638,7 +2640,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_iterable() async {
+  Future<void> test_ForEachStatement_iterable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (int foo in ^) {}}');
     await computeSuggestions();
@@ -2649,7 +2651,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_loopVariable() async {
+  Future<void> test_ForEachStatement_loopVariable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ in args) {}}');
     await computeSuggestions();
@@ -2660,7 +2662,7 @@
     assertNotSuggested('String');
   }
 
-  test_ForEachStatement_loopVariable_type() async {
+  Future<void> test_ForEachStatement_loopVariable_type() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ foo in args) {}}');
     await computeSuggestions();
@@ -2672,7 +2674,7 @@
     assertNotSuggested('String');
   }
 
-  test_ForEachStatement_loopVariable_type2() async {
+  Future<void> test_ForEachStatement_loopVariable_type2() async {
     // DeclaredIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (S^ foo in args) {}}');
     await computeSuggestions();
@@ -2684,7 +2686,7 @@
     assertNotSuggested('String');
   }
 
-  test_FormalParameterList() async {
+  Future<void> test_FormalParameterList() async {
     // FormalParameterList MethodDeclaration
     addTestSource('''
 foo() { }
@@ -2702,7 +2704,7 @@
     assertNotSuggested('bar');
   }
 
-  test_ForStatement_body() async {
+  Future<void> test_ForStatement_body() async {
     // Block  ForStatement
     addTestSource('main(args) {for (int i; i < 10; ++i) {^}}');
     await computeSuggestions();
@@ -2713,7 +2715,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForStatement_condition() async {
+  Future<void> test_ForStatement_condition() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; i^)}');
     await computeSuggestions();
@@ -2723,7 +2725,7 @@
     assertSuggestLocalVariable('index', 'int');
   }
 
-  test_ForStatement_initializer() async {
+  Future<void> test_ForStatement_initializer() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {List a; for (^)}');
     await computeSuggestions();
@@ -2735,7 +2737,7 @@
     assertNotSuggested('int');
   }
 
-  test_ForStatement_updaters() async {
+  Future<void> test_ForStatement_updaters() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; index < 10; i^)}');
     await computeSuggestions();
@@ -2745,7 +2747,7 @@
     assertSuggestLocalVariable('index', 'int');
   }
 
-  test_ForStatement_updaters_prefix_expression() async {
+  Future<void> test_ForStatement_updaters_prefix_expression() async {
     // SimpleIdentifier  PrefixExpression  ForStatement
     addTestSource('''
 void bar() { }
@@ -2760,7 +2762,7 @@
     assertNotSuggested('bar');
   }
 
-  test_function_parameters_mixed_required_and_named() async {
+  Future<void> test_function_parameters_mixed_required_and_named() async {
     addTestSource('''
 void m(x, {int y}) {}
 class B extends A {
@@ -2779,7 +2781,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_function_parameters_mixed_required_and_positional() async {
+  Future<void> test_function_parameters_mixed_required_and_positional() async {
     addTestSource('''
 void m(x, [int y]) {}
 class B extends A {
@@ -2798,7 +2800,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_function_parameters_named() async {
+  Future<void> test_function_parameters_named() async {
     addTestSource('''
 void m({x, int y}) {}
 class B extends A {
@@ -2817,7 +2819,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_function_parameters_none() async {
+  Future<void> test_function_parameters_none() async {
     addTestSource('''
 void m() {}
 class B extends A {
@@ -2833,7 +2835,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_function_parameters_positional() async {
+  Future<void> test_function_parameters_positional() async {
     addTestSource('''
 void m([x, int y]) {}
 class B extends A {
@@ -2852,7 +2854,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_function_parameters_required() async {
+  Future<void> test_function_parameters_required() async {
     addTestSource('''
 void m(x, int y) {}
 class B extends A {
@@ -2871,7 +2873,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_FunctionDeclaration_returnType_afterComment() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2901,7 +2903,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment2() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment2() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2931,7 +2933,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment3() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment3() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -2962,7 +2964,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionExpression_body_function() async {
+  Future<void> test_FunctionExpression_body_function() async {
     // Block  BlockFunctionBody  FunctionExpression
     addTestSource('''
         void bar() { }
@@ -2983,7 +2985,7 @@
     assertNotSuggested('Object');
   }
 
-  test_functionTypeAlias_genericTypeAlias() async {
+  Future<void> test_functionTypeAlias_genericTypeAlias() async {
     addTestSource(r'''
 typedef F = void Function();
 main() {
@@ -2994,7 +2996,7 @@
     assertSuggestFunctionTypeAlias('F', 'void');
   }
 
-  test_functionTypeAlias_genericTypeAlias_incomplete() async {
+  Future<void> test_functionTypeAlias_genericTypeAlias_incomplete() async {
     addTestSource(r'''
 typedef F = int;
 main() {
@@ -3005,7 +3007,7 @@
     assertSuggestFunctionTypeAlias('F', 'dynamic');
   }
 
-  test_functionTypeAlias_old() async {
+  Future<void> test_functionTypeAlias_old() async {
     addTestSource(r'''
 typedef void F();
 main() {
@@ -3016,7 +3018,7 @@
     assertSuggestFunctionTypeAlias('F', 'void');
   }
 
-  test_IfStatement() async {
+  Future<void> test_IfStatement() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (true) ^}}''');
@@ -3031,7 +3033,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_condition() async {
+  Future<void> test_IfStatement_condition() async {
     // SimpleIdentifier  IfStatement  Block  BlockFunctionBody
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -3047,7 +3049,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IfStatement_empty() async {
+  Future<void> test_IfStatement_empty() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (^) something}}''');
@@ -3062,7 +3064,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_empty_private() async {
+  Future<void> test_IfStatement_empty_private() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (_^) something}}''');
@@ -3077,7 +3079,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_invocation() async {
+  Future<void> test_IfStatement_invocation() async {
     // SimpleIdentifier  PrefixIdentifier  IfStatement
     addTestSource('''
 main() {var a; if (a.^) something}''');
@@ -3091,14 +3093,14 @@
     assertNotSuggested('==');
   }
 
-  test_ignore_symbol_being_completed() async {
+  Future<void> test_ignore_symbol_being_completed() async {
     addTestSource('class MyClass { } main(MC^) { }');
     await computeSuggestions();
     assertSuggestClass('MyClass');
     assertNotSuggested('MC');
   }
 
-  test_implementsClause() async {
+  Future<void> test_implementsClause() async {
     addTestSource('''
 class A {}
 mixin M {}
@@ -3109,7 +3111,7 @@
     assertSuggestMixin('M');
   }
 
-  test_ImportDirective_dart() async {
+  Future<void> test_ImportDirective_dart() async {
     // SimpleStringLiteral  ImportDirective
     addTestSource('''
 import "dart^";
@@ -3119,7 +3121,7 @@
     assertNoSuggestions();
   }
 
-  test_inDartDoc_reference3() async {
+  Future<void> test_inDartDoc_reference3() async {
     addTestSource('''
 /// The [^]
 main(aaa, bbb) {}''');
@@ -3129,7 +3131,7 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
-  test_inDartDoc_reference4() async {
+  Future<void> test_inDartDoc_reference4() async {
     addTestSource('''
 /// The [m^]
 main(aaa, bbb) {}''');
@@ -3139,7 +3141,7 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
-  test_IndexExpression() async {
+  Future<void> test_IndexExpression() async {
     // ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3167,7 +3169,7 @@
     //assertNotSuggested('T1');
   }
 
-  test_IndexExpression2() async {
+  Future<void> test_IndexExpression2() async {
     // SimpleIdentifier IndexExpression ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3188,13 +3190,13 @@
     //assertNotSuggested('T1');
   }
 
-  test_inferredType() async {
+  Future<void> test_inferredType() async {
     addTestSource('main() { var v = 42; ^ }');
     await computeSuggestions();
     assertSuggestLocalVariable('v', 'int');
   }
 
-  test_InstanceCreationExpression() async {
+  Future<void> test_InstanceCreationExpression() async {
     addTestSource('''
 class A {foo(){var f; {var x;}}}
 class B {B(this.x, [String boo]) { } int x;}
@@ -3205,7 +3207,7 @@
     assertNoSuggestions();
   }
 
-  test_InstanceCreationExpression_imported() async {
+  Future<void> test_InstanceCreationExpression_imported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3237,7 +3239,7 @@
     assertNotSuggested('T2');
   }
 
-  test_InstanceCreationExpression_unimported() async {
+  Future<void> test_InstanceCreationExpression_unimported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/home/test/lib/ab.dart', 'class Foo { }');
     addTestSource('class C {foo(){new F^}}');
@@ -3249,7 +3251,7 @@
     assertNotSuggested('Foo');
   }
 
-  test_InterpolationExpression() async {
+  Future<void> test_InterpolationExpression() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3280,7 +3282,7 @@
     assertSuggestLocalVariable('name', 'String');
   }
 
-  test_InterpolationExpression_block() async {
+  Future<void> test_InterpolationExpression_block() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3311,7 +3313,7 @@
     assertSuggestLocalVariable('name', 'String');
   }
 
-  test_InterpolationExpression_block2() async {
+  Future<void> test_InterpolationExpression_block2() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addTestSource('main() {String name; print("hello \${n^}");}');
     await computeSuggestions();
@@ -3321,7 +3323,7 @@
     //assertNotSuggested('Object');
   }
 
-  test_InterpolationExpression_prefix_selector() async {
+  Future<void> test_InterpolationExpression_prefix_selector() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${name.^}");}');
     await computeSuggestions();
@@ -3334,7 +3336,7 @@
     assertNotSuggested('==');
   }
 
-  test_InterpolationExpression_prefix_selector2() async {
+  Future<void> test_InterpolationExpression_prefix_selector2() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \$name.^");}');
     await computeSuggestions();
@@ -3342,7 +3344,7 @@
     assertNoSuggestions();
   }
 
-  test_InterpolationExpression_prefix_target() async {
+  Future<void> test_InterpolationExpression_prefix_target() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${nam^e.length}");}');
     await computeSuggestions();
@@ -3353,7 +3355,7 @@
     assertNotSuggested('length');
   }
 
-  test_IsExpression() async {
+  Future<void> test_IsExpression() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -3374,7 +3376,7 @@
     assertNotSuggested('foo');
   }
 
-  test_IsExpression_target() async {
+  Future<void> test_IsExpression_target() async {
     // IfStatement  Block  BlockFunctionBody
     addTestSource('''
 foo() { }
@@ -3395,7 +3397,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type() async {
+  Future<void> test_IsExpression_type() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -3410,7 +3412,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type_filter_extends() async {
+  Future<void> test_IsExpression_type_filter_extends() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
 class A {} class B extends A {} class C extends A {} class D {}
@@ -3426,7 +3428,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type_filter_implements() async {
+  Future<void> test_IsExpression_type_filter_implements() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
 class A {} class B implements A {} class C implements A {} class D {}
@@ -3442,7 +3444,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type_filter_undefined_type() async {
+  Future<void> test_IsExpression_type_filter_undefined_type() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
 class A {}
@@ -3454,7 +3456,7 @@
     assertSuggestClass('A');
   }
 
-  test_IsExpression_type_partial() async {
+  Future<void> test_IsExpression_type_partial() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
 class A {int x; int y() => 0;}
@@ -3469,7 +3471,7 @@
     assertNotSuggested('Object');
   }
 
-  test_keyword() async {
+  Future<void> test_keyword() async {
     addSource('/home/test/lib/b.dart', '''
 lib B;
 int newT1;
@@ -3498,7 +3500,7 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
-  test_Literal_list() async {
+  Future<void> test_Literal_list() async {
     // ']'  ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([^]);}');
     await computeSuggestions();
@@ -3507,7 +3509,7 @@
     assertNotSuggested('String');
   }
 
-  test_Literal_list2() async {
+  Future<void> test_Literal_list2() async {
     // SimpleIdentifier ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([S^]);}');
     await computeSuggestions();
@@ -3516,7 +3518,7 @@
     assertNotSuggested('String');
   }
 
-  test_Literal_string() async {
+  Future<void> test_Literal_string() async {
     // SimpleStringLiteral  ExpressionStatement  Block
     addTestSource('class A {a() {"hel^lo"}}');
     await computeSuggestions();
@@ -3524,7 +3526,7 @@
     assertNoSuggestions();
   }
 
-  test_localVariableDeclarationName() async {
+  Future<void> test_localVariableDeclarationName() async {
     addTestSource('main() {String m^}');
     await computeSuggestions();
 
@@ -3532,7 +3534,7 @@
     assertNotSuggested('min');
   }
 
-  test_MapLiteralEntry() async {
+  Future<void> test_MapLiteralEntry() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3562,7 +3564,7 @@
     assertSuggestClass('C2');
   }
 
-  test_MapLiteralEntry1() async {
+  Future<void> test_MapLiteralEntry1() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3585,7 +3587,7 @@
         relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
   }
 
-  test_MapLiteralEntry2() async {
+  Future<void> test_MapLiteralEntry2() async {
     // SimpleIdentifier  MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3608,7 +3610,7 @@
         relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
   }
 
-  test_method_parameters_mixed_required_and_named() async {
+  Future<void> test_method_parameters_mixed_required_and_named() async {
     addTestSource('''
 class A {
   void m(x, {int y}) {}
@@ -3621,7 +3623,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_mixed_required_and_positional() async {
+  Future<void> test_method_parameters_mixed_required_and_positional() async {
     addTestSource('''
 class A {
   void m(x, [int y]) {}
@@ -3634,7 +3636,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_named() async {
+  Future<void> test_method_parameters_named() async {
     addTestSource('''
 class A {
   void m({x, int y}) {}
@@ -3647,7 +3649,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_none() async {
+  Future<void> test_method_parameters_none() async {
     addTestSource('''
 class A {
   void m() {}
@@ -3660,7 +3662,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_positional() async {
+  Future<void> test_method_parameters_positional() async {
     addTestSource('''
 class A {
   void m([x, int y]) {}
@@ -3673,7 +3675,7 @@
     assertNotSuggested('m');
   }
 
-  test_method_parameters_required() async {
+  Future<void> test_method_parameters_required() async {
     addTestSource('''
 class A {
   void m(x, int y) {}
@@ -3686,7 +3688,7 @@
     assertNotSuggested('m');
   }
 
-  test_MethodDeclaration_body_getters() async {
+  Future<void> test_MethodDeclaration_body_getters() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}');
     await computeSuggestions();
@@ -3713,7 +3715,7 @@
     }
   }
 
-  test_MethodDeclaration_body_static() async {
+  Future<void> test_MethodDeclaration_body_static() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/c.dart', '''
 class C {
@@ -3751,7 +3753,7 @@
     assertNotSuggested('c4');
   }
 
-  test_MethodDeclaration_members() async {
+  Future<void> test_MethodDeclaration_members() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}');
     await computeSuggestions();
@@ -3782,7 +3784,7 @@
     assertNotSuggested('bool');
   }
 
-  test_MethodDeclaration_members_private() async {
+  Future<void> test_MethodDeclaration_members_private() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X f; Z _a() {_^} var _g;}');
     await computeSuggestions();
@@ -3814,7 +3816,7 @@
     assertNotSuggested('bool');
   }
 
-  test_MethodDeclaration_parameters_named() async {
+  Future<void> test_MethodDeclaration_parameters_named() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated Z a(X x, _, b, {y: boo}) {^}}');
     await computeSuggestions();
@@ -3834,7 +3836,7 @@
     assertNotSuggested('_');
   }
 
-  test_MethodDeclaration_parameters_positional() async {
+  Future<void> test_MethodDeclaration_parameters_positional() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('''
 foo() { }
@@ -3854,7 +3856,7 @@
     assertNotSuggested('String');
   }
 
-  test_MethodDeclaration_returnType() async {
+  Future<void> test_MethodDeclaration_returnType() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3883,7 +3885,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3912,7 +3914,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment2() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment2() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3941,7 +3943,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment3() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment3() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
 int T1;
@@ -3972,7 +3974,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodInvocation_no_semicolon() async {
+  Future<void> test_MethodInvocation_no_semicolon() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
 main() { }
@@ -4005,22 +4007,22 @@
     assertNotSuggested('==');
   }
 
-  test_missing_params_constructor() async {
+  Future<void> test_missing_params_constructor() async {
     addTestSource('class C1{C1{} main(){C^}}');
     await computeSuggestions();
   }
 
-  test_missing_params_function() async {
+  Future<void> test_missing_params_function() async {
     addTestSource('int f1{} main(){f^}');
     await computeSuggestions();
   }
 
-  test_missing_params_method() async {
+  Future<void> test_missing_params_method() async {
     addTestSource('class C1{int f1{} main(){f^}}');
     await computeSuggestions();
   }
 
-  test_mixinDeclaration_body() async {
+  Future<void> test_mixinDeclaration_body() async {
     // MixinDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -4049,7 +4051,7 @@
     assertNotSuggested('x');
   }
 
-  test_mixinDeclaration_method_access() async {
+  Future<void> test_mixinDeclaration_method_access() async {
     addTestSource(r'''
 class A { }
 
@@ -4062,7 +4064,7 @@
     assertSuggestMethod('_x', 'X', 'int');
   }
 
-  test_mixinDeclaration_property_access() async {
+  Future<void> test_mixinDeclaration_property_access() async {
     addTestSource(r'''
 class A { }
 
@@ -4075,7 +4077,7 @@
     assertSuggestField('_x', 'int');
   }
 
-  test_new_instance() async {
+  Future<void> test_new_instance() async {
     addTestSource('import "dart:math"; class A {x() {new Random().^}}');
     await computeSuggestions();
 
@@ -4087,7 +4089,7 @@
     assertNotSuggested('A');
   }
 
-  test_overrides() async {
+  Future<void> test_overrides() async {
     addTestSource('''
 class A {m() {}}
 class B extends A {m() {^}}
@@ -4096,7 +4098,7 @@
     assertSuggestMethod('m', 'B', null, relevance: DART_RELEVANCE_LOCAL_METHOD);
   }
 
-  test_parameterName_excludeTypes() async {
+  Future<void> test_parameterName_excludeTypes() async {
     addTestSource('m(int ^) {}');
     await computeSuggestions();
 
@@ -4104,7 +4106,7 @@
     assertNotSuggested('bool');
   }
 
-  test_partFile_TypeName() async {
+  Future<void> test_partFile_TypeName() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4138,7 +4140,7 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_TypeName2() async {
+  Future<void> test_partFile_TypeName2() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4172,7 +4174,7 @@
     assertNotSuggested('m');
   }
 
-  test_PrefixedIdentifier_class_const() async {
+  Future<void> test_PrefixedIdentifier_class_const() async {
     // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4219,7 +4221,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_imported() async {
+  Future<void> test_PrefixedIdentifier_class_imported() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4256,7 +4258,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_local() async {
+  Future<void> test_PrefixedIdentifier_class_local() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 main() {A a; a.^}
@@ -4290,7 +4292,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_getter() async {
+  Future<void> test_PrefixedIdentifier_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^}');
     await computeSuggestions();
@@ -4298,7 +4300,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_library() async {
+  Future<void> test_PrefixedIdentifier_library() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4325,7 +4327,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4352,7 +4354,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly2() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4379,7 +4381,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_parameter() async {
+  Future<void> test_PrefixedIdentifier_parameter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
 lib B;
@@ -4398,7 +4400,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_prefix() async {
+  Future<void> test_PrefixedIdentifier_prefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
 class A {static int bar = 10;}
@@ -4418,7 +4420,7 @@
     assertNotSuggested('_B');
   }
 
-  test_PrefixedIdentifier_propertyAccess() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^}');
     await computeSuggestions();
@@ -4429,7 +4431,7 @@
     assertNotSuggested('compareTo');
   }
 
-  test_PrefixedIdentifier_propertyAccess_newStmt() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess_newStmt() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^ int y = 0;}');
     await computeSuggestions();
@@ -4440,7 +4442,7 @@
     assertNotSuggested('compareTo');
   }
 
-  test_PrefixedIdentifier_trailingStmt_const() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_const() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('const String g = "hello"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -4448,7 +4450,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_field() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_field() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g; f() {g.^ int y = 0;}}');
     await computeSuggestions();
@@ -4456,7 +4458,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_function() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_function() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g() => "one"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -4464,7 +4466,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('typedef String g(); f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -4472,7 +4474,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_getter() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -4480,7 +4482,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_typed() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_typed() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {String g; g.^ int y = 0;}');
     await computeSuggestions();
@@ -4488,7 +4490,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_untyped() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_untyped() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {var g = "hello"; g.^ int y = 0;}');
     await computeSuggestions();
@@ -4496,7 +4498,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_method() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_method() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g() {}; f() {g.^ int y = 0;}}');
     await computeSuggestions();
@@ -4504,7 +4506,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {f(String g) {g.^ int y = 0;}}');
     await computeSuggestions();
@@ -4512,7 +4514,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param2() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param2() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f(String g) {g.^ int y = 0;}');
     await computeSuggestions();
@@ -4520,7 +4522,7 @@
     assertNotSuggested('length');
   }
 
-  test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -4528,28 +4530,28 @@
     assertNotSuggested('length');
   }
 
-  test_prioritization() async {
+  Future<void> test_prioritization() async {
     addTestSource('main() {var ab; var _ab; ^}');
     await computeSuggestions();
     assertSuggestLocalVariable('ab', null);
     assertSuggestLocalVariable('_ab', null, relevance: DART_RELEVANCE_DEFAULT);
   }
 
-  test_prioritization_private() async {
+  Future<void> test_prioritization_private() async {
     addTestSource('main() {var ab; var _ab; _^}');
     await computeSuggestions();
     assertSuggestLocalVariable('ab', null);
     assertSuggestLocalVariable('_ab', null);
   }
 
-  test_prioritization_public() async {
+  Future<void> test_prioritization_public() async {
     addTestSource('main() {var ab; var _ab; a^}');
     await computeSuggestions();
     assertSuggestLocalVariable('ab', null);
     assertSuggestLocalVariable('_ab', null, relevance: DART_RELEVANCE_DEFAULT);
   }
 
-  test_PropertyAccess_expression() async {
+  Future<void> test_PropertyAccess_expression() async {
     // SimpleIdentifier  MethodInvocation  PropertyAccess  ExpressionStatement
     addTestSource('class A {a() {"hello".to^String().length}}');
     await computeSuggestions();
@@ -4563,7 +4565,7 @@
     assertNotSuggested('==');
   }
 
-  test_PropertyAccess_noTarget() async {
+  Future<void> test_PropertyAccess_noTarget() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/home/test/lib/ab.dart', 'class Foo { }');
     addTestSource('class C {foo(){.^}}');
@@ -4572,7 +4574,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_noTarget2() async {
+  Future<void> test_PropertyAccess_noTarget2() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/home/test/lib/ab.dart', 'class Foo { }');
     addTestSource('main() {.^}');
@@ -4581,7 +4583,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_selector() async {
+  Future<void> test_PropertyAccess_selector() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement  Block
     addTestSource('class A {a() {"hello".length.^}}');
     await computeSuggestions();
@@ -4595,13 +4597,13 @@
     assertNotSuggested('==');
   }
 
-  test_shadowed_name() async {
+  Future<void> test_shadowed_name() async {
     addTestSource('var a; class A { var a; m() { ^ } }');
     await computeSuggestions();
     assertSuggestField('a', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  test_SwitchStatement_c() async {
+  Future<void> test_SwitchStatement_c() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {c^}}}');
     await computeSuggestions();
@@ -4609,7 +4611,7 @@
     assertNoSuggestions();
   }
 
-  test_SwitchStatement_case() async {
+  Future<void> test_SwitchStatement_case() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {var t; switch(x) {case 0: ^}}}');
     await computeSuggestions();
@@ -4621,7 +4623,7 @@
     assertNotSuggested('String');
   }
 
-  test_SwitchStatement_case_var() async {
+  Future<void> test_SwitchStatement_case_var() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('g(int x) {var t; switch(x) {case 0: var bar; b^}}');
     await computeSuggestions();
@@ -4634,7 +4636,7 @@
     assertNotSuggested('String');
   }
 
-  test_SwitchStatement_empty() async {
+  Future<void> test_SwitchStatement_empty() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {^}}}');
     await computeSuggestions();
@@ -4642,7 +4644,7 @@
     assertNoSuggestions();
   }
 
-  test_ThisExpression_block() async {
+  Future<void> test_ThisExpression_block() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
 main() { }
@@ -4678,7 +4680,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor() async {
+  Future<void> test_ThisExpression_constructor() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
 main() { }
@@ -4714,7 +4716,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param() async {
+  Future<void> test_ThisExpression_constructor_param() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -4752,7 +4754,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param2() async {
+  Future<void> test_ThisExpression_constructor_param2() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -4789,7 +4791,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param3() async {
+  Future<void> test_ThisExpression_constructor_param3() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -4826,7 +4828,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param4() async {
+  Future<void> test_ThisExpression_constructor_param4() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
 main() { }
@@ -4863,7 +4865,7 @@
     assertNotSuggested('==');
   }
 
-  test_TopLevelVariableDeclaration_typed_name() async {
+  Future<void> test_TopLevelVariableDeclaration_typed_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} B ^');
@@ -4872,7 +4874,7 @@
     assertNoSuggestions();
   }
 
-  test_TopLevelVariableDeclaration_untyped_name() async {
+  Future<void> test_TopLevelVariableDeclaration_untyped_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} var ^');
@@ -4881,7 +4883,7 @@
     assertNoSuggestions();
   }
 
-  test_type_typeParameter_classDeclaration() async {
+  Future<void> test_type_typeParameter_classDeclaration() async {
     addTestSource('''
 class A<T> {
   ^ m() {}
@@ -4891,7 +4893,7 @@
     assertSuggestTypeParameter('T');
   }
 
-  test_TypeArgumentList() async {
+  Future<void> test_TypeArgumentList() async {
     // SimpleIdentifier  BinaryExpression  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
 class C1 {int x;}
@@ -4917,7 +4919,7 @@
     assertNotSuggested('F2');
   }
 
-  test_TypeArgumentList2() async {
+  Future<void> test_TypeArgumentList2() async {
     // TypeName  TypeArgumentList  TypeName
     addSource('/home/test/lib/a.dart', '''
 class C1 {int x;}
@@ -4938,7 +4940,7 @@
     assertSuggestClass('C2');
   }
 
-  test_VariableDeclaration_name() async {
+  Future<void> test_VariableDeclaration_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addSource('/home/test/lib/b.dart', '''
@@ -4955,7 +4957,7 @@
     assertNoSuggestions();
   }
 
-  test_VariableDeclarationList_final() async {
+  Future<void> test_VariableDeclarationList_final() async {
     // VariableDeclarationList  VariableDeclarationStatement  Block
     addTestSource('main() {final ^} class C { }');
     await computeSuggestions();
@@ -4965,7 +4967,7 @@
     assertNotSuggested('==');
   }
 
-  test_VariableDeclarationStatement_RHS() async {
+  Future<void> test_VariableDeclarationStatement_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
@@ -4990,7 +4992,7 @@
     assertNotSuggested('e');
   }
 
-  test_VariableDeclarationStatement_RHS_missing_semicolon() async {
+  Future<void> test_VariableDeclarationStatement_RHS_missing_semicolon() async {
     // VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
@@ -5023,7 +5025,7 @@
     assertNotSuggested('e');
   }
 
-  test_withClause_mixin() async {
+  Future<void> test_withClause_mixin() async {
     addTestSource('''
 class A {}
 mixin M {}
@@ -5033,7 +5035,7 @@
     assertSuggestMixin('M');
   }
 
-  test_YieldStatement() async {
+  Future<void> test_YieldStatement() async {
     addTestSource('''
 void main() async* {
   var value;
@@ -5059,7 +5061,7 @@
     super.setUp();
   }
 
-  test_extensionDeclaration_inMethod() async {
+  Future<void> test_extensionDeclaration_inMethod() async {
     // ExtensionDeclaration  CompilationUnit
     addTestSource('''
 extension E on int {}
@@ -5076,7 +5078,7 @@
     assertSuggest('E');
   }
 
-  test_extensionDeclaration_notInBody() async {
+  Future<void> test_extensionDeclaration_notInBody() async {
     // ExtensionDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
 class B { }''');
@@ -5101,7 +5103,7 @@
     assertNotSuggested('x');
   }
 
-  test_extensionDeclaration_unnamed() async {
+  Future<void> test_extensionDeclaration_unnamed() async {
     addTestSource('''
 extension on String {
   void something() => this.^
diff --git a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
index 3cc14d5..4c0b1c5 100644
--- a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NamedConstructorContributorTest);
   });
@@ -42,7 +42,7 @@
     return NamedConstructorContributor();
   }
 
-  test_ConstructorName_importedClass() async {
+  Future<void> test_ConstructorName_importedClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -66,7 +66,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedClass_unresolved() async {
+  Future<void> test_ConstructorName_importedClass_unresolved() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -91,7 +91,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory() async {
+  Future<void> test_ConstructorName_importedFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -115,7 +115,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory2() async {
+  Future<void> test_ConstructorName_importedFactory2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -131,7 +131,7 @@
     assertNotSuggested('String');
   }
 
-  test_ConstructorName_localClass() async {
+  Future<void> test_ConstructorName_localClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -150,7 +150,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_localFactory() async {
+  Future<void> test_ConstructorName_localFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
diff --git a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
index 6cdf195..a43e2ea 100644
--- a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveTests(OverrideContributorTest);
 }
 
@@ -21,7 +21,7 @@
     return OverrideContributor();
   }
 
-  test_alreadyOverridden() async {
+  Future<void> test_alreadyOverridden() async {
     addTestSource('''
 class A {
   void foo() {}
@@ -37,7 +37,7 @@
     _assertNoOverrideContaining('bar');
   }
 
-  test_customOperator() async {
+  Future<void> test_customOperator() async {
     addTestSource('''
 class A {
   void operator &(A other) { }
@@ -58,7 +58,7 @@
         selectionLength: 14);
   }
 
-  test_equalsOperator() async {
+  Future<void> test_equalsOperator() async {
     addTestSource('''
 class A {
   other^
@@ -76,7 +76,7 @@
         selectionLength: 22);
   }
 
-  test_fromMultipleSuperclasses() async {
+  Future<void> test_fromMultipleSuperclasses() async {
     addTestSource(r'''
 class A {
   A suggested1(int x) => null;
@@ -147,7 +147,7 @@
         selectionLength: 16);
   }
 
-  test_fromPart() async {
+  Future<void> test_fromPart() async {
     addSource('/home/test/lib/myLib.dart', '''
 library myLib;
 part 'test.dart';
@@ -207,7 +207,7 @@
         selectionLength: 27);
   }
 
-  test_inClass_of_interface() async {
+  Future<void> test_inClass_of_interface() async {
     addTestSource('''
 class A {
   void foo() {}
@@ -225,7 +225,7 @@
   }''', displayText: 'foo() { … }', selectionOffset: 51, selectionLength: 0);
   }
 
-  test_inMixin_of_interface() async {
+  Future<void> test_inMixin_of_interface() async {
     addTestSource('''
 class A {
   void foo() {}
@@ -243,7 +243,7 @@
   }''', displayText: 'foo() { … }', selectionOffset: 51, selectionLength: 0);
   }
 
-  test_inMixin_of_superclassConstraint() async {
+  Future<void> test_inMixin_of_superclassConstraint() async {
     addTestSource('''
 class A {
   void foo() {}
@@ -263,7 +263,7 @@
   }
 
   @failingTest
-  test_insideBareClass() async {
+  Future<void> test_insideBareClass() async {
     addTestSource('''
 class A {
   method() {}
@@ -285,7 +285,7 @@
         selectionLength: 22);
   }
 
-  test_outsideOfWorkspace() async {
+  Future<void> test_outsideOfWorkspace() async {
     testFile = convertPath('/home/other/lib/a.dart');
     addTestSource('''
 class A {
@@ -300,7 +300,7 @@
     _assertNoOverrideContaining('foo');
   }
 
-  test_private_otherLibrary() async {
+  Future<void> test_private_otherLibrary() async {
     addSource('/home/test/lib/a.dart', '''
 class A {
   void foo() {}
@@ -328,7 +328,7 @@
     }));
   }
 
-  test_private_thisLibrary() async {
+  Future<void> test_private_thisLibrary() async {
     addTestSource(r'''
 class A {
   void foo() {}
@@ -356,7 +356,7 @@
   }''', displayText: '_bar() { … }', selectionOffset: 58, selectionLength: 13);
   }
 
-  test_withExistingOverride() async {
+  Future<void> test_withExistingOverride() async {
     addTestSource('''
 class A {
   method() {}
@@ -380,7 +380,7 @@
   }
 
   @failingTest
-  test_withOverrideAnnotation() async {
+  Future<void> test_withOverrideAnnotation() async {
     addTestSource('''
 class A {
   method() {}
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/arglist_parameter_relevance_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/arglist_parameter_relevance_test.dart
index 34e36ee..9b11de9 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/arglist_parameter_relevance_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/arglist_parameter_relevance_test.dart
@@ -7,7 +7,7 @@
 
 import '../completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ArglistParameterRelevanceTest);
   });
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class ArglistParameterRelevanceTest extends DartCompletionManagerTest {
-  test_closureParam() async {
+  Future<void> test_closureParam() async {
     addTestSource(r'''
 void f({void Function(int a, {int b, int c}) closure}) {}
 
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/bool_assignment_relevance_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/bool_assignment_relevance_test.dart
index f39ef0d..32cd07f 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/bool_assignment_relevance_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/bool_assignment_relevance_test.dart
@@ -8,7 +8,7 @@
 
 import '../completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(BoolAssignmentRelevanceTest);
   });
@@ -16,35 +16,8 @@
 
 @reflectiveTest
 class BoolAssignmentRelevanceTest extends DartCompletionManagerTest {
-  /// These are 2 failing tests for http://dartbug.com/37907:
-  /// "Suggest `false` above other results when autocompleting a bool setter"
   @failingTest
-  test_boolLiterals_local() async {
-    addTestSource('''
-foo() {
-  bool b;
-  b = ^
-}
-''');
-    await computeSuggestions();
-
-    var trueSuggestion = suggestionWith(
-        completion: 'true', kind: CompletionSuggestionKind.KEYWORD);
-
-    var falseSuggestion = suggestionWith(
-        completion: 'false', kind: CompletionSuggestionKind.KEYWORD);
-
-    var bLocalVar = suggestionWith(
-        completion: 'b',
-        element: ElementKind.LOCAL_VARIABLE,
-        kind: CompletionSuggestionKind.INVOCATION);
-
-    expect(trueSuggestion.relevance, greaterThan(bLocalVar.relevance));
-    expect(falseSuggestion.relevance, greaterThan(bLocalVar.relevance));
-  }
-
-  @failingTest
-  test_boolLiterals_imported() async {
+  Future<void> test_boolLiterals_imported() async {
     addTestSource('''
 foo() {
   bool b;
@@ -69,4 +42,31 @@
     expect(
         falseSuggestion.relevance, greaterThan(boolFromEnvironment.relevance));
   }
+
+  /// These are 2 failing tests for http://dartbug.com/37907:
+  /// "Suggest `false` above other results when autocompleting a bool setter"
+  @failingTest
+  Future<void> test_boolLiterals_local() async {
+    addTestSource('''
+foo() {
+  bool b;
+  b = ^
+}
+''');
+    await computeSuggestions();
+
+    var trueSuggestion = suggestionWith(
+        completion: 'true', kind: CompletionSuggestionKind.KEYWORD);
+
+    var falseSuggestion = suggestionWith(
+        completion: 'false', kind: CompletionSuggestionKind.KEYWORD);
+
+    var bLocalVar = suggestionWith(
+        completion: 'b',
+        element: ElementKind.LOCAL_VARIABLE,
+        kind: CompletionSuggestionKind.INVOCATION);
+
+    expect(trueSuggestion.relevance, greaterThan(bLocalVar.relevance));
+    expect(falseSuggestion.relevance, greaterThan(bLocalVar.relevance));
+  }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/deprecated_member_relevance_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/deprecated_member_relevance_test.dart
index dbc3884..fd10530 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/deprecated_member_relevance_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/deprecated_member_relevance_test.dart
@@ -8,7 +8,7 @@
 
 import '../completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DeprecatedMemberRelevanceTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class DeprecatedMemberRelevanceTest extends DartCompletionManagerTest {
-  test_deprecated() async {
+  Future<void> test_deprecated() async {
     addTestSource('''
 class A {
   void a1() { }
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart b/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart
index 36651e0..c0f3240 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart
@@ -8,7 +8,7 @@
 import 'bool_assignment_relevance_test.dart' as bool_assignments;
 import 'deprecated_member_relevance_test.dart' as deprecated_members;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     arglist_parameters.main();
     bool_assignments.main();
diff --git a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
index 199ebcb..c3c7033 100644
--- a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
@@ -10,7 +10,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StaticMemberContributorTest);
     defineReflectiveTests(StaticMemberContributorWithExtensionMethodsTest);
@@ -24,7 +24,7 @@
     return StaticMemberContributor();
   }
 
-  test_enumConst() async {
+  Future<void> test_enumConst() async {
     addTestSource('enum E { one, two } main() {E.^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -34,7 +34,7 @@
     assertSuggestField('values', 'List<E>');
   }
 
-  test_enumConst2() async {
+  Future<void> test_enumConst2() async {
     addTestSource('enum E { one, two } main() {E.o^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -44,7 +44,7 @@
     assertSuggestField('values', 'List<E>');
   }
 
-  test_enumConst3() async {
+  Future<void> test_enumConst3() async {
     addTestSource('enum E { one, two } main() {E.^ int g;}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -54,13 +54,13 @@
     assertSuggestField('values', 'List<E>');
   }
 
-  test_enumConst_cascade1() async {
+  Future<void> test_enumConst_cascade1() async {
     addTestSource('enum E { one, two } main() {E..^}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_enumConst_cascade2() async {
+  Future<void> test_enumConst_cascade2() async {
     addTestSource('enum E { one, two } main() {E.^.}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -70,13 +70,13 @@
     assertSuggestField('values', 'List<E>');
   }
 
-  test_enumConst_cascade3() async {
+  Future<void> test_enumConst_cascade3() async {
     addTestSource('enum E { one, two } main() {E..o^}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_enumConst_cascade4() async {
+  Future<void> test_enumConst_cascade4() async {
     addTestSource('enum E { one, two } main() {E.^.o}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -87,7 +87,7 @@
   }
 
   @failingTest
-  test_enumConst_deprecated() async {
+  Future<void> test_enumConst_deprecated() async {
     addTestSource('@deprecated enum E { one, two } main() {E.^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -99,7 +99,7 @@
     assertSuggestField('values', 'List<E>', isDeprecated: true);
   }
 
-  test_implicitCreation() async {
+  Future<void> test_implicitCreation() async {
     addSource('/home/test/lib/a.dart', '''
 class A {
   A.foo();
@@ -119,13 +119,13 @@
     assertSuggestConstructor('bar', elementName: 'bar');
   }
 
-  test_keyword() async {
+  Future<void> test_keyword() async {
     addTestSource('class C { static C get instance => null; } main() {C.in^}');
     await computeSuggestions();
     assertSuggestGetter('instance', 'C');
   }
 
-  test_only_static() async {
+  Future<void> test_only_static() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 class B {
@@ -146,7 +146,7 @@
     assertSuggestMethod('m2', 'C', null);
   }
 
-  test_only_static2() async {
+  Future<void> test_only_static2() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('''
 class B {
@@ -167,7 +167,7 @@
     assertSuggestMethod('m2', 'C', null);
   }
 
-  test_only_static_cascade1() async {
+  Future<void> test_only_static_cascade1() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 class B {
@@ -184,7 +184,7 @@
     assertNoSuggestions();
   }
 
-  test_only_static_cascade2() async {
+  Future<void> test_only_static_cascade2() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 class B {
@@ -205,7 +205,7 @@
     assertSuggestMethod('m2', 'C', null);
   }
 
-  test_only_static_cascade3() async {
+  Future<void> test_only_static_cascade3() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 class B {
@@ -222,7 +222,7 @@
     assertNoSuggestions();
   }
 
-  test_only_static_cascade4() async {
+  Future<void> test_only_static_cascade4() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 class B {
@@ -243,7 +243,7 @@
     assertSuggestMethod('m2', 'C', null);
   }
 
-  test_only_static_cascade_prefixed1() async {
+  Future<void> test_only_static_cascade_prefixed1() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 import "dart:async" as async;
@@ -252,7 +252,7 @@
     assertNoSuggestions();
   }
 
-  test_only_static_cascade_prefixed2() async {
+  Future<void> test_only_static_cascade_prefixed2() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 import "dart:async" as async;
@@ -261,7 +261,7 @@
     assertSuggestMethod('wait', 'Future', 'Future<List<T>>');
   }
 
-  test_PrefixedIdentifier_class_const() async {
+  Future<void> test_PrefixedIdentifier_class_const() async {
     // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -321,7 +321,7 @@
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
   }
 
-  test_extension() async {
+  Future<void> test_extension() async {
     addTestSource('''
 extension E on Object {
   static int i;
diff --git a/pkg/analysis_server/test/services/completion/dart/test_all.dart b/pkg/analysis_server/test/services/completion/dart/test_all.dart
index 834e5cf..181a87e 100644
--- a/pkg/analysis_server/test/services/completion/dart/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/test_all.dart
@@ -33,7 +33,7 @@
 import 'uri_contributor_test.dart' as uri_contributor_test;
 import 'variable_name_contributor_test.dart' as variable_name_contributor_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     arglist_test.main();
     combinator_test.main();
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index 26e0c7f..051c7ff 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -12,7 +12,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeMemberContributorTest);
     defineReflectiveTests(TypeMemberContributorWithExtensionMethodsTest);
@@ -57,7 +57,7 @@
     return TypeMemberContributor();
   }
 
-  test_ArgDefaults_method() async {
+  Future<void> test_ArgDefaults_method() async {
     addTestSource('''
 class A {
   bool a(int b, bool c) => false;
@@ -69,7 +69,7 @@
     assertSuggestMethod('a', 'A', 'bool', defaultArgListString: 'b, c');
   }
 
-  test_ArgDefaults_method_none() async {
+  Future<void> test_ArgDefaults_method_none() async {
     addTestSource('''
 class A {
   bool a() => false;
@@ -81,7 +81,7 @@
     assertSuggestMethod('a', 'A', 'bool', defaultArgListString: null);
   }
 
-  test_ArgDefaults_method_with_optional_positional() async {
+  Future<void> test_ArgDefaults_method_with_optional_positional() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -96,7 +96,7 @@
     assertSuggestMethod('foo', 'A', 'bool', defaultArgListString: 'bar');
   }
 
-  test_ArgDefaults_method_with_required_named() async {
+  Future<void> test_ArgDefaults_method_with_required_named() async {
     addMetaPackage();
     addTestSource('''
 import 'package:meta/meta.dart';
@@ -112,7 +112,7 @@
         defaultArgListString: 'bar, baz: null');
   }
 
-  test_ArgumentList() async {
+  Future<void> test_ArgumentList() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -136,7 +136,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_imported_function() async {
+  Future<void> test_ArgumentList_imported_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -161,7 +161,8 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_functionalArg() async {
+  Future<void>
+      test_ArgumentList_InstanceCreationExpression_functionalArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -188,7 +189,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_InstanceCreationExpression_typedefArg() async {
+  Future<void> test_ArgumentList_InstanceCreationExpression_typedefArg() async {
     // ArgumentList  InstanceCreationExpression  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -216,7 +217,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_function() async {
+  Future<void> test_ArgumentList_local_function() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -241,7 +242,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_local_method() async {
+  Future<void> test_ArgumentList_local_method() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -266,7 +267,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_functionalArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_functionalArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -293,7 +294,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_MethodInvocation_methodArg() async {
+  Future<void> test_ArgumentList_MethodInvocation_methodArg() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         library A;
@@ -318,7 +319,7 @@
     assertNotSuggested('print');
   }
 
-  test_ArgumentList_namedParam() async {
+  Future<void> test_ArgumentList_namedParam() async {
     // SimpleIdentifier  NamedExpression  ArgumentList  MethodInvocation
     // ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
@@ -336,7 +337,7 @@
     assertNotSuggested('main');
   }
 
-  test_AsExpression() async {
+  Future<void> test_AsExpression() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
         class A {var b; X _c; foo() {var a; (a as ^).foo();}''');
@@ -350,7 +351,7 @@
     assertNotSuggested('==');
   }
 
-  test_AssignmentExpression_name() async {
+  Future<void> test_AssignmentExpression_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int ^b = 1;}');
@@ -358,7 +359,7 @@
     assertNoSuggestions();
   }
 
-  test_AssignmentExpression_RHS() async {
+  Future<void> test_AssignmentExpression_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('class A {} main() {int a; int b = ^}');
@@ -371,7 +372,7 @@
     assertNotSuggested('Object');
   }
 
-  test_AssignmentExpression_type() async {
+  Future<void> test_AssignmentExpression_type() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -393,7 +394,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_newline() async {
+  Future<void> test_AssignmentExpression_type_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -414,7 +415,7 @@
     assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial() async {
+  Future<void> test_AssignmentExpression_type_partial() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -436,7 +437,7 @@
     //assertNotSuggested('identical');
   }
 
-  test_AssignmentExpression_type_partial_newline() async {
+  Future<void> test_AssignmentExpression_type_partial_newline() async {
     // SimpleIdentifier  TypeName  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addTestSource('''
@@ -457,7 +458,7 @@
     assertNotSuggested('identical');
   }
 
-  test_AwaitExpression() async {
+  Future<void> test_AwaitExpression() async {
     // SimpleIdentifier  AwaitExpression  ExpressionStatement
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -471,7 +472,7 @@
     assertNotSuggested('Object');
   }
 
-  test_BinaryExpression_LHS() async {
+  Future<void> test_BinaryExpression_LHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = ^ + 2;}');
@@ -483,7 +484,7 @@
     assertNotSuggested('b');
   }
 
-  test_BinaryExpression_RHS() async {
+  Future<void> test_BinaryExpression_RHS() async {
     // SimpleIdentifier  BinaryExpression  VariableDeclaration
     // VariableDeclarationList  VariableDeclarationStatement
     addTestSource('main() {int a = 1, b = 2 + ^;}');
@@ -496,7 +497,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block() async {
+  Future<void> test_Block() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
         export "dart:math" hide max;
@@ -588,7 +589,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final() async {
+  Future<void> test_Block_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
         export "dart:math" hide max;
@@ -686,21 +687,21 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final2() async {
+  Future<void> test_Block_final2() async {
     addTestSource('main() {final S^ v;}');
     await computeSuggestions();
 
     assertNotSuggested('String');
   }
 
-  test_Block_final3() async {
+  Future<void> test_Block_final3() async {
     addTestSource('main() {final ^ v;}');
     await computeSuggestions();
 
     assertNotSuggested('String');
   }
 
-  test_Block_final_final() async {
+  Future<void> test_Block_final_final() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
         export "dart:math" hide max;
@@ -798,7 +799,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_final_var() async {
+  Future<void> test_Block_final_var() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testAB.dart', '''
         export "dart:math" hide max;
@@ -896,7 +897,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_identifier_partial() async {
+  Future<void> test_Block_identifier_partial() async {
     addSource('/testAB.dart', '''
         export "dart:math" hide max;
         class A {int x;}
@@ -974,7 +975,7 @@
     assertNotSuggested('HtmlElement');
   }
 
-  test_Block_inherited_imported() async {
+  Future<void> test_Block_inherited_imported() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -1005,7 +1006,7 @@
     assertNotSuggested('==');
   }
 
-  test_Block_inherited_local() async {
+  Future<void> test_Block_inherited_local() async {
     // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration
     addTestSource('''
         class F { var f1; f2() { } get f3 => 0; set f4(fx) { } }
@@ -1028,7 +1029,7 @@
     assertNotSuggested('m2');
   }
 
-  test_Block_local_function() async {
+  Future<void> test_Block_local_function() async {
     addSource('/testAB.dart', '''
         export "dart:math" hide max;
         class A {int x;}
@@ -1077,7 +1078,7 @@
     assertNotSuggested('parseHex');
   }
 
-  test_Block_unimported() async {
+  Future<void> test_Block_unimported() async {
     addPackageFile('aaa', 'a.dart', 'class A {}');
     addTestSource('main() { ^ }');
 
@@ -1090,7 +1091,7 @@
     assertNotSuggested('Future');
   }
 
-  test_CascadeExpression_method1() async {
+  Future<void> test_CascadeExpression_method1() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1114,7 +1115,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector1() async {
+  Future<void> test_CascadeExpression_selector1() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1138,7 +1139,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2() async {
+  Future<void> test_CascadeExpression_selector2() async {
     // SimpleIdentifier  PropertyAccess  CascadeExpression  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1160,7 +1161,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_selector2_withTrailingReturn() async {
+  Future<void> test_CascadeExpression_selector2_withTrailingReturn() async {
     // PropertyAccess  CascadeExpression  ExpressionStatement  Block
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1182,7 +1183,7 @@
     assertNotSuggested('==');
   }
 
-  test_CascadeExpression_target() async {
+  Future<void> test_CascadeExpression_target() async {
     // SimpleIdentifier  CascadeExpression  ExpressionStatement
     addTestSource('''
         class A {var b; X _c;}
@@ -1201,7 +1202,7 @@
     assertNotSuggested('==');
   }
 
-  test_CatchClause_onType() async {
+  Future<void> test_CatchClause_onType() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^ {}}}');
     await computeSuggestions();
@@ -1213,7 +1214,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_onType_noBrackets() async {
+  Future<void> test_CatchClause_onType_noBrackets() async {
     // TypeName  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on ^}}');
     await computeSuggestions();
@@ -1224,7 +1225,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_typed() async {
+  Future<void> test_CatchClause_typed() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} on E catch (e) {^}}}');
     await computeSuggestions();
@@ -1236,7 +1237,7 @@
     assertNotSuggested('x');
   }
 
-  test_CatchClause_untyped() async {
+  Future<void> test_CatchClause_untyped() async {
     // Block  CatchClause  TryStatement
     addTestSource('class A {a() {try{var x;} catch (e, s) {^}}}');
     await computeSuggestions();
@@ -1249,7 +1250,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body() async {
+  Future<void> test_ClassDeclaration_body() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1268,7 +1269,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final() async {
+  Future<void> test_ClassDeclaration_body_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1287,7 +1288,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field() async {
+  Future<void> test_ClassDeclaration_body_final_field() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1306,7 +1307,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_field2() async {
+  Future<void> test_ClassDeclaration_body_final_field2() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1325,7 +1326,7 @@
     assertNotSuggested('Soo');
   }
 
-  test_ClassDeclaration_body_final_final() async {
+  Future<void> test_ClassDeclaration_body_final_final() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1344,7 +1345,7 @@
     assertNotSuggested('x');
   }
 
-  test_ClassDeclaration_body_final_var() async {
+  Future<void> test_ClassDeclaration_body_final_var() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/b.dart', '''
         class B { }''');
@@ -1363,7 +1364,7 @@
     assertNotSuggested('x');
   }
 
-  test_Combinator_hide() async {
+  Future<void> test_Combinator_hide() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/testAB.dart', '''
         library libAB;
@@ -1386,7 +1387,7 @@
     assertNoSuggestions();
   }
 
-  test_Combinator_show() async {
+  Future<void> test_Combinator_show() async {
     // SimpleIdentifier  HideCombinator  ImportDirective
     addSource('/testAB.dart', '''
         library libAB;
@@ -1411,7 +1412,7 @@
     assertNoSuggestions();
   }
 
-  test_ConditionalExpression_elseExpression() async {
+  Future<void> test_ConditionalExpression_elseExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1430,7 +1431,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_elseExpression_empty() async {
+  Future<void> test_ConditionalExpression_elseExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1455,7 +1456,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_partial_thenExpression() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1474,7 +1475,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_partial_thenExpression_empty() async {
+  Future<void> test_ConditionalExpression_partial_thenExpression_empty() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1499,7 +1500,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConditionalExpression_thenExpression() async {
+  Future<void> test_ConditionalExpression_thenExpression() async {
     // SimpleIdentifier  ConditionalExpression  ReturnStatement
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1518,7 +1519,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_ConstructorName_importedClass() async {
+  Future<void> test_ConstructorName_importedClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -1542,7 +1543,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory() async {
+  Future<void> test_ConstructorName_importedFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addSource('/home/test/lib/b.dart', '''
@@ -1566,7 +1567,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_importedFactory2() async {
+  Future<void> test_ConstructorName_importedFactory2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1583,7 +1584,7 @@
     assertNotSuggested('String');
   }
 
-  test_ConstructorName_localClass() async {
+  Future<void> test_ConstructorName_localClass() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1603,7 +1604,7 @@
     assertNotSuggested('m');
   }
 
-  test_ConstructorName_localFactory() async {
+  Future<void> test_ConstructorName_localFactory() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName  ConstructorName
     // InstanceCreationExpression
     addTestSource('''
@@ -1623,7 +1624,7 @@
     assertNotSuggested('m');
   }
 
-  test_DefaultFormalParameter_named_expression() async {
+  Future<void> test_DefaultFormalParameter_named_expression() async {
     // DefaultFormalParameter FormalParameterList MethodDeclaration
     addTestSource('''
         foo() { }
@@ -1640,7 +1641,7 @@
     assertNotSuggested('bar');
   }
 
-  test_enumConst() async {
+  Future<void> test_enumConst() async {
     addTestSource('enum E { one, two } main() {E.^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1651,7 +1652,7 @@
     assertNotSuggested('values');
   }
 
-  test_enumConst2() async {
+  Future<void> test_enumConst2() async {
     addTestSource('enum E { one, two } main() {E.o^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1662,7 +1663,7 @@
     assertNotSuggested('values');
   }
 
-  test_enumConst3() async {
+  Future<void> test_enumConst3() async {
     addTestSource('enum E { one, two } main() {E.^ int g;}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1673,7 +1674,7 @@
     assertNotSuggested('values');
   }
 
-  test_enumConst_index() async {
+  Future<void> test_enumConst_index() async {
     addTestSource('enum E { one, two } main() {E.one.^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1683,7 +1684,7 @@
     assertNotSuggested('values');
   }
 
-  test_enumConst_index2() async {
+  Future<void> test_enumConst_index2() async {
     addTestSource('enum E { one, two } main() {E.one.i^}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1693,7 +1694,7 @@
     assertNotSuggested('values');
   }
 
-  test_enumConst_index3() async {
+  Future<void> test_enumConst_index3() async {
     addTestSource('enum E { one, two } main() {E.one.^ int g;}');
     await computeSuggestions();
     assertNotSuggested('E');
@@ -1703,7 +1704,7 @@
     assertNotSuggested('values');
   }
 
-  test_ExpressionStatement_identifier() async {
+  Future<void> test_ExpressionStatement_identifier() async {
     // SimpleIdentifier  ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         _B F1() { }
@@ -1729,7 +1730,7 @@
     assertNotSuggested('_B');
   }
 
-  test_ExpressionStatement_name() async {
+  Future<void> test_ExpressionStatement_name() async {
     // ExpressionStatement  Block  BlockFunctionBody  MethodDeclaration
     addSource('/home/test/lib/a.dart', '''
         B T1;
@@ -1741,7 +1742,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldDeclaration_name_typed() async {
+  Future<void> test_FieldDeclaration_name_typed() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -1752,7 +1753,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldDeclaration_name_var() async {
+  Future<void> test_FieldDeclaration_name_var() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // FieldDeclaration
     addSource('/home/test/lib/a.dart', 'class A { }');
@@ -1763,7 +1764,7 @@
     assertNoSuggestions();
   }
 
-  test_FieldFormalParameter_in_non_constructor() async {
+  Future<void> test_FieldFormalParameter_in_non_constructor() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('class A {B(this.^foo) {}}');
     await computeSuggestions();
@@ -1772,7 +1773,7 @@
     assertNoSuggestions();
   }
 
-  test_ForEachStatement_body_typed() async {
+  Future<void> test_ForEachStatement_body_typed() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (int foo in bar) {^}}');
     await computeSuggestions();
@@ -1783,7 +1784,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_body_untyped() async {
+  Future<void> test_ForEachStatement_body_untyped() async {
     // Block  ForEachStatement
     addTestSource('main(args) {for (foo in bar) {^}}');
     await computeSuggestions();
@@ -1794,7 +1795,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_iterable() async {
+  Future<void> test_ForEachStatement_iterable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (int foo in ^) {}}');
     await computeSuggestions();
@@ -1804,7 +1805,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForEachStatement_loopVariable() async {
+  Future<void> test_ForEachStatement_loopVariable() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ in args) {}}');
     await computeSuggestions();
@@ -1814,7 +1815,7 @@
     assertNotSuggested('String');
   }
 
-  test_ForEachStatement_loopVariable_type() async {
+  Future<void> test_ForEachStatement_loopVariable_type() async {
     // SimpleIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (^ foo in args) {}}');
     await computeSuggestions();
@@ -1825,7 +1826,7 @@
     assertNotSuggested('String');
   }
 
-  test_ForEachStatement_loopVariable_type2() async {
+  Future<void> test_ForEachStatement_loopVariable_type2() async {
     // DeclaredIdentifier  ForEachStatement  Block
     addTestSource('main(args) {for (S^ foo in args) {}}');
     await computeSuggestions();
@@ -1836,7 +1837,7 @@
     assertNotSuggested('String');
   }
 
-  test_FormalParameterList() async {
+  Future<void> test_FormalParameterList() async {
     // FormalParameterList MethodDeclaration
     addTestSource('''
         foo() { }
@@ -1853,7 +1854,7 @@
     assertNotSuggested('bar');
   }
 
-  test_ForStatement_body() async {
+  Future<void> test_ForStatement_body() async {
     // Block  ForStatement
     addTestSource('main(args) {for (int i; i < 10; ++i) {^}}');
     await computeSuggestions();
@@ -1863,7 +1864,7 @@
     assertNotSuggested('Object');
   }
 
-  test_ForStatement_condition() async {
+  Future<void> test_ForStatement_condition() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; i^)}');
     await computeSuggestions();
@@ -1872,7 +1873,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForStatement_initializer() async {
+  Future<void> test_ForStatement_initializer() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {List a; for (^)}');
     await computeSuggestions();
@@ -1883,7 +1884,7 @@
     assertNotSuggested('int');
   }
 
-  test_ForStatement_updaters() async {
+  Future<void> test_ForStatement_updaters() async {
     // SimpleIdentifier  ForStatement
     addTestSource('main() {for (int index = 0; index < 10; i^)}');
     await computeSuggestions();
@@ -1892,7 +1893,7 @@
     assertNotSuggested('index');
   }
 
-  test_ForStatement_updaters_prefix_expression() async {
+  Future<void> test_ForStatement_updaters_prefix_expression() async {
     // SimpleIdentifier  PrefixExpression  ForStatement
     addTestSource('''
         void bar() { }
@@ -1905,7 +1906,7 @@
     assertNotSuggested('bar');
   }
 
-  test_FunctionDeclaration_returnType_afterComment() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1934,7 +1935,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment2() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment2() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1963,7 +1964,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionDeclaration_returnType_afterComment3() async {
+  Future<void> test_FunctionDeclaration_returnType_afterComment3() async {
     // FunctionDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -1993,7 +1994,7 @@
     assertNotSuggested('name');
   }
 
-  test_FunctionExpression_body_function() async {
+  Future<void> test_FunctionExpression_body_function() async {
     // Block  BlockFunctionBody  FunctionExpression
     addTestSource('''
         void bar() { }
@@ -2009,7 +2010,24 @@
     assertNotSuggested('Object');
   }
 
-  test_generic_field() async {
+  Future<void> test_FunctionType_call() async {
+    addTestSource('''
+void f() {
+  void Function(int x) fun;
+  fun.^
+}
+''');
+
+    await computeSuggestions();
+    assertSuggest(
+      'call()',
+      selectionOffset: 6,
+      elemKind: ElementKind.METHOD,
+      isSynthetic: true,
+    );
+  }
+
+  Future<void> test_generic_field() async {
     addTestSource('''
 class C<T> {
   T t;
@@ -2022,7 +2040,7 @@
     assertSuggestField('t', 'int');
   }
 
-  test_generic_getter() async {
+  Future<void> test_generic_getter() async {
     addTestSource('''
 class C<T> {
   T get t => null;
@@ -2035,7 +2053,7 @@
     assertSuggestGetter('t', 'int');
   }
 
-  test_generic_method() async {
+  Future<void> test_generic_method() async {
     addTestSource('''
 class C<T> {
   T m(T t) {}
@@ -2051,7 +2069,7 @@
     expect(suggestion.element.parameters, '(int t)');
   }
 
-  test_generic_setter() async {
+  Future<void> test_generic_setter() async {
     addTestSource('''
 class C<T> {
   set t(T value) {}
@@ -2068,7 +2086,7 @@
     expect(suggestion.element.parameters, '(int value)');
   }
 
-  test_genericTypeAlias_noFunctionType() async {
+  Future<void> test_genericTypeAlias_noFunctionType() async {
     addTestSource('''
 typedef F=;
 g(F.^
@@ -2076,7 +2094,7 @@
     await computeSuggestions();
   }
 
-  test_IfStatement() async {
+  Future<void> test_IfStatement() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (true) ^}}''');
@@ -2090,7 +2108,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_condition() async {
+  Future<void> test_IfStatement_condition() async {
     // SimpleIdentifier  IfStatement  Block  BlockFunctionBody
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -2104,7 +2122,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IfStatement_empty() async {
+  Future<void> test_IfStatement_empty() async {
     // SimpleIdentifier  IfStatement
     addTestSource('''
         class A {var b; X _c; foo() {A a; if (^) something}}''');
@@ -2118,7 +2136,7 @@
     assertNotSuggested('==');
   }
 
-  test_IfStatement_invocation() async {
+  Future<void> test_IfStatement_invocation() async {
     // SimpleIdentifier  PrefixIdentifier  IfStatement
     addTestSource('''
         main() {var a; if (a.^) something}''');
@@ -2131,7 +2149,7 @@
     assertNotSuggested('==');
   }
 
-  test_ImportDirective_dart() async {
+  Future<void> test_ImportDirective_dart() async {
     // SimpleStringLiteral  ImportDirective
     addTestSource('''
         import "dart^";
@@ -2140,7 +2158,7 @@
     assertNoSuggestions();
   }
 
-  test_IndexExpression() async {
+  Future<void> test_IndexExpression() async {
     // ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2165,7 +2183,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_IndexExpression2() async {
+  Future<void> test_IndexExpression2() async {
     // SimpleIdentifier IndexExpression ExpressionStatement  Block
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2184,7 +2202,7 @@
     //assertSuggestImportedTopLevelVar('T1', 'int');
   }
 
-  test_InstanceCreationExpression_imported() async {
+  Future<void> test_InstanceCreationExpression_imported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2214,7 +2232,7 @@
     assertNotSuggested('T2');
   }
 
-  test_InstanceCreationExpression_unimported() async {
+  Future<void> test_InstanceCreationExpression_unimported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/testAB.dart', 'class Foo { }');
     addTestSource('class C {foo(){new F^}}');
@@ -2225,7 +2243,7 @@
     assertNotSuggested('Foo');
   }
 
-  test_InterfaceType_Function_call() async {
+  Future<void> test_InterfaceType_Function_call() async {
     addTestSource('''
 void f() {
   Function fun;
@@ -2242,7 +2260,7 @@
     );
   }
 
-  test_InterfaceType_Function_extended_call() async {
+  Future<void> test_InterfaceType_Function_extended_call() async {
     addTestSource('''
 class MyFun extends Function { }
 void f() {
@@ -2260,7 +2278,7 @@
     );
   }
 
-  test_InterfaceType_Function_implemented_call() async {
+  Future<void> test_InterfaceType_Function_implemented_call() async {
     addTestSource('''
 class MyFun implements Function { }
 void f() {
@@ -2278,7 +2296,7 @@
     );
   }
 
-  test_InterpolationExpression() async {
+  Future<void> test_InterpolationExpression() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2307,7 +2325,7 @@
     assertNotSuggested('name');
   }
 
-  test_InterpolationExpression_block() async {
+  Future<void> test_InterpolationExpression_block() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2335,7 +2353,7 @@
     assertNotSuggested('name');
   }
 
-  test_InterpolationExpression_block2() async {
+  Future<void> test_InterpolationExpression_block2() async {
     // SimpleIdentifier  InterpolationExpression  StringInterpolation
     addTestSource('main() {String name; print("hello \${n^}");}');
     await computeSuggestions();
@@ -2344,7 +2362,7 @@
     //assertNotSuggested('Object');
   }
 
-  test_InterpolationExpression_prefix_selector() async {
+  Future<void> test_InterpolationExpression_prefix_selector() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${name.^}");}');
     await computeSuggestions();
@@ -2356,14 +2374,14 @@
     assertNotSuggested('==');
   }
 
-  test_InterpolationExpression_prefix_selector2() async {
+  Future<void> test_InterpolationExpression_prefix_selector2() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \$name.^");}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_InterpolationExpression_prefix_target() async {
+  Future<void> test_InterpolationExpression_prefix_target() async {
     // SimpleIdentifier  PrefixedIdentifier  InterpolationExpression
     addTestSource('main() {String name; print("hello \${nam^e.length}");}');
     await computeSuggestions();
@@ -2373,7 +2391,7 @@
     assertNotSuggested('length');
   }
 
-  test_IsExpression() async {
+  Future<void> test_IsExpression() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -2393,7 +2411,7 @@
     assertNotSuggested('foo');
   }
 
-  test_IsExpression_target() async {
+  Future<void> test_IsExpression_target() async {
     // IfStatement  Block  BlockFunctionBody
     addTestSource('''
         foo() { }
@@ -2411,7 +2429,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type() async {
+  Future<void> test_IsExpression_type() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -2425,7 +2443,7 @@
     assertNotSuggested('Object');
   }
 
-  test_IsExpression_type_partial() async {
+  Future<void> test_IsExpression_type_partial() async {
     // SimpleIdentifier  TypeName  IsExpression  IfStatement
     addTestSource('''
         class A {int x; int y() => 0;}
@@ -2439,14 +2457,14 @@
     assertNotSuggested('Object');
   }
 
-  test_keyword() async {
+  Future<void> test_keyword() async {
     addTestSource('class C { static C get instance => null; } main() {C.in^}');
     await computeSuggestions();
     // Suggested by StaticMemberContributor
     assertNotSuggested('instance');
   }
 
-  test_keyword2() async {
+  Future<void> test_keyword2() async {
     addSource('/home/test/lib/b.dart', '''
         lib B;
         int newT1;
@@ -2471,7 +2489,7 @@
     assertNotSuggested('newer');
   }
 
-  test_libraryPrefix() async {
+  Future<void> test_libraryPrefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('import "dart:async" as bar; foo() {bar.^}');
     await computeSuggestions();
@@ -2480,7 +2498,7 @@
     assertNotSuggested('loadLibrary');
   }
 
-  test_libraryPrefix2() async {
+  Future<void> test_libraryPrefix2() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('import "dart:async" as bar; foo() {bar.^ print("f")}');
     await computeSuggestions();
@@ -2488,7 +2506,7 @@
     assertNotSuggested('Future');
   }
 
-  test_libraryPrefix3() async {
+  Future<void> test_libraryPrefix3() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('import "dart:async" as bar; foo() {new bar.F^ print("f")}');
     await computeSuggestions();
@@ -2497,7 +2515,7 @@
     assertNotSuggested('Future.delayed');
   }
 
-  test_libraryPrefix_deferred() async {
+  Future<void> test_libraryPrefix_deferred() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('import "dart:async" deferred as bar; foo() {bar.^}');
     await computeSuggestions();
@@ -2506,7 +2524,7 @@
     assertNotSuggested('loadLibrary');
   }
 
-  test_libraryPrefix_with_exports() async {
+  Future<void> test_libraryPrefix_with_exports() async {
     addSource('/home/test/lib/a.dart', 'class A { }');
     addSource('/home/test/lib/b.dart', 'export "a.dart"; class B { }');
     addTestSource('import "b.dart" as foo; main() {foo.^} class C { }');
@@ -2516,7 +2534,7 @@
     assertNotSuggested('A');
   }
 
-  test_Literal_list() async {
+  Future<void> test_Literal_list() async {
     // ']'  ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([^]);}');
     await computeSuggestions();
@@ -2524,7 +2542,7 @@
     assertNotSuggested('String');
   }
 
-  test_Literal_list2() async {
+  Future<void> test_Literal_list2() async {
     // SimpleIdentifier ListLiteral  ArgumentList  MethodInvocation
     addTestSource('main() {var Some; print([S^]);}');
     await computeSuggestions();
@@ -2532,39 +2550,39 @@
     assertNotSuggested('String');
   }
 
-  test_Literal_string() async {
+  Future<void> test_Literal_string() async {
     // SimpleStringLiteral  ExpressionStatement  Block
     addTestSource('class A {a() {"hel^lo"}}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_local() async {
+  Future<void> test_local() async {
     addTestSource('foo() {String x = "bar"; x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_local_is() async {
+  Future<void> test_local_is() async {
     addTestSource('foo() {var x; if (x is String) x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_local_propogatedType() async {
+  Future<void> test_local_propogatedType() async {
     addTestSource('foo() {var x = "bar"; x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_localVariableDeclarationName() async {
+  Future<void> test_localVariableDeclarationName() async {
     addTestSource('main() {String m^}');
     await computeSuggestions();
     assertNotSuggested('main');
     assertNotSuggested('min');
   }
 
-  test_MapLiteralEntry() async {
+  Future<void> test_MapLiteralEntry() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2591,7 +2609,7 @@
     assertNotSuggested('C2');
   }
 
-  test_MapLiteralEntry1() async {
+  Future<void> test_MapLiteralEntry1() async {
     // MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2611,7 +2629,7 @@
     assertNotSuggested('T2');
   }
 
-  test_MapLiteralEntry2() async {
+  Future<void> test_MapLiteralEntry2() async {
     // SimpleIdentifier  MapLiteralEntry  MapLiteral  VariableDeclaration
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2631,7 +2649,7 @@
     assertNotSuggested('T2');
   }
 
-  test_method_parameter_function_in_param_list() async {
+  Future<void> test_method_parameter_function_in_param_list() async {
     addTestSource('''
 class C {
   void f(int x, void Function(int a, int b) closure, int y) {}
@@ -2651,7 +2669,7 @@
         containsAllInOrder([0, 1, 11, 1, 15, 1]));
   }
 
-  test_method_parameter_function_return_bool() async {
+  Future<void> test_method_parameter_function_return_bool() async {
     addTestSource('''
 class C {
   void f(bool Function(int a, int b) closure) {}
@@ -2671,7 +2689,7 @@
         suggestion.defaultArgumentListTextRanges, containsAllInOrder([10, 5]));
   }
 
-  test_method_parameter_function_return_object() async {
+  Future<void> test_method_parameter_function_return_object() async {
     addTestSource('''
 class C {
   void f(Object Function(int a, int b) closure) {}
@@ -2691,7 +2709,7 @@
         suggestion.defaultArgumentListTextRanges, containsAllInOrder([10, 4]));
   }
 
-  test_method_parameter_function_return_void() async {
+  Future<void> test_method_parameter_function_return_void() async {
     addTestSource('''
 class C {
   void f(void Function(int a, int b) closure) {}
@@ -2711,7 +2729,7 @@
         suggestion.defaultArgumentListTextRanges, containsAllInOrder([8, 1]));
   }
 
-  test_method_parameters_mixed_required_and_named() async {
+  Future<void> test_method_parameters_mixed_required_and_named() async {
     addTestSource('''
 class C {
   void m(x, {int y}) {}
@@ -2728,7 +2746,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_mixed_required_and_positional() async {
+  Future<void> test_method_parameters_mixed_required_and_positional() async {
     addTestSource('''
 class C {
   void m(x, [int y]) {}
@@ -2745,7 +2763,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_named() async {
+  Future<void> test_method_parameters_named() async {
     addTestSource('''
 class C {
   void m({x, int y}) {}
@@ -2762,7 +2780,7 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
-  test_method_parameters_none() async {
+  Future<void> test_method_parameters_none() async {
     addTestSource('''
 class C {
   void m() {}
@@ -2776,7 +2794,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_positional() async {
+  Future<void> test_method_parameters_positional() async {
     addTestSource('''
 class C {
   void m([x, int y]) {}
@@ -2793,7 +2811,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_method_parameters_required() async {
+  Future<void> test_method_parameters_required() async {
     addTestSource('''
 class C {
   void m(x, int y) {}
@@ -2810,7 +2828,7 @@
     expect(suggestion.hasNamedParameters, false);
   }
 
-  test_MethodDeclaration_body_getters() async {
+  Future<void> test_MethodDeclaration_body_getters() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}');
     await computeSuggestions();
@@ -2821,7 +2839,7 @@
     assertNotSuggested('_g');
   }
 
-  test_MethodDeclaration_body_static() async {
+  Future<void> test_MethodDeclaration_body_static() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addSource('/testC.dart', '''
         class C {
@@ -2857,7 +2875,7 @@
     assertNotSuggested('c4');
   }
 
-  test_MethodDeclaration_members() async {
+  Future<void> test_MethodDeclaration_members() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}');
     await computeSuggestions();
@@ -2869,7 +2887,7 @@
     assertNotSuggested('bool');
   }
 
-  test_MethodDeclaration_parameters_named() async {
+  Future<void> test_MethodDeclaration_parameters_named() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {@deprecated Z a(X x, _, b, {y: boo}) {^}}');
     await computeSuggestions();
@@ -2883,7 +2901,7 @@
     assertNotSuggested('_');
   }
 
-  test_MethodDeclaration_parameters_positional() async {
+  Future<void> test_MethodDeclaration_parameters_positional() async {
     // Block  BlockFunctionBody  MethodDeclaration
     addTestSource('''
         foo() { }
@@ -2900,7 +2918,7 @@
     assertNotSuggested('String');
   }
 
-  test_MethodDeclaration_returnType() async {
+  Future<void> test_MethodDeclaration_returnType() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2928,7 +2946,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment() async {
     // ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2956,7 +2974,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment2() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment2() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -2984,7 +3002,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodDeclaration_returnType_afterComment3() async {
+  Future<void> test_MethodDeclaration_returnType_afterComment3() async {
     // MethodDeclaration  ClassDeclaration  CompilationUnit
     addSource('/home/test/lib/a.dart', '''
         int T1;
@@ -3014,7 +3032,7 @@
     assertNotSuggested('name');
   }
 
-  test_MethodInvocation_no_semicolon() async {
+  Future<void> test_MethodInvocation_no_semicolon() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource(r'''
         main() { }
@@ -3048,7 +3066,7 @@
     assertNotSuggested('==');
   }
 
-  test_mixin() async {
+  Future<void> test_mixin() async {
     addTestSource(r'''
 class A {
   void a() {}
@@ -3072,7 +3090,7 @@
     assertSuggestMethod('x', 'X', 'void');
   }
 
-  test_new_instance() async {
+  Future<void> test_new_instance() async {
     addTestSource('import "dart:math"; class A {x() {new Random().^}}');
     await computeSuggestions();
     assertSuggestMethod('nextBool', 'Random', 'bool');
@@ -3083,7 +3101,7 @@
     assertNotSuggested('A');
   }
 
-  test_no_parameters_field() async {
+  Future<void> test_no_parameters_field() async {
     addTestSource('''
 class C {
   int x;
@@ -3094,7 +3112,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_no_parameters_getter() async {
+  Future<void> test_no_parameters_getter() async {
     addTestSource('''
 class C {
   int get x => null;
@@ -3105,7 +3123,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_no_parameters_setter() async {
+  Future<void> test_no_parameters_setter() async {
     addTestSource('''
 class C {
   set x(int value) {};
@@ -3116,7 +3134,7 @@
     assertHasNoParameterInfo(suggestion);
   }
 
-  test_only_instance() async {
+  Future<void> test_only_instance() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addTestSource('''
 class C {
@@ -3133,7 +3151,7 @@
     assertNotSuggested('m2');
   }
 
-  test_only_instance2() async {
+  Future<void> test_only_instance2() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('''
 class C {
@@ -3150,7 +3168,7 @@
     assertNotSuggested('m2');
   }
 
-  test_only_static() async {
+  Future<void> test_only_static() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
 class C {
@@ -3168,7 +3186,7 @@
     assertNotSuggested('m2');
   }
 
-  test_only_static2() async {
+  Future<void> test_only_static2() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('''
 class C {
@@ -3186,26 +3204,26 @@
     assertNotSuggested('m2');
   }
 
-  test_param() async {
+  Future<void> test_param() async {
     addTestSource('foo(String x) {x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_param_is() async {
+  Future<void> test_param_is() async {
     addTestSource('foo(x) {if (x is String) x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_parameterName_excludeTypes() async {
+  Future<void> test_parameterName_excludeTypes() async {
     addTestSource('m(int ^) {}');
     await computeSuggestions();
     assertNotSuggested('int');
     assertNotSuggested('bool');
   }
 
-  test_partFile_TypeName() async {
+  Future<void> test_partFile_TypeName() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3237,7 +3255,7 @@
     assertNotSuggested('m');
   }
 
-  test_partFile_TypeName2() async {
+  Future<void> test_partFile_TypeName2() async {
     // SimpleIdentifier  TypeName  ConstructorName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3269,7 +3287,7 @@
     assertNotSuggested('m');
   }
 
-  test_PrefixedIdentifier_class_const() async {
+  Future<void> test_PrefixedIdentifier_class_const() async {
     // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3315,7 +3333,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_imported() async {
+  Future<void> test_PrefixedIdentifier_class_imported() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3351,7 +3369,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_class_local() async {
+  Future<void> test_PrefixedIdentifier_class_local() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('''
         main() {A a; a.^}
@@ -3384,14 +3402,14 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_getter() async {
+  Future<void> test_PrefixedIdentifier_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_library() async {
+  Future<void> test_PrefixedIdentifier_library() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3417,7 +3435,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3443,7 +3461,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_library_typesOnly2() async {
+  Future<void> test_PrefixedIdentifier_library_typesOnly2() async {
     // SimpleIdentifier  PrefixedIdentifier  TypeName
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3469,7 +3487,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_parameter() async {
+  Future<void> test_PrefixedIdentifier_parameter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/b.dart', '''
         lib B;
@@ -3487,7 +3505,7 @@
     assertNotSuggested('==');
   }
 
-  test_PrefixedIdentifier_prefix() async {
+  Future<void> test_PrefixedIdentifier_prefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
         class A {static int bar = 10;}
@@ -3505,7 +3523,7 @@
     assertNotSuggested('_B');
   }
 
-  test_PrefixedIdentifier_propertyAccess() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^}');
     await computeSuggestions();
@@ -3515,7 +3533,7 @@
     assertSuggestMethod('compareTo', 'Comparable', 'int');
   }
 
-  test_PrefixedIdentifier_propertyAccess_newStmt() async {
+  Future<void> test_PrefixedIdentifier_propertyAccess_newStmt() async {
     // PrefixedIdentifier  ExpressionStatement  Block  BlockFunctionBody
     addTestSource('class A {String x; int get foo {x.^ int y = 0;}');
     await computeSuggestions();
@@ -3525,14 +3543,14 @@
     assertSuggestMethod('compareTo', 'Comparable', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_const() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_const() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('const String g = "hello"; f() {g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_const_untyped() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_const_untyped() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('const g = "hello"; f() {g.^ int y = 0;}');
     await computeSuggestions();
@@ -3540,77 +3558,77 @@
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_field() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_field() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g; f() {g.^ int y = 0;}}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_function() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_function() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g() => "one"; f() {g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_functionTypeAlias() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('typedef String g(); f() {g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_getter() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_getter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String get g => "one"; f() {g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_typed() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_typed() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {String g; g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_local_untyped() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_local_untyped() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f() {var g = "hello"; g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_method() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_method() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {String g() {}; f() {g.^ int y = 0;}}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('class A {f(String g) {g.^ int y = 0;}}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_param2() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_param2() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('f(String g) {g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
+  Future<void> test_PrefixedIdentifier_trailingStmt_topLevelVar() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addTestSource('String g; f() {g.^ int y = 0;}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
   }
 
-  test_PropertyAccess_expression() async {
+  Future<void> test_PropertyAccess_expression() async {
     // SimpleIdentifier  MethodInvocation  PropertyAccess  ExpressionStatement
     addTestSource('class A {a() {"hello".to^String().length}}');
     await computeSuggestions();
@@ -3623,7 +3641,7 @@
     assertNotSuggested('==');
   }
 
-  test_PropertyAccess_noTarget() async {
+  Future<void> test_PropertyAccess_noTarget() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/testAB.dart', 'class Foo { }');
     addTestSource('class C {foo(){.^}}');
@@ -3631,7 +3649,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_noTarget2() async {
+  Future<void> test_PropertyAccess_noTarget2() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement
     addSource('/testAB.dart', 'class Foo { }');
     addTestSource('main() {.^}');
@@ -3639,7 +3657,7 @@
     assertNoSuggestions();
   }
 
-  test_PropertyAccess_selector() async {
+  Future<void> test_PropertyAccess_selector() async {
     // SimpleIdentifier  PropertyAccess  ExpressionStatement  Block
     addTestSource('class A {a() {"hello".length.^}}');
     await computeSuggestions();
@@ -3652,43 +3670,43 @@
     assertNotSuggested('==');
   }
 
-  test_shadowing_field_over_field() =>
+  Future<void> test_shadowing_field_over_field() =>
       check_shadowing('int x;', 'int x;', true);
 
-  test_shadowing_field_over_getter() =>
+  Future<void> test_shadowing_field_over_getter() =>
       check_shadowing('int x;', 'int get x => null;', true);
 
-  test_shadowing_field_over_method() =>
+  Future<void> test_shadowing_field_over_method() =>
       check_shadowing('int x;', 'void x() {}', true);
 
-  test_shadowing_field_over_setter() =>
+  Future<void> test_shadowing_field_over_setter() =>
       check_shadowing('int x;', 'set x(int value) {}', true);
 
-  test_shadowing_getter_over_field() =>
+  Future<void> test_shadowing_getter_over_field() =>
       check_shadowing('int get x => null;', 'int x;', false);
 
-  test_shadowing_getter_over_getter() =>
+  Future<void> test_shadowing_getter_over_getter() =>
       check_shadowing('int get x => null;', 'int get x => null;', true);
 
-  test_shadowing_getter_over_method() =>
+  Future<void> test_shadowing_getter_over_method() =>
       check_shadowing('int get x => null;', 'void x() {}', true);
 
-  test_shadowing_getter_over_setter() =>
+  Future<void> test_shadowing_getter_over_setter() =>
       check_shadowing('int get x => null;', 'set x(int value) {}', false);
 
-  test_shadowing_method_over_field() =>
+  Future<void> test_shadowing_method_over_field() =>
       check_shadowing('void x() {}', 'int x;', true);
 
-  test_shadowing_method_over_getter() =>
+  Future<void> test_shadowing_method_over_getter() =>
       check_shadowing('void x() {}', 'int get x => null;', true);
 
-  test_shadowing_method_over_method() =>
+  Future<void> test_shadowing_method_over_method() =>
       check_shadowing('void x() {}', 'void x() {}', true);
 
-  test_shadowing_method_over_setter() =>
+  Future<void> test_shadowing_method_over_setter() =>
       check_shadowing('void x() {}', 'set x(int value) {}', true);
 
-  test_shadowing_mixin_order() async {
+  Future<void> test_shadowing_mixin_order() async {
     addTestSource('''
 class Base {
 }
@@ -3713,7 +3731,7 @@
     assertSuggestMethod('f', 'Mixin2', 'void');
   }
 
-  test_shadowing_mixin_over_superclass() async {
+  Future<void> test_shadowing_mixin_over_superclass() async {
     addTestSource('''
 class Base {
   void f() {}
@@ -3731,19 +3749,19 @@
     assertSuggestMethod('f', 'Mixin', 'void');
   }
 
-  test_shadowing_setter_over_field() =>
+  Future<void> test_shadowing_setter_over_field() =>
       check_shadowing('set x(int value) {}', 'int x;', false);
 
-  test_shadowing_setter_over_getter() =>
+  Future<void> test_shadowing_setter_over_getter() =>
       check_shadowing('set x(int value) {}', 'int get x => null;', false);
 
-  test_shadowing_setter_over_method() =>
+  Future<void> test_shadowing_setter_over_method() =>
       check_shadowing('set x(int value) {}', 'void x() {}', true);
 
-  test_shadowing_setter_over_setter() =>
+  Future<void> test_shadowing_setter_over_setter() =>
       check_shadowing('set x(int value) {}', 'set x(int value) {}', true);
 
-  test_shadowing_superclass_over_interface() async {
+  Future<void> test_shadowing_superclass_over_interface() async {
     addTestSource('''
 class Base {
   void f() {}
@@ -3761,7 +3779,7 @@
     assertSuggestMethod('f', 'Base', 'void');
   }
 
-  test_super() async {
+  Future<void> test_super() async {
     // SimpleIdentifier  MethodInvocation  ExpressionStatement
     addTestSource('''
 class C3 {
@@ -3801,7 +3819,7 @@
     assertNotSuggested('ms3');
   }
 
-  test_super_fromSuperclassConstraint() async {
+  Future<void> test_super_fromSuperclassConstraint() async {
     addTestSource('''
 class C {
   void c(x, int y) {}
@@ -3814,7 +3832,7 @@
     assertSuggestMethod('c', 'C', 'void');
   }
 
-  test_super_withMixin() async {
+  Future<void> test_super_withMixin() async {
     addTestSource('''
 mixin M {
   void m() {}
@@ -3831,14 +3849,14 @@
     assertSuggestMethod('m', 'M', 'void');
   }
 
-  test_SwitchStatement_c() async {
+  Future<void> test_SwitchStatement_c() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {c^}}}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_SwitchStatement_case() async {
+  Future<void> test_SwitchStatement_case() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {var t; switch(x) {case 0: ^}}}');
     await computeSuggestions();
@@ -3848,14 +3866,14 @@
     assertNotSuggested('String');
   }
 
-  test_SwitchStatement_empty() async {
+  Future<void> test_SwitchStatement_empty() async {
     // SwitchStatement  Block  BlockFunctionBody  MethodDeclaration
     addTestSource('class A {String g(int x) {switch(x) {^}}}');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_ThisExpression_block() async {
+  Future<void> test_ThisExpression_block() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
         main() { }
@@ -3890,7 +3908,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor() async {
+  Future<void> test_ThisExpression_constructor() async {
     // MethodInvocation  ExpressionStatement  Block
     addTestSource('''
         main() { }
@@ -3925,7 +3943,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param() async {
+  Future<void> test_ThisExpression_constructor_param() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -3962,7 +3980,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param2() async {
+  Future<void> test_ThisExpression_constructor_param2() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -3998,7 +4016,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param3() async {
+  Future<void> test_ThisExpression_constructor_param3() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -4034,7 +4052,7 @@
     assertNotSuggested('==');
   }
 
-  test_ThisExpression_constructor_param4() async {
+  Future<void> test_ThisExpression_constructor_param4() async {
     // SimpleIdentifier  FieldFormalParameter  FormalParameterList
     addTestSource('''
         main() { }
@@ -4070,7 +4088,7 @@
     assertNotSuggested('==');
   }
 
-  test_TopLevelVariableDeclaration_typed_name() async {
+  Future<void> test_TopLevelVariableDeclaration_typed_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} B ^');
@@ -4078,7 +4096,7 @@
     assertNoSuggestions();
   }
 
-  test_TopLevelVariableDeclaration_untyped_name() async {
+  Future<void> test_TopLevelVariableDeclaration_untyped_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // TopLevelVariableDeclaration
     addTestSource('class A {} var ^');
@@ -4086,7 +4104,7 @@
     assertNoSuggestions();
   }
 
-  test_TypeArgumentList() async {
+  Future<void> test_TypeArgumentList() async {
     // SimpleIdentifier  BinaryExpression  ExpressionStatement
     addSource('/home/test/lib/a.dart', '''
         class C1 {int x;}
@@ -4111,7 +4129,7 @@
     assertNotSuggested('F2');
   }
 
-  test_TypeArgumentList2() async {
+  Future<void> test_TypeArgumentList2() async {
     // TypeName  TypeArgumentList  TypeName
     addSource('/home/test/lib/a.dart', '''
         class C1 {int x;}
@@ -4131,7 +4149,7 @@
     assertNotSuggested('C2');
   }
 
-  test_VariableDeclaration_name() async {
+  Future<void> test_VariableDeclaration_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
     addSource('/home/test/lib/b.dart', '''
@@ -4147,7 +4165,7 @@
     assertNoSuggestions();
   }
 
-  test_VariableDeclarationList_final() async {
+  Future<void> test_VariableDeclarationList_final() async {
     // VariableDeclarationList  VariableDeclarationStatement  Block
     addTestSource('main() {final ^} class C { }');
     await computeSuggestions();
@@ -4156,7 +4174,7 @@
     assertNotSuggested('==');
   }
 
-  test_VariableDeclarationStatement_RHS() async {
+  Future<void> test_VariableDeclarationStatement_RHS() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
@@ -4180,7 +4198,7 @@
     assertNotSuggested('e');
   }
 
-  test_VariableDeclarationStatement_RHS_missing_semicolon() async {
+  Future<void> test_VariableDeclarationStatement_RHS_missing_semicolon() async {
     // VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement
     addSource('/home/test/lib/b.dart', '''
@@ -4226,7 +4244,7 @@
     super.setUp();
   }
 
-  test_extensionOverride() async {
+  Future<void> test_extensionOverride() async {
     addTestSource('''
 extension E on int {
   int get foo => 0;
diff --git a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
index 173e70e..bcfffa1 100644
--- a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
@@ -12,7 +12,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UriContributorTest);
     defineReflectiveTests(UriContributorWindowsTest);
@@ -26,7 +26,7 @@
     return UriContributor();
   }
 
-  test_after_import() async {
+  Future<void> test_after_import() async {
     addTestSource('import "p"^');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -34,7 +34,7 @@
     assertNoSuggestions();
   }
 
-  test_after_import_raw() async {
+  Future<void> test_after_import_raw() async {
     addTestSource('import r"p"^');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -42,7 +42,7 @@
     assertNoSuggestions();
   }
 
-  test_before_import() async {
+  Future<void> test_before_import() async {
     addTestSource('import ^"p"');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -50,7 +50,7 @@
     assertNoSuggestions();
   }
 
-  test_before_import_raw() async {
+  Future<void> test_before_import_raw() async {
     addTestSource('import ^r"p"');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -58,7 +58,7 @@
     assertNoSuggestions();
   }
 
-  test_before_import_raw2() async {
+  Future<void> test_before_import_raw2() async {
     addTestSource('import r^"p"');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -66,7 +66,7 @@
     assertNoSuggestions();
   }
 
-  test_export_package2() async {
+  Future<void> test_export_package2() async {
     addPackageFile('foo', 'foo.dart', 'library foo;');
     addPackageFile('foo', 'baz/too.dart', 'library too;');
     addPackageFile('bar', 'bar.dart', 'library bar;');
@@ -76,7 +76,7 @@
         csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_export_package2_off() async {
+  Future<void> test_export_package2_off() async {
     try {
       UriContributor.suggestFilePaths = false;
       addPackageFile('foo', 'foo.dart', 'library foo;');
@@ -90,7 +90,7 @@
     }
   }
 
-  test_import() async {
+  Future<void> test_import() async {
     addTestSource('import "^"');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -99,7 +99,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import2() async {
+  Future<void> test_import2() async {
     addTestSource('import "^" import');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -108,7 +108,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import3() async {
+  Future<void> test_import3() async {
     addTestSource('import "^ import');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -117,7 +117,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_dart() async {
+  Future<void> test_import_dart() async {
     addTestSource('import "d^" import');
     await computeSuggestions();
     expect(replacementOffset, completionOffset - 1);
@@ -130,7 +130,7 @@
     assertSuggest('dart:math', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_dart2() async {
+  Future<void> test_import_dart2() async {
     addTestSource('import "dart:async"; import "d^"');
     await computeSuggestions();
     expect(replacementOffset, completionOffset - 1);
@@ -143,7 +143,7 @@
     assertSuggest('dart:math', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_file() async {
+  Future<void> test_import_file() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -160,7 +160,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file2() async {
+  Future<void> test_import_file2() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -177,7 +177,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file2_off() async {
+  Future<void> test_import_file2_off() async {
     try {
       UriContributor.suggestFilePaths = false;
       testFile = convertPath('/proj/completion.dart');
@@ -199,7 +199,7 @@
     }
   }
 
-  test_import_file_child() async {
+  Future<void> test_import_file_child() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -216,7 +216,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file_outside_lib() async {
+  Future<void> test_import_file_outside_lib() async {
     testFile = convertPath('/proj/lib/completion.dart');
     addSource('/proj/lib/other.dart', 'library other;');
     addSource('/proj/lib/foo/bar.dart', 'library bar;');
@@ -236,7 +236,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file_parent() async {
+  Future<void> test_import_file_parent() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -255,7 +255,7 @@
     assertSuggest('../proj2/', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_file_parent2() async {
+  Future<void> test_import_file_parent2() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -272,7 +272,7 @@
     assertSuggest('../blat.dart', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_no_dot_folders() async {
+  Future<void> test_import_no_dot_folders() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     newFolder('/proj/.fooFolder');
@@ -281,7 +281,7 @@
     assertNotSuggested('.fooFolder/');
   }
 
-  test_import_only_dart_files() async {
+  Future<void> test_import_only_dart_files() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     newFile('/proj/analysis_options.yaml', content: '# analysis options');
@@ -290,7 +290,7 @@
     assertNotSuggested('analysis_options.yaml');
   }
 
-  test_import_package() async {
+  Future<void> test_import_package() async {
     addPackageFile('foo', 'foo.dart', 'library foo;');
     addPackageFile('foo', 'baz/too.dart', 'library too;');
     addPackageFile('bar', 'bar.dart', 'library bar;');
@@ -309,7 +309,7 @@
         csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_package2() async {
+  Future<void> test_import_package2() async {
     addPackageFile('foo', 'foo.dart', 'library foo;');
     addPackageFile('foo', 'baz/too.dart', 'library too;');
     addPackageFile('bar', 'bar.dart', 'library bar;');
@@ -319,7 +319,7 @@
         csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_package2_off() async {
+  Future<void> test_import_package2_off() async {
     try {
       UriContributor.suggestFilePaths = false;
       addPackageFile('foo', 'foo.dart', 'library foo;');
@@ -333,7 +333,7 @@
     }
   }
 
-  test_import_package2_raw() async {
+  Future<void> test_import_package2_raw() async {
     addPackageFile('foo', 'foo.dart', 'library foo;');
     addPackageFile('foo', 'baz/too.dart', 'library too;');
     addPackageFile('bar', 'bar.dart', 'library bar;');
@@ -343,7 +343,7 @@
         csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_package2_with_trailing() async {
+  Future<void> test_import_package2_with_trailing() async {
     addPackageFile('foo', 'foo.dart', 'library foo;');
     addPackageFile('foo', 'baz/too.dart', 'library too;');
     addPackageFile('bar', 'bar.dart', 'library bar;');
@@ -355,7 +355,7 @@
     expect(replacementLength, 5 + 16);
   }
 
-  test_import_package_missing_lib() async {
+  Future<void> test_import_package_missing_lib() async {
     var pkgFile = addPackageFile('bar', 'bar.dart', 'library bar;');
     deleteFolder(pkgFile.parent.path);
     addTestSource('import "p^" class');
@@ -367,7 +367,7 @@
     assertNotSuggested('package:bar/bar.dart');
   }
 
-  test_import_package_raw() async {
+  Future<void> test_import_package_raw() async {
     addPackageFile('foo', 'foo.dart', 'library foo;');
     addPackageFile('foo', 'baz/too.dart', 'library too;');
     addPackageFile('bar', 'bar.dart', 'library bar;');
@@ -386,7 +386,7 @@
         csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_raw() async {
+  Future<void> test_import_raw() async {
     addTestSource('import r"^" import');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -395,7 +395,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_without_any_quotes() async {
+  Future<void> test_import_without_any_quotes() async {
     addTestSource('import ^ import');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -403,7 +403,7 @@
     assertNoSuggestions();
   }
 
-  test_import_without_any_quotes_eof() async {
+  Future<void> test_import_without_any_quotes_eof() async {
     addTestSource('import ^');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -411,7 +411,7 @@
     assertNoSuggestions();
   }
 
-  test_import_without_closing_quote_eof() async {
+  Future<void> test_import_without_closing_quote_eof() async {
     addTestSource('import "^');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -420,7 +420,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_without_closing_quote_eof2() async {
+  Future<void> test_import_without_closing_quote_eof2() async {
     addTestSource('import "^d');
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
@@ -429,7 +429,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_without_closing_quote_eof3() async {
+  Future<void> test_import_without_closing_quote_eof3() async {
     addTestSource('import "d^');
     await computeSuggestions();
     expect(replacementOffset, completionOffset - 1);
@@ -438,7 +438,7 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_without_closing_quote_eof4() async {
+  Future<void> test_import_without_closing_quote_eof4() async {
     addTestSource('import "d^"');
     await computeSuggestions();
     expect(replacementOffset, completionOffset - 1);
@@ -447,19 +447,19 @@
     assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_outside_import() async {
+  Future<void> test_outside_import() async {
     addTestSource('import ^"d" import');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_outside_import2() async {
+  Future<void> test_outside_import2() async {
     addTestSource('import "d"^ import');
     await computeSuggestions();
     assertNoSuggestions();
   }
 
-  test_part_file() async {
+  Future<void> test_part_file() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -476,7 +476,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_part_file2() async {
+  Future<void> test_part_file2() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -493,7 +493,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_part_file_child() async {
+  Future<void> test_part_file_child() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -510,7 +510,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_part_file_parent() async {
+  Future<void> test_part_file_parent() async {
     testFile = convertPath('/proj/completion.dart');
     addSource('/proj/other.dart', 'library other;');
     addSource('/proj/foo/bar.dart', 'library bar;');
@@ -540,7 +540,7 @@
     resourceProvider = MemoryResourceProvider(context: windows);
   }
 
-  test_import_file() async {
+  Future<void> test_import_file() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -557,7 +557,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file2() async {
+  Future<void> test_import_file2() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -574,7 +574,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file_child() async {
+  Future<void> test_import_file_child() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -591,7 +591,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_import_file_parent() async {
+  Future<void> test_import_file_parent() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -608,7 +608,7 @@
     assertSuggest('../blat.dart', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_import_file_parent2() async {
+  Future<void> test_import_file_parent2() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -625,7 +625,7 @@
     assertSuggest('../blat.dart', csKind: CompletionSuggestionKind.IMPORT);
   }
 
-  test_part_file() async {
+  Future<void> test_part_file() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -642,7 +642,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_part_file2() async {
+  Future<void> test_part_file2() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -659,7 +659,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_part_file_child() async {
+  Future<void> test_part_file_child() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
@@ -676,7 +676,7 @@
     assertNotSuggested('../blat.dart');
   }
 
-  test_part_file_parent() async {
+  Future<void> test_part_file_parent() async {
     testFile = convertPath('\\proj\\completion.dart');
     addSource('\\proj\\other.dart', 'library other;');
     addSource('\\proj\\foo\\bar.dart', 'library bar;');
diff --git a/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
index 1d2f19d..3b75a53 100644
--- a/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
@@ -9,7 +9,7 @@
 
 import 'completion_contributor_util.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(VariableNameContributorTest);
   });
@@ -22,7 +22,7 @@
     return VariableNameContributor();
   }
 
-  test_ExpressionStatement_dont_suggest_type() async {
+  Future<void> test_ExpressionStatement_dont_suggest_type() async {
     addTestSource('''
     f() { a ^ }
     ''');
@@ -32,7 +32,7 @@
     assertNotSuggested('a');
   }
 
-  test_ExpressionStatement_dont_suggest_type_semicolon() async {
+  Future<void> test_ExpressionStatement_dont_suggest_type_semicolon() async {
     addTestSource('''
     f() { a ^; }
     ''');
@@ -42,7 +42,7 @@
     assertNotSuggested('a');
   }
 
-  test_ExpressionStatement_inConstructorBody() async {
+  Future<void> test_ExpressionStatement_inConstructorBody() async {
     addTestSource('''
     class A { A() { AbstractCrazyNonsenseClassName ^ } }
     ''');
@@ -63,7 +63,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ExpressionStatement_inFunctionBody() async {
+  Future<void> test_ExpressionStatement_inFunctionBody() async {
     addTestSource('''
     f() { AbstractCrazyNonsenseClassName ^ }
     ''');
@@ -83,7 +83,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ExpressionStatement_inMethodBody() async {
+  Future<void> test_ExpressionStatement_inMethodBody() async {
     addTestSource('''
     class A { f() { AbstractCrazyNonsenseClassName ^ } }
     ''');
@@ -103,7 +103,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ExpressionStatement_long_semicolon() async {
+  Future<void> test_ExpressionStatement_long_semicolon() async {
     addTestSource('''
     f() { AbstractCrazyNonsenseClassName ^; }
     ''');
@@ -123,7 +123,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ExpressionStatement_prefixed() async {
+  Future<void> test_ExpressionStatement_prefixed() async {
     addTestSource('''
     f() { prefix.AbstractCrazyNonsenseClassName ^ }
     ''');
@@ -143,7 +143,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ExpressionStatement_prefixed_semicolon() async {
+  Future<void> test_ExpressionStatement_prefixed_semicolon() async {
     addTestSource('''
     f() { prefix.AbstractCrazyNonsenseClassName ^; }
     ''');
@@ -163,7 +163,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ExpressionStatement_short() async {
+  Future<void> test_ExpressionStatement_short() async {
     addTestSource('''
     f() { A ^ }
     ''');
@@ -175,7 +175,7 @@
     assertNotSuggested('_a');
   }
 
-  test_ExpressionStatement_short_semicolon() async {
+  Future<void> test_ExpressionStatement_short_semicolon() async {
     addTestSource('''
     f() { A ^; }
     ''');
@@ -188,7 +188,7 @@
   }
 
   @failingTest
-  test_ForStatement() async {
+  Future<void> test_ForStatement() async {
     addTestSource('''
     f() { for(AbstractCrazyNonsenseClassName ^) {} }
     ''');
@@ -208,7 +208,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ForStatement_partial() async {
+  Future<void> test_ForStatement_partial() async {
     addTestSource('''
     f() { for(AbstractCrazyNonsenseClassName a^) {} }
     ''');
@@ -229,7 +229,7 @@
   }
 
   @failingTest
-  test_ForStatement_prefixed() async {
+  Future<void> test_ForStatement_prefixed() async {
     addTestSource('''
     f() { for(prefix.AbstractCrazyNonsenseClassName ^) {} }
     ''');
@@ -249,7 +249,7 @@
     assertNotSuggested('_name');
   }
 
-  test_ForStatement_prefixed_partial() async {
+  Future<void> test_ForStatement_prefixed_partial() async {
     addTestSource('''
     f() { for(prefix.AbstractCrazyNonsenseClassName a^) {} }
     ''');
@@ -269,7 +269,7 @@
     assertNotSuggested('_name');
   }
 
-  test_SimpleFormalParameter_FormalParameterList() async {
+  Future<void> test_SimpleFormalParameter_FormalParameterList() async {
     addTestSource('''
 f(A ^) {}
 ''');
@@ -281,7 +281,7 @@
     assertNotSuggested('_a');
   }
 
-  test_SimpleFormalParameter_itself() async {
+  Future<void> test_SimpleFormalParameter_itself() async {
     addTestSource('''
 f(A n^) {}
 ''');
@@ -293,7 +293,7 @@
     assertNotSuggested('_a');
   }
 
-  test_TopLevelVariableDeclaration_dont_suggest_type() async {
+  Future<void> test_TopLevelVariableDeclaration_dont_suggest_type() async {
     addTestSource('''
     a ^
     ''');
@@ -305,7 +305,8 @@
     assertNotSuggested('_a');
   }
 
-  test_TopLevelVariableDeclaration_dont_suggest_type_semicolon() async {
+  Future<void>
+      test_TopLevelVariableDeclaration_dont_suggest_type_semicolon() async {
     addTestSource('''
     a ^;
     ''');
@@ -317,7 +318,7 @@
     assertNotSuggested('_a');
   }
 
-  test_TopLevelVariableDeclaration_long() async {
+  Future<void> test_TopLevelVariableDeclaration_long() async {
     addTestSource('''
     AbstractCrazyNonsenseClassName ^
     ''');
@@ -337,7 +338,7 @@
     assertSuggestName('_name');
   }
 
-  test_TopLevelVariableDeclaration_long_semicolon() async {
+  Future<void> test_TopLevelVariableDeclaration_long_semicolon() async {
     addTestSource('''
     AbstractCrazyNonsenseClassName ^;
     ''');
@@ -357,7 +358,7 @@
     assertSuggestName('_name');
   }
 
-  test_TopLevelVariableDeclaration_partial() async {
+  Future<void> test_TopLevelVariableDeclaration_partial() async {
     addTestSource('''
     AbstractCrazyNonsenseClassName abs^
     ''');
@@ -377,7 +378,7 @@
     assertSuggestName('_name');
   }
 
-  test_TopLevelVariableDeclaration_partial_semicolon() async {
+  Future<void> test_TopLevelVariableDeclaration_partial_semicolon() async {
     addTestSource('''
     AbstractCrazyNonsenseClassName abs^
     ''');
@@ -397,7 +398,7 @@
     assertSuggestName('_name');
   }
 
-  test_TopLevelVariableDeclaration_prefixed() async {
+  Future<void> test_TopLevelVariableDeclaration_prefixed() async {
     addTestSource('''
     prefix.AbstractCrazyNonsenseClassName ^
     ''');
@@ -417,7 +418,7 @@
     assertSuggestName('_name');
   }
 
-  test_TopLevelVariableDeclaration_prefixed_semicolon() async {
+  Future<void> test_TopLevelVariableDeclaration_prefixed_semicolon() async {
     addTestSource('''
     prefix.AbstractCrazyNonsenseClassName ^;
     ''');
@@ -437,7 +438,7 @@
     assertSuggestName('_name');
   }
 
-  test_TopLevelVariableDeclaration_short() async {
+  Future<void> test_TopLevelVariableDeclaration_short() async {
     addTestSource('''
     A ^
     ''');
@@ -449,7 +450,7 @@
     assertSuggestName('_a');
   }
 
-  test_TopLevelVariableDeclaration_short_semicolon() async {
+  Future<void> test_TopLevelVariableDeclaration_short_semicolon() async {
     addTestSource('''
     A ^;
     ''');
diff --git a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
index a83ad3c..22a6854 100644
--- a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
@@ -11,7 +11,7 @@
 
 import '../../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_AssertTest);
     defineReflectiveTests(_ForTest);
@@ -86,7 +86,7 @@
 
 @reflectiveTest
 class _AssertTest extends PostfixCompletionTest {
-  test_assert() async {
+  Future<void> test_assert() async {
     await _prepareCompletion('.assert', '''
 f(bool expr) {
   expr.assert
@@ -99,7 +99,7 @@
 ''');
   }
 
-  test_assertFunc() async {
+  Future<void> test_assertFunc() async {
     await _prepareCompletion('.assert', '''
 f() {
   () => true.assert
@@ -112,7 +112,7 @@
 ''');
   }
 
-  test_assertFunc_invalid() async {
+  Future<void> test_assertFunc_invalid() async {
     await _assertNotApplicable('.assert', '''
 f() {
   () => null.assert
@@ -120,7 +120,7 @@
 ''');
   }
 
-  test_assertFuncCmp() async {
+  Future<void> test_assertFuncCmp() async {
     await _prepareCompletion('.assert', '''
 f(int x, int y) {
   () => x + 3 > y + 4.assert
@@ -136,7 +136,7 @@
 
 @reflectiveTest
 class _ForTest extends PostfixCompletionTest {
-  test_for_invalid() async {
+  Future<void> test_for_invalid() async {
     await _assertNotApplicable('.for', '''
 f() {
   {}.for
@@ -144,7 +144,7 @@
 ''');
   }
 
-  test_forEmptyDynamic() async {
+  Future<void> test_forEmptyDynamic() async {
     await _prepareCompletion('.for', '''
 f() {
   [].for
@@ -159,7 +159,7 @@
 ''');
   }
 
-  test_forEmptyString() async {
+  Future<void> test_forEmptyString() async {
     await _prepareCompletion('.for', '''
 f() {
   <String>[].for
@@ -174,7 +174,7 @@
 ''');
   }
 
-  test_fori() async {
+  Future<void> test_fori() async {
     await _prepareCompletion('.fori', '''
 f() {
   100.fori
@@ -189,7 +189,7 @@
 ''');
   }
 
-  test_fori_invalid() async {
+  Future<void> test_fori_invalid() async {
     await _assertNotApplicable('.fori', '''
 f() {
   [].fori
@@ -197,7 +197,7 @@
 ''');
   }
 
-  test_forIntList() async {
+  Future<void> test_forIntList() async {
     await _prepareCompletion('.for', '''
 f() {
   [1,2,3].for
@@ -212,7 +212,7 @@
 ''');
   }
 
-  test_foriVar() async {
+  Future<void> test_foriVar() async {
     await _prepareCompletion('.fori', '''
 f() {
   var n = 100;
@@ -229,7 +229,7 @@
 ''');
   }
 
-  test_iter_List_dynamic() async {
+  Future<void> test_iter_List_dynamic() async {
     await _prepareCompletion('.iter', '''
 f(List values) {
   values.iter
@@ -244,7 +244,7 @@
 ''');
   }
 
-  test_iter_List_int() async {
+  Future<void> test_iter_List_int() async {
     await _prepareCompletion('.iter', '''
 f(List<int> values) {
   values.iter
@@ -259,7 +259,7 @@
 ''');
   }
 
-  test_iterList() async {
+  Future<void> test_iterList() async {
     await _prepareCompletion('.iter', '''
 f() {
   [1,2,3].iter
@@ -274,7 +274,7 @@
 ''');
   }
 
-  test_iterName() async {
+  Future<void> test_iterName() async {
     await _prepareCompletion('.iter', '''
 f() {
   var value = [1,2,3];
@@ -294,7 +294,7 @@
 
 @reflectiveTest
 class _IfTest extends PostfixCompletionTest {
-  test_Else() async {
+  Future<void> test_Else() async {
     await _prepareCompletion('.else', '''
 f(bool val) {
   val.else
@@ -309,7 +309,7 @@
 ''');
   }
 
-  test_if() async {
+  Future<void> test_if() async {
     await _prepareCompletion('.if', '''
 f() {
   3 < 4.if
@@ -324,7 +324,7 @@
 ''');
   }
 
-  test_if_invalid() async {
+  Future<void> test_if_invalid() async {
     await _assertNotApplicable('.if', '''
 f(List expr) {
   expr.if
@@ -332,7 +332,7 @@
 ''');
   }
 
-  test_if_invalid_importPrefix() async {
+  Future<void> test_if_invalid_importPrefix() async {
     await _assertNotApplicable('.if', '''
 import 'dart:async' as p;
 f() {
@@ -341,7 +341,7 @@
 ''');
   }
 
-  test_ifDynamic() async {
+  Future<void> test_ifDynamic() async {
     await _assertNotApplicable('.if', '''
 f(expr) {
   expr.if
@@ -352,7 +352,7 @@
 
 @reflectiveTest
 class _NegateTest extends PostfixCompletionTest {
-  test_negate() async {
+  Future<void> test_negate() async {
     await _prepareCompletion('.not', '''
 f(bool expr) {
   if (expr.not)
@@ -365,7 +365,7 @@
 ''');
   }
 
-  test_negate_invalid() async {
+  Future<void> test_negate_invalid() async {
     await _assertNotApplicable('.not', '''
 f(int expr) {
   if (expr.not)
@@ -373,7 +373,7 @@
 ''');
   }
 
-  test_negateCascade() async {
+  Future<void> test_negateCascade() async {
     await _prepareCompletion('.not', '''
 f(bool expr) {
   if (expr..a..b..c.not)
@@ -386,7 +386,7 @@
 ''');
   }
 
-  test_negateExpr() async {
+  Future<void> test_negateExpr() async {
     await _prepareCompletion('.not', '''
 f(int i, int j) {
   if (i + 3 < j - 4.not)
@@ -399,7 +399,7 @@
 ''');
   }
 
-  test_negateProperty() async {
+  Future<void> test_negateProperty() async {
     await _prepareCompletion('.not', '''
 f(B b) {
   if (b.a.f.not)
@@ -428,7 +428,7 @@
 ''');
   }
 
-  test_notFalse() async {
+  Future<void> test_notFalse() async {
     await _prepareCompletion('!', '''
 f() {
   if (false!)
@@ -441,7 +441,7 @@
 ''');
   }
 
-  test_notFunc() async {
+  Future<void> test_notFunc() async {
     await _prepareCompletion('.not', '''
 bool f() {
   if (f().not)
@@ -454,7 +454,7 @@
 ''');
   }
 
-  test_notTrue() async {
+  Future<void> test_notTrue() async {
     await _prepareCompletion('.not', '''
 f() {
   if (true.not)
@@ -470,7 +470,7 @@
 
 @reflectiveTest
 class _NotNullTest extends PostfixCompletionTest {
-  test_nn() async {
+  Future<void> test_nn() async {
     await _prepareCompletion('.nn', '''
 f() {
   var list = [1,2,3];
@@ -487,7 +487,7 @@
 ''');
   }
 
-  test_nn_invalid() async {
+  Future<void> test_nn_invalid() async {
     await _assertNotApplicable('.nn', '''
 f() {
   var list = [1,2,3];
@@ -495,7 +495,7 @@
 ''');
   }
 
-  test_nnDynamic() async {
+  Future<void> test_nnDynamic() async {
     await _prepareCompletion('.nn', '''
 f(expr) {
   expr.nn
@@ -510,7 +510,7 @@
 ''');
   }
 
-  test_notnull() async {
+  Future<void> test_notnull() async {
     await _prepareCompletion('.notnull', '''
 f(expr) {
   var list = [1,2,3];
@@ -527,7 +527,7 @@
 ''');
   }
 
-  test_null() async {
+  Future<void> test_null() async {
     await _prepareCompletion('.null', '''
 f(expr) {
   expr.null
@@ -542,7 +542,7 @@
 ''');
   }
 
-  test_nullnn() async {
+  Future<void> test_nullnn() async {
     await _prepareCompletion('.nn', '''
 f() {
   null.nn
@@ -557,7 +557,7 @@
 ''');
   }
 
-  test_nullnull() async {
+  Future<void> test_nullnull() async {
     await _prepareCompletion('.null', '''
 f() {
   null.null
@@ -575,7 +575,7 @@
 
 @reflectiveTest
 class _ParenTest extends PostfixCompletionTest {
-  test_paren() async {
+  Future<void> test_paren() async {
     await _prepareCompletion('.par', '''
 f(expr) {
   expr.par
@@ -591,7 +591,7 @@
 
 @reflectiveTest
 class _ReturnTest extends PostfixCompletionTest {
-  test_return() async {
+  Future<void> test_return() async {
     await _prepareCompletion('.return', '''
 f(expr) {
   expr.return
@@ -607,7 +607,7 @@
 
 @reflectiveTest
 class _SwitchTest extends PostfixCompletionTest {
-  test_return() async {
+  Future<void> test_return() async {
     await _prepareCompletion('.switch', '''
 f(expr) {
   expr.switch
@@ -625,7 +625,7 @@
 
 @reflectiveTest
 class _TryTest extends PostfixCompletionTest {
-  test_try() async {
+  Future<void> test_try() async {
     await _prepareCompletion('.try', '''
 f() {
   var x = 1.try
@@ -642,7 +642,7 @@
 ''');
   }
 
-  test_try_invalid() async {
+  Future<void> test_try_invalid() async {
     // The semicolon is fine; this fails because of the do-statement.
     await _assertNotApplicable('.try', '''
 f() {
@@ -651,7 +651,7 @@
 ''');
   }
 
-  test_tryMultiline() async {
+  Future<void> test_tryMultiline() async {
     await _prepareCompletion('.try', '''
 f(arg) {
   arg
@@ -676,7 +676,7 @@
 ''');
   }
 
-  test_tryon() async {
+  Future<void> test_tryon() async {
     await _prepareCompletion('.tryon', '''
 f() {
   var x = 1.tryon
@@ -693,7 +693,7 @@
 ''');
   }
 
-  test_tryonThrowStatement() async {
+  Future<void> test_tryonThrowStatement() async {
     await _prepareCompletion('.tryon', '''
 f() {
   throw 'error';.tryon
@@ -710,7 +710,7 @@
 ''');
   }
 
-  test_tryonThrowString() async {
+  Future<void> test_tryonThrowString() async {
     await _prepareCompletion('.tryon', '''
 f() {
   throw 'error'.tryon
@@ -730,7 +730,7 @@
 
 @reflectiveTest
 class _WhileTest extends PostfixCompletionTest {
-  test_while() async {
+  Future<void> test_while() async {
     await _prepareCompletion('.while', '''
 f(bool expr) {
   expr.while
diff --git a/pkg/analysis_server/test/services/completion/postfix/test_all.dart b/pkg/analysis_server/test/services/completion/postfix/test_all.dart
index 4f4c9cb..36604fe 100644
--- a/pkg/analysis_server/test/services/completion/postfix/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/postfix/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'postfix_completion_test.dart' as postfix_completion_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     postfix_completion_test.main();
   }, name: 'postfix');
diff --git a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
index 1f6ebf7..3e3836c 100644
--- a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
@@ -10,7 +10,7 @@
 
 import '../../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_ControlFlowCompletionTest);
     defineReflectiveTests(_DeclarationCompletionTest);
@@ -61,7 +61,7 @@
     fail('Expected to find |$message| but got: ' + change.message);
   }
 
-  _computeCompletion(int offset) async {
+  Future<void> _computeCompletion(int offset) async {
     driver.changeFile(testFile);
     ResolvedUnitResult result = await session.getResolvedUnit(testFile);
     var context = StatementCompletionContext(result, offset);
@@ -71,7 +71,7 @@
     change = completion.change;
   }
 
-  _prepareCompletion(String search, String sourceCode,
+  Future<void> _prepareCompletion(String search, String sourceCode,
       {bool atEnd = false, int delta = 0}) async {
     testCode = sourceCode.replaceAll('////', '');
     int offset = findOffset(search);
@@ -81,7 +81,7 @@
     await _prepareCompletionAt(offset + delta, testCode);
   }
 
-  _prepareCompletionAt(int offset, String sourceCode) async {
+  Future<void> _prepareCompletionAt(int offset, String sourceCode) async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit(sourceCode);
     await _computeCompletion(offset);
@@ -90,7 +90,7 @@
 
 @reflectiveTest
 class _ControlFlowCompletionTest extends StatementCompletionTest {
-  test_doReturnExprLineComment() async {
+  Future<void> test_doReturnExprLineComment() async {
     await _prepareCompletion(
         'return 3',
         '''
@@ -114,7 +114,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_doReturnUnterminated() async {
+  Future<void> test_doReturnUnterminated() async {
     await _prepareCompletion(
         'return',
         '''
@@ -138,7 +138,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_forEachReturn() async {
+  Future<void> test_forEachReturn() async {
     await _prepareCompletion(
         'return;',
         '''
@@ -162,7 +162,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_forThrowUnterminated() async {
+  Future<void> test_forThrowUnterminated() async {
     await _prepareCompletion(
         'throw e',
         '''
@@ -186,7 +186,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_ifNoBlock() async {
+  Future<void> test_ifNoBlock() async {
     await _prepareCompletion(
         'return',
         '''
@@ -206,7 +206,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_ifThrow() async {
+  Future<void> test_ifThrow() async {
     await _prepareCompletion(
         'throw e;',
         '''
@@ -230,7 +230,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_ifThrowUnterminated() async {
+  Future<void> test_ifThrowUnterminated() async {
     await _prepareCompletion(
         'throw e',
         '''
@@ -254,7 +254,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_whileReturnExpr() async {
+  Future<void> test_whileReturnExpr() async {
     await _prepareCompletion(
         '+ 4',
         '''
@@ -281,7 +281,7 @@
 
 @reflectiveTest
 class _DeclarationCompletionTest extends StatementCompletionTest {
-  test_classNameNoBody() async {
+  Future<void> test_classNameNoBody() async {
     await _prepareCompletion(
         'Sample',
         '''
@@ -298,7 +298,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_extendsNoBody() async {
+  Future<void> test_extendsNoBody() async {
     await _prepareCompletion(
         'Sample',
         '''
@@ -315,7 +315,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_functionDeclNoBody() async {
+  Future<void> test_functionDeclNoBody() async {
     await _prepareCompletion(
         'source()',
         '''
@@ -332,7 +332,7 @@
         (s) => _after(s, '  '));
   }
 
-  test_functionDeclNoParen() async {
+  Future<void> test_functionDeclNoParen() async {
     await _prepareCompletion(
         'source(',
         '''
@@ -349,7 +349,7 @@
         (s) => _after(s, '  '));
   }
 
-  test_implementsNoBody() async {
+  Future<void> test_implementsNoBody() async {
     await _prepareCompletion(
         'Sample',
         '''
@@ -368,7 +368,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_methodDeclNoBody() async {
+  Future<void> test_methodDeclNoBody() async {
     await _prepareCompletion(
         'source()',
         '''
@@ -389,7 +389,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_methodDeclNoParen() async {
+  Future<void> test_methodDeclNoParen() async {
     await _prepareCompletion(
         'source(',
         '''
@@ -410,7 +410,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_variableDeclNoBody() async {
+  Future<void> test_variableDeclNoBody() async {
     await _prepareCompletion(
         'source',
         '''
@@ -426,7 +426,7 @@
         (s) => _after(s, ';\n'));
   }
 
-  test_withNoBody() async {
+  Future<void> test_withNoBody() async {
     await _prepareCompletion(
         'Sample',
         '''
@@ -448,7 +448,7 @@
 
 @reflectiveTest
 class _DoCompletionTest extends StatementCompletionTest {
-  test_emptyCondition() async {
+  Future<void> test_emptyCondition() async {
     await _prepareCompletion(
         'while ()',
         '''
@@ -469,7 +469,7 @@
         (s) => _after(s, 'while ('));
   }
 
-  test_keywordOnly() async {
+  Future<void> test_keywordOnly() async {
     await _prepareCompletion(
         'do',
         '''
@@ -490,7 +490,7 @@
         (s) => _after(s, 'while ('));
   }
 
-  test_keywordStatement() async {
+  Future<void> test_keywordStatement() async {
     await _prepareCompletion(
         'do',
         '''
@@ -513,7 +513,7 @@
         (s) => _after(s, 'while ('));
   }
 
-  test_noBody() async {
+  Future<void> test_noBody() async {
     await _prepareCompletion(
         'do',
         '''
@@ -535,7 +535,7 @@
         (s) => _after(s, 'while ('));
   }
 
-  test_noCondition() async {
+  Future<void> test_noCondition() async {
     await _prepareCompletion(
         'while',
         '''
@@ -556,7 +556,7 @@
         (s) => _after(s, 'while ('));
   }
 
-  test_noWhile() async {
+  Future<void> test_noWhile() async {
     await _prepareCompletion(
         '}',
         '''
@@ -580,7 +580,7 @@
 
 @reflectiveTest
 class _ExpressionCompletionTest extends StatementCompletionTest {
-  test_listAssign() async {
+  Future<void> test_listAssign() async {
     await _prepareCompletion(
         '= ',
         '''
@@ -600,7 +600,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_listAssignMultiLine() async {
+  Future<void> test_listAssignMultiLine() async {
     // The indent of the final line is incorrect.
     await _prepareCompletion(
         '3',
@@ -629,7 +629,7 @@
   }
 
   @failingTest
-  test_mapAssign() async {
+  Future<void> test_mapAssign() async {
     await _prepareCompletion(
         '3: 3',
         '''
@@ -650,7 +650,7 @@
   }
 
   @failingTest
-  test_mapAssignMissingColon() async {
+  Future<void> test_mapAssignMissingColon() async {
     await _prepareCompletion(
         '3',
         '''
@@ -670,7 +670,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_returnString() async {
+  Future<void> test_returnString() async {
     await _prepareCompletion(
         'text',
         '''
@@ -694,7 +694,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_stringAssign() async {
+  Future<void> test_stringAssign() async {
     await _prepareCompletion(
         '= ',
         '''
@@ -714,7 +714,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_stringSingle() async {
+  Future<void> test_stringSingle() async {
     await _prepareCompletion(
         'text',
         '''
@@ -734,7 +734,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_stringSingleRaw() async {
+  Future<void> test_stringSingleRaw() async {
     await _prepareCompletion(
         'text',
         '''
@@ -754,7 +754,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_stringTriple() async {
+  Future<void> test_stringTriple() async {
     await _prepareCompletion(
         'text',
         '''
@@ -774,7 +774,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_stringTripleRaw() async {
+  Future<void> test_stringTripleRaw() async {
     await _prepareCompletion(
         'text',
         r"""
@@ -797,7 +797,7 @@
 
 @reflectiveTest
 class _ForCompletionTest extends StatementCompletionTest {
-  test_emptyCondition() async {
+  Future<void> test_emptyCondition() async {
     await _prepareCompletion(
         '0;',
         '''
@@ -818,7 +818,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_emptyConditionWithBody() async {
+  Future<void> test_emptyConditionWithBody() async {
     await _prepareCompletion(
         '0;',
         '''
@@ -839,7 +839,7 @@
         (s) => _after(s, '0; '));
   }
 
-  test_emptyInitializers() async {
+  Future<void> test_emptyInitializers() async {
     // This does nothing, same as for Java.
     await _prepareCompletion(
         'r (',
@@ -861,7 +861,7 @@
         (s) => _after(s, 'r ('));
   }
 
-  test_emptyInitializersAfterBody() async {
+  Future<void> test_emptyInitializersAfterBody() async {
     await _prepareCompletion(
         '}',
         '''
@@ -883,7 +883,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_emptyInitializersEmptyCondition() async {
+  Future<void> test_emptyInitializersEmptyCondition() async {
     await _prepareCompletion(
         '/**/',
         '''
@@ -904,7 +904,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_emptyParts() async {
+  Future<void> test_emptyParts() async {
     await _prepareCompletion(
         ';)',
         '''
@@ -925,7 +925,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_emptyUpdaters() async {
+  Future<void> test_emptyUpdaters() async {
     await _prepareCompletion(
         '/**/',
         '''
@@ -946,7 +946,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_emptyUpdatersWithBody() async {
+  Future<void> test_emptyUpdatersWithBody() async {
     await _prepareCompletion(
         '/**/',
         '''
@@ -967,7 +967,7 @@
         (s) => _after(s, '*/; '));
   }
 
-  test_keywordOnly() async {
+  Future<void> test_keywordOnly() async {
     await _prepareCompletion(
         'for',
         '''
@@ -988,7 +988,7 @@
         (s) => _after(s, 'for ('));
   }
 
-  test_missingLeftSeparator() async {
+  Future<void> test_missingLeftSeparator() async {
     await _prepareCompletion(
         '= 0',
         '''
@@ -1009,7 +1009,7 @@
         (s) => _after(s, '0; '));
   }
 
-  test_noError() async {
+  Future<void> test_noError() async {
     await _prepareCompletion(
         ';)',
         '''
@@ -1035,7 +1035,7 @@
 
 @reflectiveTest
 class _ForEachCompletionTest extends StatementCompletionTest {
-  test_emptyIdentifier() async {
+  Future<void> test_emptyIdentifier() async {
     await _prepareCompletion(
         'in xs)',
         '''
@@ -1056,7 +1056,7 @@
         (s) => _after(s, 'for ('));
   }
 
-  test_emptyIdentifierAndIterable() async {
+  Future<void> test_emptyIdentifierAndIterable() async {
     // Analyzer parser produces
     //    for (_s_ in _s_) ;
     // Fasta parser produces
@@ -1081,7 +1081,7 @@
         (s) => _after(s, 'for ('));
   }
 
-  test_emptyIterable() async {
+  Future<void> test_emptyIterable() async {
     await _prepareCompletion(
         'in)',
         '''
@@ -1102,7 +1102,7 @@
         (s) => _after(s, 'in '));
   }
 
-  test_noError() async {
+  Future<void> test_noError() async {
     await _prepareCompletion(
         '])',
         '''
@@ -1128,7 +1128,7 @@
 
 @reflectiveTest
 class _IfCompletionTest extends StatementCompletionTest {
-  test_afterCondition() async {
+  Future<void> test_afterCondition() async {
     await _prepareCompletion(
         'if (true) ', // Trigger completion after space.
         '''
@@ -1149,7 +1149,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_emptyCondition() async {
+  Future<void> test_emptyCondition() async {
     await _prepareCompletion(
         'if ()',
         '''
@@ -1170,7 +1170,7 @@
         (s) => _after(s, 'if ('));
   }
 
-  test_keywordOnly() async {
+  Future<void> test_keywordOnly() async {
     await _prepareCompletion(
         'if',
         '''
@@ -1191,7 +1191,7 @@
         (s) => _after(s, 'if ('));
   }
 
-  test_noError() async {
+  Future<void> test_noError() async {
     await _prepareCompletion(
         'if (true)',
         '''
@@ -1214,7 +1214,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_withCondition() async {
+  Future<void> test_withCondition() async {
     await _prepareCompletion(
         'if (tr', // Trigger completion from within expression.
         '''
@@ -1235,7 +1235,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_withCondition_noRightParenthesis() async {
+  Future<void> test_withCondition_noRightParenthesis() async {
     await _prepareCompletion(
         'if (true',
         '''
@@ -1256,7 +1256,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_withElse() async {
+  Future<void> test_withElse() async {
     await _prepareCompletion(
         'else',
         '''
@@ -1279,7 +1279,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_withElse_BAD() async {
+  Future<void> test_withElse_BAD() async {
     await _prepareCompletion(
         'if ()',
         '''
@@ -1301,7 +1301,7 @@
         (s) => _after(s, 'if ()'));
   }
 
-  test_withElseNoThen() async {
+  Future<void> test_withElseNoThen() async {
     await _prepareCompletion(
         'else',
         '''
@@ -1324,7 +1324,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_withinEmptyCondition() async {
+  Future<void> test_withinEmptyCondition() async {
     await _prepareCompletion(
         'if (',
         '''
@@ -1348,7 +1348,7 @@
 
 @reflectiveTest
 class _SimpleCompletionTest extends StatementCompletionTest {
-  test_enter() async {
+  Future<void> test_enter() async {
     await _prepareCompletion(
         'v = 1;',
         '''
@@ -1365,7 +1365,7 @@
 ''');
   }
 
-  test_expressionBody() async {
+  Future<void> test_expressionBody() async {
     await _prepareCompletion(
         '=> 1',
         '''
@@ -1382,7 +1382,7 @@
 ''');
   }
 
-  test_noCloseParen() async {
+  Future<void> test_noCloseParen() async {
     await _prepareCompletion(
         'ing(3',
         '''
@@ -1403,7 +1403,7 @@
   }
 
   @failingTest
-  test_noCloseParenWithSemicolon() async {
+  Future<void> test_noCloseParenWithSemicolon() async {
     // TODO(danrubel):
     // Fasta scanner produces an error message which is converted into
     // an Analyzer error message before the fasta parser gets a chance
@@ -1439,7 +1439,7 @@
     throw 'remove this once fasta parser is enabled by default';
   }
 
-  test_semicolonFn() async {
+  Future<void> test_semicolonFn() async {
     await _prepareCompletion(
         '=> 3',
         '''
@@ -1459,7 +1459,7 @@
         (s) => _afterLast(s, '  '));
   }
 
-  test_semicolonFnBody() async {
+  Future<void> test_semicolonFnBody() async {
     // It would be reasonable to add braces in this case. Unfortunately,
     // the incomplete line parses as two statements ['int;', 'f();'], not one.
     await _prepareCompletion(
@@ -1481,7 +1481,7 @@
   }
 
   @failingTest
-  test_semicolonFnBodyWithDef() async {
+  Future<void> test_semicolonFnBodyWithDef() async {
     // This ought to be the same as test_semicolonFnBody() but the definition
     // of f() removes an error and it appears to be a different case.
     // Suggestions for unifying the two are welcome.
@@ -1519,7 +1519,7 @@
     throw 'remove this once fasta parser is enabled by default';
   }
 
-  test_semicolonFnExpr() async {
+  Future<void> test_semicolonFnExpr() async {
     await _prepareCompletion(
         '=>',
         '''
@@ -1539,7 +1539,7 @@
         (s) => _afterLast(s, '=> '));
   }
 
-  test_semicolonFnSpaceExpr() async {
+  Future<void> test_semicolonFnSpaceExpr() async {
     await _prepareCompletion(
         '=>',
         '''
@@ -1559,7 +1559,7 @@
         (s) => _afterLast(s, '=> '));
   }
 
-  test_semicolonVar() async {
+  Future<void> test_semicolonVar() async {
     await _prepareCompletion(
         'v = 1',
         '''
@@ -1582,7 +1582,7 @@
 
 @reflectiveTest
 class _SwitchCompletionTest extends StatementCompletionTest {
-  test_caseNoColon() async {
+  Future<void> test_caseNoColon() async {
     await _prepareCompletion(
         'label',
         '''
@@ -1605,7 +1605,7 @@
         (s) => _after(s, 'label: '));
   }
 
-  test_defaultNoColon() async {
+  Future<void> test_defaultNoColon() async {
     await _prepareCompletion(
         'default',
         '''
@@ -1628,7 +1628,7 @@
         (s) => _after(s, 'default: '));
   }
 
-  test_emptyCondition() async {
+  Future<void> test_emptyCondition() async {
     await _prepareCompletion(
         'switch',
         '''
@@ -1649,7 +1649,7 @@
         (s) => _after(s, 'switch ('));
   }
 
-  test_keywordOnly() async {
+  Future<void> test_keywordOnly() async {
     await _prepareCompletion(
         'switch',
         '''
@@ -1670,7 +1670,7 @@
         (s) => _after(s, 'switch ('));
   }
 
-  test_keywordSpace() async {
+  Future<void> test_keywordSpace() async {
     await _prepareCompletion(
         'switch',
         '''
@@ -1694,7 +1694,7 @@
 
 @reflectiveTest
 class _TryCompletionTest extends StatementCompletionTest {
-  test_catchOnly() async {
+  Future<void> test_catchOnly() async {
     await _prepareCompletion(
         '{} catch',
         '''
@@ -1717,7 +1717,7 @@
         (s) => _after(s, 'catch ('));
   }
 
-  test_catchSecond() async {
+  Future<void> test_catchSecond() async {
     await _prepareCompletion(
         '} catch ',
         '''
@@ -1742,7 +1742,7 @@
         (s) => _afterLast(s, 'catch ('));
   }
 
-  test_finallyOnly() async {
+  Future<void> test_finallyOnly() async {
     await _prepareCompletion(
         'finally',
         '''
@@ -1765,7 +1765,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_keywordOnly() async {
+  Future<void> test_keywordOnly() async {
     await _prepareCompletion(
         'try',
         '''
@@ -1786,7 +1786,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_keywordSpace() async {
+  Future<void> test_keywordSpace() async {
     await _prepareCompletion(
         'try',
         '''
@@ -1807,7 +1807,7 @@
         (s) => _after(s, '    '));
   }
 
-  test_onCatch() async {
+  Future<void> test_onCatch() async {
     await _prepareCompletion(
         'on',
         '''
@@ -1830,7 +1830,7 @@
         (s) => _after(s, 'catch ('));
   }
 
-  test_onCatchComment() async {
+  Future<void> test_onCatchComment() async {
     await _prepareCompletion(
         'on',
         '''
@@ -1855,7 +1855,7 @@
         (s) => _after(s, 'catch ('));
   }
 
-  test_onOnly() async {
+  Future<void> test_onOnly() async {
     await _prepareCompletion(
         'on',
         '''
@@ -1878,7 +1878,7 @@
         (s) => _after(s, ' on '));
   }
 
-  test_onSpace() async {
+  Future<void> test_onSpace() async {
     await _prepareCompletion(
         'on',
         '''
@@ -1901,7 +1901,7 @@
         (s) => _after(s, ' on '));
   }
 
-  test_onSpaces() async {
+  Future<void> test_onSpaces() async {
     await _prepareCompletion(
         'on',
         '''
@@ -1924,7 +1924,7 @@
         (s) => _after(s, ' on '));
   }
 
-  test_onType() async {
+  Future<void> test_onType() async {
     await _prepareCompletion(
         'on',
         '''
@@ -1957,7 +1957,7 @@
      _IfCompletionTest tests. If the implementation changes then the same
      set of tests defined for if-statements should be duplicated here.
    */
-  test_keywordOnly() async {
+  Future<void> test_keywordOnly() async {
     await _prepareCompletion(
         'while',
         '''
diff --git a/pkg/analysis_server/test/services/completion/statement/test_all.dart b/pkg/analysis_server/test/services/completion/statement/test_all.dart
index fb89619..6d4d86e 100644
--- a/pkg/analysis_server/test/services/completion/statement/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/statement/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'statement_completion_test.dart' as statement_completion_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     statement_completion_test.main();
   }, name: 'statement');
diff --git a/pkg/analysis_server/test/services/completion/test_all.dart b/pkg/analysis_server/test/services/completion/test_all.dart
index 11542d1..533fb7a 100644
--- a/pkg/analysis_server/test/services/completion/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/test_all.dart
@@ -8,7 +8,7 @@
 import 'postfix/test_all.dart' as postfix_all;
 import 'statement/test_all.dart' as statement_all;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     dart_all.main();
     postfix_all.main();
diff --git a/pkg/analysis_server/test/services/correction/change_test.dart b/pkg/analysis_server/test/services/correction/change_test.dart
index 1ce454e..75d9adf 100644
--- a/pkg/analysis_server/test/services/correction/change_test.dart
+++ b/pkg/analysis_server/test/services/correction/change_test.dart
@@ -9,7 +9,7 @@
 
 import '../../constants.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeTest);
     defineReflectiveTests(EditTest);
diff --git a/pkg/analysis_server/test/services/correction/levenshtein_test.dart b/pkg/analysis_server/test/services/correction/levenshtein_test.dart
index d8a77e6..dc320bd 100644
--- a/pkg/analysis_server/test/services/correction/levenshtein_test.dart
+++ b/pkg/analysis_server/test/services/correction/levenshtein_test.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LevenshteinTest);
   });
diff --git a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
index 3f50c49..747aa1a 100644
--- a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
+++ b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
@@ -10,7 +10,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(VariableNameSuggestionTest);
   });
@@ -18,7 +18,7 @@
 
 @reflectiveTest
 class VariableNameSuggestionTest extends AbstractSingleUnitTest {
-  test_forExpression_cast() async {
+  Future<void> test_forExpression_cast() async {
     await resolveTestUnit('''
 main() {
   var sortedNodes;
@@ -31,7 +31,7 @@
         unorderedEquals(['sortedNodes', 'nodes']));
   }
 
-  test_forExpression_expectedType() async {
+  Future<void> test_forExpression_expectedType() async {
     await resolveTestUnit('''
 class TreeNode {}
 main() {
@@ -47,7 +47,7 @@
     expect(suggestions, unorderedEquals(['treeNode', 'node']));
   }
 
-  test_forExpression_expectedType_double() async {
+  Future<void> test_forExpression_expectedType_double() async {
     await resolveTestUnit('''
 main() {
   double res = 0.0;
@@ -67,7 +67,7 @@
         unorderedEquals(['f']));
   }
 
-  test_forExpression_expectedType_int() async {
+  Future<void> test_forExpression_expectedType_int() async {
     await resolveTestUnit('''
 main() {
   int res = 0;
@@ -87,7 +87,7 @@
         unorderedEquals(['k']));
   }
 
-  test_forExpression_expectedType_String() async {
+  Future<void> test_forExpression_expectedType_String() async {
     await resolveTestUnit('''
 main() {
   String res = 'abc';
@@ -102,7 +102,7 @@
         unorderedEquals(['s']));
   }
 
-  test_forExpression_inBuildMethod() async {
+  Future<void> test_forExpression_inBuildMethod() async {
     await resolveTestUnit('''
 class A {
   void build() {
@@ -122,7 +122,7 @@
         unorderedEquals(['buildList']));
   }
 
-  test_forExpression_indexExpression_endsWithE() async {
+  Future<void> test_forExpression_indexExpression_endsWithE() async {
     await resolveTestUnit('''
 main() {
   var topNodes = [0, 1, 2];
@@ -135,7 +135,7 @@
     expect(names, unorderedEquals(['topNode', 'node', 'object']));
   }
 
-  test_forExpression_instanceCreation() async {
+  Future<void> test_forExpression_instanceCreation() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 import 'dart:math' as p;
@@ -164,7 +164,7 @@
 //        unorderedEquals(['noSuchClass', 'suchClass', 'class']));
   }
 
-  test_forExpression_invocationArgument_named() async {
+  Future<void> test_forExpression_invocationArgument_named() async {
     await resolveTestUnit('''
 foo({a, b, c}) {}
 main() {
@@ -189,7 +189,7 @@
     }
   }
 
-  test_forExpression_invocationArgument_optional() async {
+  Future<void> test_forExpression_invocationArgument_optional() async {
     await resolveTestUnit('''
 foo(a, [b = 2, c = 3]) {}
 main() {
@@ -214,7 +214,7 @@
     }
   }
 
-  test_forExpression_invocationArgument_positional() async {
+  Future<void> test_forExpression_invocationArgument_positional() async {
     await resolveTestUnit('''
 foo(a, b) {}
 main() {
@@ -234,7 +234,7 @@
     }
   }
 
-  test_forExpression_methodInvocation() async {
+  Future<void> test_forExpression_methodInvocation() async {
     await resolveTestUnit('''
 main(p) {
   var res = p.getSortedNodes();
@@ -246,7 +246,7 @@
         unorderedEquals(['sortedNodes', 'nodes']));
   }
 
-  test_forExpression_methodInvocation_noPrefix() async {
+  Future<void> test_forExpression_methodInvocation_noPrefix() async {
     await resolveTestUnit('''
 main(p) {
   var res = p.sortedNodes();
@@ -258,7 +258,7 @@
         unorderedEquals(['sortedNodes', 'nodes']));
   }
 
-  test_forExpression_name_get() async {
+  Future<void> test_forExpression_name_get() async {
     await resolveTestUnit('''
 main(p) {
   var res = p.get();
@@ -270,7 +270,7 @@
         unorderedEquals([]));
   }
 
-  test_forExpression_prefixedIdentifier() async {
+  Future<void> test_forExpression_prefixedIdentifier() async {
     await resolveTestUnit('''
 main(p) {
   var res = p.sortedNodes;
@@ -285,7 +285,7 @@
         unorderedEquals(['sortedNodes', 'nodes']));
   }
 
-  test_forExpression_privateName() async {
+  Future<void> test_forExpression_privateName() async {
     await resolveTestUnit('''
 main(p) {
   p._name;
@@ -307,7 +307,7 @@
         unorderedEquals(['computeSuffix', 'suffix']));
   }
 
-  test_forExpression_propertyAccess() async {
+  Future<void> test_forExpression_propertyAccess() async {
     await resolveTestUnit('''
 main(p) {
   var res = p.q.sortedNodes;
@@ -320,7 +320,7 @@
         unorderedEquals(['sortedNodes', 'nodes']));
   }
 
-  test_forExpression_simpleName() async {
+  Future<void> test_forExpression_simpleName() async {
     await resolveTestUnit('''
 main(p) {
   var sortedNodes = null;
@@ -333,7 +333,7 @@
         unorderedEquals(['sortedNodes', 'nodes']));
   }
 
-  test_forExpression_unqualifiedInvocation() async {
+  Future<void> test_forExpression_unqualifiedInvocation() async {
     await resolveTestUnit('''
 getSortedNodes() => [];
 main(p) {
diff --git a/pkg/analysis_server/test/services/correction/organize_directives_test.dart b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
index 5e85c38..9842672 100644
--- a/pkg/analysis_server/test/services/correction/organize_directives_test.dart
+++ b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
@@ -14,7 +14,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
   });
@@ -24,7 +24,7 @@
 class OrganizeDirectivesTest extends AbstractSingleUnitTest {
   List<AnalysisError> testErrors;
 
-  test_docComment_beforeDirective_hasUnresolvedIdentifier() async {
+  Future<void> test_docComment_beforeDirective_hasUnresolvedIdentifier() async {
     await _computeUnitAndErrors(r'''
 /// Library documentation comment A
 /// Library documentation comment B
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_keep_duplicateImports_withDifferentPrefix() async {
+  Future<void> test_keep_duplicateImports_withDifferentPrefix() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async' as async1;
 import 'dart:async' as async2;
@@ -64,7 +64,7 @@
 }''', removeUnused: true);
   }
 
-  test_keep_unresolvedDirectives() async {
+  Future<void> test_keep_unresolvedDirectives() async {
     var code = r'''
 import 'dart:noSuchImportSdkLibrary';
 
@@ -80,7 +80,7 @@
     _assertOrganize(code);
   }
 
-  test_remove_duplicateImports() async {
+  Future<void> test_remove_duplicateImports() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async';
 import 'dart:async';
@@ -97,7 +97,7 @@
 }''', removeUnused: true);
   }
 
-  test_remove_duplicateImports_differentText_uri() async {
+  Future<void> test_remove_duplicateImports_differentText_uri() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async' as async;
 import "dart:async" as async;
@@ -114,7 +114,7 @@
 }''', removeUnused: true);
   }
 
-  test_remove_duplicateImports_withSamePrefix() async {
+  Future<void> test_remove_duplicateImports_withSamePrefix() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async' as async;
 import 'dart:async' as async;
@@ -131,7 +131,7 @@
 }''', removeUnused: true);
   }
 
-  test_remove_unusedImports() async {
+  Future<void> test_remove_unusedImports() async {
     await _computeUnitAndErrors(r'''
 library lib;
 
@@ -159,7 +159,7 @@
 ''', removeUnused: true);
   }
 
-  test_remove_unusedImports2() async {
+  Future<void> test_remove_unusedImports2() async {
     await _computeUnitAndErrors(r'''
 import 'dart:async';
 import 'dart:math';
@@ -180,7 +180,7 @@
 }''', removeUnused: true);
   }
 
-  test_remove_unusedImports_hasUnresolvedError() async {
+  Future<void> test_remove_unusedImports_hasUnresolvedError() async {
     Future<void> check(String declaration) async {
       String code = '''
 import 'dart:async';
@@ -201,7 +201,7 @@
     await check('List<Unresolved> v;');
   }
 
-  test_sort() async {
+  Future<void> test_sort() async {
     await _computeUnitAndErrors(r'''
 library lib;
 
@@ -263,7 +263,7 @@
 ''');
   }
 
-  test_sort_hasComments() async {
+  Future<void> test_sort_hasComments() async {
     await _computeUnitAndErrors(r'''
 // header
 library lib;
@@ -291,7 +291,7 @@
 ''');
   }
 
-  test_sort_imports_packageAndPath() async {
+  Future<void> test_sort_imports_packageAndPath() async {
     await _computeUnitAndErrors(r'''
 library lib;
 
diff --git a/pkg/analysis_server/test/services/correction/sort_members_test.dart b/pkg/analysis_server/test/services/correction/sort_members_test.dart
index ca789b8..f218132 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
   });
@@ -20,7 +20,7 @@
 
 @reflectiveTest
 class SortMembersTest extends AbstractSingleUnitTest {
-  test_classMembers_accessor() async {
+  Future<void> test_classMembers_accessor() async {
     await _parseTestUnit(r'''
 class A {
   set c(x) {}
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_classMembers_accessor_static() async {
+  Future<void> test_classMembers_accessor_static() async {
     await _parseTestUnit(r'''
 class A {
   get a => null;
@@ -64,7 +64,7 @@
 ''');
   }
 
-  test_classMembers_constructor() async {
+  Future<void> test_classMembers_constructor() async {
     await _parseTestUnit(r'''
 class A {
   A.c() {   }
@@ -84,7 +84,7 @@
 ''');
   }
 
-  test_classMembers_external_constructorMethod() async {
+  Future<void> test_classMembers_external_constructorMethod() async {
     await _parseTestUnit(r'''
 class Chart {
   external Pie();
@@ -100,7 +100,7 @@
 ''');
   }
 
-  test_classMembers_field() async {
+  Future<void> test_classMembers_field() async {
     await _parseTestUnit(r'''
 class A {
   String c;
@@ -120,7 +120,7 @@
 ''');
   }
 
-  test_classMembers_field_static() async {
+  Future<void> test_classMembers_field_static() async {
     await _parseTestUnit(r'''
 class A {
   int b;
@@ -140,7 +140,7 @@
 ''');
   }
 
-  test_classMembers_method() async {
+  Future<void> test_classMembers_method() async {
     await _parseTestUnit(r'''
 class A {
   c() {}
@@ -158,7 +158,7 @@
 ''');
   }
 
-  test_classMembers_method_emptyLine() async {
+  Future<void> test_classMembers_method_emptyLine() async {
     await _parseTestUnit(r'''
 class A {
   b() {}
@@ -176,7 +176,7 @@
 ''');
   }
 
-  test_classMembers_method_ignoreCase() async {
+  Future<void> test_classMembers_method_ignoreCase() async {
     await _parseTestUnit(r'''
 class A {
   m_C() {}
@@ -194,7 +194,7 @@
 ''');
   }
 
-  test_classMembers_method_static() async {
+  Future<void> test_classMembers_method_static() async {
     await _parseTestUnit(r'''
 class A {
   static a() {}
@@ -210,7 +210,7 @@
 ''');
   }
 
-  test_classMembers_mix() async {
+  Future<void> test_classMembers_mix() async {
     await _parseTestUnit(r'''
 class A {
   /// static field public
@@ -310,7 +310,7 @@
 ''');
   }
 
-  test_directives() async {
+  Future<void> test_directives() async {
     await _parseTestUnit(r'''
 library lib;
 
@@ -372,7 +372,7 @@
 ''');
   }
 
-  test_directives_docComment_hasLibrary_lines() async {
+  Future<void> test_directives_docComment_hasLibrary_lines() async {
     await _parseTestUnit(r'''
 /// Library documentation comment A.
 /// Library documentation comment B.
@@ -402,7 +402,7 @@
 ''');
   }
 
-  test_directives_docComment_hasLibrary_stars() async {
+  Future<void> test_directives_docComment_hasLibrary_stars() async {
     await _parseTestUnit(r'''
 /**
  * Library documentation comment A.
@@ -440,7 +440,7 @@
 ''');
   }
 
-  test_directives_docComment_noLibrary_lines() async {
+  Future<void> test_directives_docComment_noLibrary_lines() async {
     await _parseTestUnit(r'''
 /// Library documentation comment A
 /// Library documentation comment B
@@ -460,7 +460,7 @@
 ''');
   }
 
-  test_directives_docComment_noLibrary_stars() async {
+  Future<void> test_directives_docComment_noLibrary_stars() async {
     await _parseTestUnit(r'''
 /**
  * Library documentation comment A.
@@ -488,7 +488,7 @@
 ''');
   }
 
-  test_directives_imports_packageAndPath() async {
+  Future<void> test_directives_imports_packageAndPath() async {
     await _parseTestUnit(r'''
 library lib;
 
@@ -512,7 +512,7 @@
 ''');
   }
 
-  test_mixinMembers_method() async {
+  Future<void> test_mixinMembers_method() async {
     await _parseTestUnit(r'''
 mixin A {
   c() {}
@@ -530,7 +530,7 @@
 ''');
   }
 
-  test_unitMembers_class() async {
+  Future<void> test_unitMembers_class() async {
     await _parseTestUnit(r'''
 class C {}
 class A {}
@@ -544,7 +544,7 @@
 ''');
   }
 
-  test_unitMembers_class_ignoreCase() async {
+  Future<void> test_unitMembers_class_ignoreCase() async {
     await _parseTestUnit(r'''
 class C {}
 class a {}
@@ -558,7 +558,7 @@
 ''');
   }
 
-  test_unitMembers_classTypeAlias() async {
+  Future<void> test_unitMembers_classTypeAlias() async {
     await _parseTestUnit(r'''
 class M {}
 class C = Object with M;
@@ -574,7 +574,7 @@
 ''');
   }
 
-  test_unitMembers_directive_hasDirective() async {
+  Future<void> test_unitMembers_directive_hasDirective() async {
     await _parseTestUnit(r'''
 library lib;
 class C {}
@@ -590,7 +590,7 @@
 ''');
   }
 
-  test_unitMembers_directive_noDirective_hasComment_line() async {
+  Future<void> test_unitMembers_directive_noDirective_hasComment_line() async {
     await _parseTestUnit(r'''
 // Some comment
 
@@ -608,7 +608,7 @@
 ''');
   }
 
-  test_unitMembers_directive_noDirective_noComment() async {
+  Future<void> test_unitMembers_directive_noDirective_noComment() async {
     await _parseTestUnit(r'''
 
 class B {}
@@ -624,7 +624,7 @@
 ''');
   }
 
-  test_unitMembers_enum() async {
+  Future<void> test_unitMembers_enum() async {
     await _parseTestUnit(r'''
 enum C {x, y}
 enum A {x, y}
@@ -638,7 +638,7 @@
 ''');
   }
 
-  test_unitMembers_enumClass() async {
+  Future<void> test_unitMembers_enumClass() async {
     await _parseTestUnit(r'''
 enum C {x, y}
 class A {}
@@ -654,7 +654,7 @@
 ''');
   }
 
-  test_unitMembers_extensionClass() async {
+  Future<void> test_unitMembers_extensionClass() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await _parseTestUnit(r'''
 extension E on C {}
@@ -667,7 +667,7 @@
 ''');
   }
 
-  test_unitMembers_extensions() async {
+  Future<void> test_unitMembers_extensions() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await _parseTestUnit(r'''
 extension E2 on String {}
@@ -684,7 +684,7 @@
 ''');
   }
 
-  test_unitMembers_function() async {
+  Future<void> test_unitMembers_function() async {
     await _parseTestUnit(r'''
 fc() {}
 fa() {}
@@ -698,7 +698,7 @@
 ''');
   }
 
-  test_unitMembers_functionTypeAlias() async {
+  Future<void> test_unitMembers_functionTypeAlias() async {
     await _parseTestUnit(r'''
 typedef FC();
 typedef FA();
@@ -712,7 +712,7 @@
 ''');
   }
 
-  test_unitMembers_genericTypeAlias() async {
+  Future<void> test_unitMembers_genericTypeAlias() async {
     await _parseTestUnit(r'''
 typedef FC = void Function();
 typedef FA = void Function();
@@ -726,7 +726,7 @@
 ''');
   }
 
-  test_unitMembers_importsAndDeclarations() async {
+  Future<void> test_unitMembers_importsAndDeclarations() async {
     await _parseTestUnit(r'''
 import 'dart:a';
 import 'package:b';
@@ -749,7 +749,7 @@
 ''');
   }
 
-  test_unitMembers_mainFirst() async {
+  Future<void> test_unitMembers_mainFirst() async {
     await _parseTestUnit(r'''
 class C {}
 aaa() {}
@@ -769,7 +769,7 @@
 ''');
   }
 
-  test_unitMembers_mix() async {
+  Future<void> test_unitMembers_mix() async {
     await _parseTestUnit(r'''
 _mmm() {}
 typedef nnn();
@@ -831,7 +831,7 @@
 ''');
   }
 
-  test_unitMembers_mixin() async {
+  Future<void> test_unitMembers_mixin() async {
     await _parseTestUnit(r'''
 mixin C {}
 mixin A {}
@@ -844,7 +844,7 @@
 ''');
   }
 
-  test_unitMembers_topLevelVariable() async {
+  Future<void> test_unitMembers_topLevelVariable() async {
     await _parseTestUnit(r'''
 int c;
 int a;
@@ -858,7 +858,7 @@
 ''');
   }
 
-  test_unitMembers_topLevelVariable_withConst() async {
+  Future<void> test_unitMembers_topLevelVariable_withConst() async {
     await _parseTestUnit(r'''
 int c;
 int a;
diff --git a/pkg/analysis_server/test/services/correction/status_test.dart b/pkg/analysis_server/test/services/correction/status_test.dart
index 7c9e180..250b663 100644
--- a/pkg/analysis_server/test/services/correction/status_test.dart
+++ b/pkg/analysis_server/test/services/correction/status_test.dart
@@ -15,7 +15,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RefactoringLocationTest);
     defineReflectiveTests(RefactoringStatusTest);
@@ -24,7 +24,7 @@
 
 @reflectiveTest
 class RefactoringLocationTest extends AbstractSingleUnitTest {
-  test_createLocation_forElement() async {
+  Future<void> test_createLocation_forElement() async {
     await resolveTestUnit('class MyClass {}');
     Element element = findElement('MyClass');
     // check
@@ -36,7 +36,7 @@
     expect(location.startColumn, 7);
   }
 
-  test_createLocation_forMatch() async {
+  Future<void> test_createLocation_forMatch() async {
     await resolveTestUnit('class MyClass {}');
     Element element = findElement('MyClass');
     SourceRange sourceRange = range.elementName(element);
@@ -57,7 +57,7 @@
     expect(location.length, sourceRange.length);
   }
 
-  test_createLocation_forNode() async {
+  Future<void> test_createLocation_forNode() async {
     await resolveTestUnit('''
 main() {
 }
@@ -70,7 +70,7 @@
     expect(location.length, node.length);
   }
 
-  test_createLocation_forUnit() async {
+  Future<void> test_createLocation_forUnit() async {
     await resolveTestUnit('');
     SourceRange sourceRange = SourceRange(10, 20);
     // check
diff --git a/pkg/analysis_server/test/services/correction/test_all.dart b/pkg/analysis_server/test/services/correction/test_all.dart
index 022ae48..0b289d9 100644
--- a/pkg/analysis_server/test/services/correction/test_all.dart
+++ b/pkg/analysis_server/test/services/correction/test_all.dart
@@ -12,8 +12,7 @@
 import 'status_test.dart' as status_test;
 import 'util_test.dart' as util_test;
 
-/// Utility for manually running all tests.
-main() {
+void main() {
   defineReflectiveSuite(() {
     change_test.main();
     levenshtein_test.main();
diff --git a/pkg/analysis_server/test/services/correction/util_test.dart b/pkg/analysis_server/test/services/correction/util_test.dart
index 8fb699f..fdd64e2 100644
--- a/pkg/analysis_server/test/services/correction/util_test.dart
+++ b/pkg/analysis_server/test/services/correction/util_test.dart
@@ -13,7 +13,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UtilTest);
   });
@@ -40,7 +40,7 @@
     expect(result, expected);
   }
 
-  test_addLibraryImports_dart_hasImports_between() async {
+  Future<void> test_addLibraryImports_dart_hasImports_between() async {
     await resolveTestUnit('''
 import 'dart:async';
 import 'dart:math';
@@ -53,7 +53,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_hasImports_first() async {
+  Future<void> test_addLibraryImports_dart_hasImports_first() async {
     await resolveTestUnit('''
 import 'dart:collection';
 import 'dart:math';
@@ -66,7 +66,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_hasImports_last() async {
+  Future<void> test_addLibraryImports_dart_hasImports_last() async {
     await resolveTestUnit('''
 import 'dart:async';
 import 'dart:collection';
@@ -79,7 +79,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_hasImports_multiple() async {
+  Future<void> test_addLibraryImports_dart_hasImports_multiple() async {
     await resolveTestUnit('''
 import 'dart:collection';
 import 'dart:math';
@@ -94,7 +94,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_hasImports_multiple_first() async {
+  Future<void> test_addLibraryImports_dart_hasImports_multiple_first() async {
     await resolveTestUnit('''
 import 'dart:html';
 import 'dart:math';
@@ -109,7 +109,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_hasImports_multiple_last() async {
+  Future<void> test_addLibraryImports_dart_hasImports_multiple_last() async {
     await resolveTestUnit('''
 import 'dart:async';
 import 'dart:collection';
@@ -124,7 +124,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_hasLibraryDirective() async {
+  Future<void> test_addLibraryImports_dart_hasLibraryDirective() async {
     await resolveTestUnit('''
 library test;
 
@@ -142,7 +142,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_noDirectives_hasComment() async {
+  Future<void> test_addLibraryImports_dart_noDirectives_hasComment() async {
     await resolveTestUnit('''
 /// Comment.
 
@@ -160,7 +160,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_noDirectives_hasShebang() async {
+  Future<void> test_addLibraryImports_dart_noDirectives_hasShebang() async {
     await resolveTestUnit('''
 #!/bin/dart
 
@@ -178,7 +178,7 @@
 ''');
   }
 
-  test_addLibraryImports_dart_noDirectives_noShebang() async {
+  Future<void> test_addLibraryImports_dart_noDirectives_noShebang() async {
     await resolveTestUnit('''
 class A {}
 ''');
@@ -192,7 +192,8 @@
 ''');
   }
 
-  test_addLibraryImports_package_hasDart_hasPackages_insertAfter() async {
+  Future<void>
+      test_addLibraryImports_package_hasDart_hasPackages_insertAfter() async {
     addPackageFile('aaa', 'aaa.dart', '');
     await resolveTestUnit('''
 import 'dart:async';
@@ -208,7 +209,8 @@
 ''');
   }
 
-  test_addLibraryImports_package_hasDart_hasPackages_insertBefore() async {
+  Future<void>
+      test_addLibraryImports_package_hasDart_hasPackages_insertBefore() async {
     addPackageFile('bbb', 'bbb.dart', '');
     await resolveTestUnit('''
 import 'dart:async';
@@ -224,7 +226,7 @@
 ''');
   }
 
-  test_addLibraryImports_package_hasImports_between() async {
+  Future<void> test_addLibraryImports_package_hasImports_between() async {
     addPackageFile('aaa', 'aaa.dart', '');
     addPackageFile('ddd', 'ddd.dart', '');
     await resolveTestUnit('''
@@ -241,7 +243,7 @@
 ''');
   }
 
-  test_invertCondition_binary_compare() async {
+  Future<void> test_invertCondition_binary_compare() async {
     await assert_invertCondition('0 < 1', '0 >= 1');
     await assert_invertCondition('0 > 1', '0 <= 1');
     await assert_invertCondition('0 <= 1', '0 > 1');
@@ -250,36 +252,36 @@
     await assert_invertCondition('0 != 1', '0 == 1');
   }
 
-  test_invertCondition_binary_compare_boolean() async {
+  Future<void> test_invertCondition_binary_compare_boolean() async {
     await assert_invertCondition('b1 == null', 'b1 != null');
     await assert_invertCondition('b1 != null', 'b1 == null');
   }
 
-  test_invertCondition_binary_logical() async {
+  Future<void> test_invertCondition_binary_logical() async {
     await assert_invertCondition('b1 && b2', '!b1 || !b2');
     await assert_invertCondition('!b1 && !b2', 'b1 || b2');
     await assert_invertCondition('b1 || b2', '!b1 && !b2');
     await assert_invertCondition('!b1 || !b2', 'b1 && b2');
   }
 
-  test_invertCondition_complex() async {
+  Future<void> test_invertCondition_complex() async {
     await assert_invertCondition('b1 && b2 || b3', '(!b1 || !b2) && !b3');
     await assert_invertCondition('b1 || b2 && b3', '!b1 && (!b2 || !b3)');
     await assert_invertCondition('(!b1 || !b2) && !b3', 'b1 && b2 || b3');
     await assert_invertCondition('!b1 && (!b2 || !b3)', 'b1 || b2 && b3');
   }
 
-  test_invertCondition_is() async {
+  Future<void> test_invertCondition_is() async {
     await assert_invertCondition('v1 is int', 'v1 is! int');
     await assert_invertCondition('v1 is! int', 'v1 is int');
   }
 
-  test_invertCondition_literal() async {
+  Future<void> test_invertCondition_literal() async {
     await assert_invertCondition('true', 'false');
     await assert_invertCondition('false', 'true');
   }
 
-  test_invertCondition_not() async {
+  Future<void> test_invertCondition_not() async {
     await assert_invertCondition('b1', '!b1');
     await assert_invertCondition('!b1', 'b1');
     await assert_invertCondition('!((b1))', 'b1');
@@ -317,5 +319,5 @@
   _SourceMock(this.fullName, this.uri);
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
diff --git a/pkg/analysis_server/test/services/linter/linter_test.dart b/pkg/analysis_server/test/services/linter/linter_test.dart
index 6ddf34a..1cc5461 100644
--- a/pkg/analysis_server/test/services/linter/linter_test.dart
+++ b/pkg/analysis_server/test/services/linter/linter_test.dart
@@ -12,7 +12,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LinterRuleOptionsValidatorTest);
   });
@@ -28,7 +28,7 @@
 
   List<AnalysisError> get errors => recorder.errors;
 
-  setUp() {
+  void setUp() {
     registerLintRules();
     recorder = RecordingErrorListener();
     reporter = ErrorReporter(
@@ -38,7 +38,7 @@
     );
   }
 
-  test_linter_defined_rules() {
+  void test_linter_defined_rules() {
     validate('''
 linter:
   rules:
@@ -46,14 +46,14 @@
     ''', []);
   }
 
-  test_linter_no_rules() {
+  void test_linter_no_rules() {
     validate('''
 linter:
   rules:
     ''', []);
   }
 
-  test_linter_null_rule() {
+  void test_linter_null_rule() {
     validate('''
 linter:
   rules:
@@ -62,7 +62,7 @@
     ''', []);
   }
 
-  test_linter_undefined_rule() {
+  void test_linter_undefined_rule() {
     validate('''
 linter:
   rules:
@@ -70,7 +70,7 @@
     ''', [UNDEFINED_LINT_WARNING]);
   }
 
-  validate(String source, List<ErrorCode> expected) {
+  void validate(String source, List<ErrorCode> expected) {
     var options = optionsProvider.getOptionsFromString(source);
     validator.validate(reporter, options);
     expect(errors.map((AnalysisError e) => e.errorCode),
@@ -83,5 +83,5 @@
   String get fullName => '/package/lib/test.dart';
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
diff --git a/pkg/analysis_server/test/services/linter/test_all.dart b/pkg/analysis_server/test/services/linter/test_all.dart
index feb89d6..bfc8186 100644
--- a/pkg/analysis_server/test/services/linter/test_all.dart
+++ b/pkg/analysis_server/test/services/linter/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'linter_test.dart' as linter_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     linter_test.main();
   }, name: 'linter');
diff --git a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
index 8761e0c..84fc2b4 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertGetterToMethodTest);
   });
@@ -23,7 +23,7 @@
   @override
   ConvertGetterToMethodRefactoring refactoring;
 
-  test_change_function() async {
+  Future<void> test_change_function() async {
     await indexTestUnit('''
 int get test => 42;
 main() {
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_change_method() async {
+  Future<void> test_change_method() async {
     await indexTestUnit('''
 class A {
   int get test => 1;
@@ -87,7 +87,7 @@
 ''');
   }
 
-  test_change_multipleFiles() async {
+  Future<void> test_change_multipleFiles() async {
     await indexUnit('/home/test/lib/other.dart', r'''
 class A {
   int get test => 1;
@@ -117,7 +117,7 @@
 ''');
   }
 
-  test_checkInitialConditions_syntheticGetter() async {
+  Future<void> test_checkInitialConditions_syntheticGetter() async {
     await indexTestUnit('''
 int test = 42;
 main() {
diff --git a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
index 6acd967..ee9378d 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
@@ -14,7 +14,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertMethodToGetterTest);
   });
@@ -25,7 +25,7 @@
   @override
   ConvertMethodToGetterRefactoring refactoring;
 
-  test_change_function() async {
+  Future<void> test_change_function() async {
     await indexTestUnit('''
 int test() => 42;
 main() {
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_change_method() async {
+  Future<void> test_change_method() async {
     await indexTestUnit('''
 class A {
   int test() => 1;
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_change_multipleFiles() async {
+  Future<void> test_change_multipleFiles() async {
     await indexUnit('/home/test/lib/other.dart', r'''
 class A {
   int test() => 1;
@@ -119,7 +119,7 @@
 ''');
   }
 
-  test_checkInitialConditions_alreadyGetter() async {
+  Future<void> test_checkInitialConditions_alreadyGetter() async {
     await indexTestUnit('''
 int get test => 42;
 main() {
@@ -134,7 +134,7 @@
         'Only class methods or top-level functions can be converted to getters.');
   }
 
-  test_checkInitialConditions_hasParameters() async {
+  Future<void> test_checkInitialConditions_hasParameters() async {
     await indexTestUnit('''
 int test(x) => x * 2;
 main() {
@@ -147,7 +147,7 @@
         'Only methods without parameters can be converted to getters.');
   }
 
-  test_checkInitialConditions_localFunction() async {
+  Future<void> test_checkInitialConditions_localFunction() async {
     await indexTestUnit('''
 main() {
   test() {}
@@ -161,7 +161,7 @@
         'Only top-level functions can be converted to getters.');
   }
 
-  test_checkInitialConditions_notFunctionOrMethod() async {
+  Future<void> test_checkInitialConditions_notFunctionOrMethod() async {
     await indexTestUnit('''
 class A {
   A.test();
@@ -173,7 +173,7 @@
         'Only class methods or top-level functions can be converted to getters.');
   }
 
-  test_checkInitialConditions_returnTypeVoid() async {
+  Future<void> test_checkInitialConditions_returnTypeVoid() async {
     await indexTestUnit('''
 void test() {}
 ''');
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 4790004..c027b46 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -15,7 +15,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractLocalTest);
   });
@@ -26,7 +26,7 @@
   @override
   ExtractLocalRefactoringImpl refactoring;
 
-  test_checkFinalConditions_sameVariable_after() async {
+  Future<void> test_checkFinalConditions_sameVariable_after() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -40,7 +40,7 @@
         expectedMessage: "The name 'res' is already used in the scope.");
   }
 
-  test_checkFinalConditions_sameVariable_before() async {
+  Future<void> test_checkFinalConditions_sameVariable_before() async {
     await indexTestUnit('''
 main() {
   var res;
@@ -54,7 +54,7 @@
         expectedMessage: "The name 'res' is already used in the scope.");
   }
 
-  test_checkInitialCondition_false_outOfRange_length() async {
+  Future<void> test_checkInitialCondition_false_outOfRange_length() async {
     await indexTestUnit('''
 main() {
   print(1 + 2);
@@ -65,7 +65,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkInitialCondition_outOfRange_offset() async {
+  Future<void> test_checkInitialCondition_outOfRange_offset() async {
     await indexTestUnit('''
 main() {
   print(1 + 2);
@@ -76,7 +76,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkInitialConditions_assignmentLeftHandSize() async {
+  Future<void> test_checkInitialConditions_assignmentLeftHandSize() async {
     await indexTestUnit('''
 main() {
   var v = 0;
@@ -90,7 +90,8 @@
         expectedMessage: 'Cannot extract the left-hand side of an assignment.');
   }
 
-  test_checkInitialConditions_namePartOfDeclaration_function() async {
+  Future<void>
+      test_checkInitialConditions_namePartOfDeclaration_function() async {
     await indexTestUnit('''
 void main() {
   void foo() {}
@@ -103,7 +104,8 @@
         expectedMessage: 'Cannot extract the name part of a declaration.');
   }
 
-  test_checkInitialConditions_namePartOfDeclaration_variable() async {
+  Future<void>
+      test_checkInitialConditions_namePartOfDeclaration_variable() async {
     await indexTestUnit('''
 main() {
   int vvv = 0;
@@ -116,7 +118,7 @@
         expectedMessage: 'Cannot extract the name part of a declaration.');
   }
 
-  test_checkInitialConditions_noExpression() async {
+  Future<void> test_checkInitialConditions_noExpression() async {
     await indexTestUnit('''
 main() {
   // abc
@@ -127,7 +129,7 @@
     await _assertInitialConditions_fatal_selection();
   }
 
-  test_checkInitialConditions_notPartOfFunction() async {
+  Future<void> test_checkInitialConditions_notPartOfFunction() async {
     await indexTestUnit('''
 int a = 1 + 2;
 ''');
@@ -139,7 +141,8 @@
             'to activate this refactoring.');
   }
 
-  test_checkInitialConditions_stringSelection_leadingQuote() async {
+  Future<void>
+      test_checkInitialConditions_stringSelection_leadingQuote() async {
     await indexTestUnit('''
 main() {
   var vvv = 'abc';
@@ -155,7 +158,8 @@
 ''');
   }
 
-  test_checkInitialConditions_stringSelection_trailingQuote() async {
+  Future<void>
+      test_checkInitialConditions_stringSelection_trailingQuote() async {
     await indexTestUnit('''
 main() {
   var vvv = 'abc';
@@ -171,7 +175,7 @@
 ''');
   }
 
-  test_checkInitialConditions_voidExpression() async {
+  Future<void> test_checkInitialConditions_voidExpression() async {
     await indexTestUnit('''
 main() {
   print(42);
@@ -184,7 +188,7 @@
         expectedMessage: 'Cannot extract the void expression.');
   }
 
-  test_checkName() async {
+  Future<void> test_checkName() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -207,7 +211,7 @@
     assertRefactoringStatusOK(refactoring.checkName());
   }
 
-  test_checkName_conflict_withInvokedFunction() async {
+  Future<void> test_checkName_conflict_withInvokedFunction() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -224,7 +228,7 @@
         expectedMessage: "The name 'res' is already used in the scope.");
   }
 
-  test_checkName_conflict_withOtherLocal() async {
+  Future<void> test_checkName_conflict_withOtherLocal() async {
     await indexTestUnit('''
 main() {
   var res;
@@ -239,7 +243,7 @@
         expectedMessage: "The name 'res' is already used in the scope.");
   }
 
-  test_checkName_conflict_withTypeName() async {
+  Future<void> test_checkName_conflict_withTypeName() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -256,7 +260,7 @@
         expectedMessage: "The name 'Res' is already used in the scope.");
   }
 
-  test_completeStatementExpression() async {
+  Future<void> test_completeStatementExpression() async {
     await indexTestUnit('''
 main(p) {
   p.toString();
@@ -271,7 +275,7 @@
 ''');
   }
 
-  test_const_argument_inConstInstanceCreation() async {
+  Future<void> test_const_argument_inConstInstanceCreation() async {
     await indexTestUnit('''
 class A {
   const A(int a, int b);
@@ -293,7 +297,7 @@
 ''');
   }
 
-  test_const_inList() async {
+  Future<void> test_const_inList() async {
     await indexTestUnit('''
 main() {
   const [1, 2];
@@ -309,7 +313,7 @@
 ''');
   }
 
-  test_const_inList_inBinaryExpression() async {
+  Future<void> test_const_inList_inBinaryExpression() async {
     await indexTestUnit('''
 main() {
   const [1 + 2, 3];
@@ -325,7 +329,7 @@
 ''');
   }
 
-  test_const_inList_inConditionalExpression() async {
+  Future<void> test_const_inList_inConditionalExpression() async {
     await indexTestUnit('''
 main() {
   const [true ? 1 : 2, 3];
@@ -341,7 +345,7 @@
 ''');
   }
 
-  test_const_inList_inParenthesis() async {
+  Future<void> test_const_inList_inParenthesis() async {
     await indexTestUnit('''
 main() {
   const [(1), 2];
@@ -357,7 +361,7 @@
 ''');
   }
 
-  test_const_inList_inPrefixExpression() async {
+  Future<void> test_const_inList_inPrefixExpression() async {
     await indexTestUnit('''
 main() {
   const [!true, 2];
@@ -373,7 +377,7 @@
 ''');
   }
 
-  test_const_inMap_key() async {
+  Future<void> test_const_inMap_key() async {
     await indexTestUnit('''
 main() {
   const {1: 2};
@@ -389,7 +393,7 @@
 ''');
   }
 
-  test_const_inMap_value() async {
+  Future<void> test_const_inMap_value() async {
     await indexTestUnit('''
 main() {
   const {1: 2};
@@ -405,7 +409,7 @@
 ''');
   }
 
-  test_coveringExpressions() async {
+  Future<void> test_coveringExpressions() async {
     await indexTestUnit('''
 main() {
   int aaa = 1;
@@ -421,7 +425,7 @@
         ['bbb', 'bbb * 2', 'aaa + bbb * 2', 'aaa + bbb * 2 + 3']);
   }
 
-  test_coveringExpressions_inArgumentList() async {
+  Future<void> test_coveringExpressions_inArgumentList() async {
     await indexTestUnit('''
 main() {
   foo(111 + 222);
@@ -435,7 +439,7 @@
     expect(subExpressions, ['111', '111 + 222', 'foo(111 + 222)']);
   }
 
-  test_coveringExpressions_inInvocationOfVoidFunction() async {
+  Future<void> test_coveringExpressions_inInvocationOfVoidFunction() async {
     await indexTestUnit('''
 main() {
   foo(111 + 222);
@@ -449,7 +453,7 @@
     expect(subExpressions, ['111', '111 + 222']);
   }
 
-  test_coveringExpressions_namedExpression_value() async {
+  Future<void> test_coveringExpressions_namedExpression_value() async {
     await indexTestUnit('''
 main() {
   foo(ppp: 42);
@@ -463,7 +467,7 @@
     expect(subExpressions, ['42', 'foo(ppp: 42)']);
   }
 
-  test_coveringExpressions_skip_assignment() async {
+  Future<void> test_coveringExpressions_skip_assignment() async {
     await indexTestUnit('''
 main() {
   int v;
@@ -478,7 +482,7 @@
     expect(subExpressions, ['111', '111 + 222', 'foo(v = 111 + 222)']);
   }
 
-  test_coveringExpressions_skip_constructorName() async {
+  Future<void> test_coveringExpressions_skip_constructorName() async {
     await indexTestUnit('''
 class AAA {
   AAA.name() {}
@@ -494,7 +498,7 @@
     expect(subExpressions, ['new AAA.name()']);
   }
 
-  test_coveringExpressions_skip_constructorName_name() async {
+  Future<void> test_coveringExpressions_skip_constructorName_name() async {
     await indexTestUnit('''
 class A {
   A.name() {}
@@ -510,7 +514,7 @@
     expect(subExpressions, ['new A.name()']);
   }
 
-  test_coveringExpressions_skip_constructorName_type() async {
+  Future<void> test_coveringExpressions_skip_constructorName_type() async {
     await indexTestUnit('''
 class A {}
 main() {
@@ -524,7 +528,8 @@
     expect(subExpressions, ['new A()']);
   }
 
-  test_coveringExpressions_skip_constructorName_typeArgument() async {
+  Future<void>
+      test_coveringExpressions_skip_constructorName_typeArgument() async {
     await indexTestUnit('''
 class A<T> {}
 main() {
@@ -538,7 +543,7 @@
     expect(subExpressions, ['new A<String>()']);
   }
 
-  test_coveringExpressions_skip_namedExpression() async {
+  Future<void> test_coveringExpressions_skip_namedExpression() async {
     await indexTestUnit('''
 main() {
   foo(ppp: 42);
@@ -552,7 +557,7 @@
     expect(subExpressions, ['foo(ppp: 42)']);
   }
 
-  test_fragmentExpression() async {
+  Future<void> test_fragmentExpression() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 3 + 4;
@@ -568,7 +573,7 @@
 ''');
   }
 
-  test_fragmentExpression_leadingNotWhitespace() async {
+  Future<void> test_fragmentExpression_leadingNotWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 3 + 4;
@@ -584,7 +589,7 @@
 ''');
   }
 
-  test_fragmentExpression_leadingPartialSelection() async {
+  Future<void> test_fragmentExpression_leadingPartialSelection() async {
     await indexTestUnit('''
 main() {
   int a = 111 + 2 + 3 + 4;
@@ -600,7 +605,7 @@
 ''');
   }
 
-  test_fragmentExpression_leadingWhitespace() async {
+  Future<void> test_fragmentExpression_leadingWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 3 + 4;
@@ -616,7 +621,7 @@
 ''');
   }
 
-  test_fragmentExpression_notAssociativeOperator() async {
+  Future<void> test_fragmentExpression_notAssociativeOperator() async {
     await indexTestUnit('''
 main() {
   int a = 1 - 2 - 3 - 4;
@@ -632,7 +637,7 @@
 ''');
   }
 
-  test_fragmentExpression_trailingNotWhitespace() async {
+  Future<void> test_fragmentExpression_trailingNotWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 3 + 4;
@@ -648,7 +653,7 @@
 ''');
   }
 
-  test_fragmentExpression_trailingPartialSelection() async {
+  Future<void> test_fragmentExpression_trailingPartialSelection() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 333 + 4;
@@ -664,7 +669,7 @@
 ''');
   }
 
-  test_fragmentExpression_trailingWhitespace() async {
+  Future<void> test_fragmentExpression_trailingWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 3 + 4;
@@ -680,7 +685,7 @@
 ''');
   }
 
-  test_guessNames_fragmentExpression() async {
+  Future<void> test_guessNames_fragmentExpression() async {
     await indexTestUnit('''
 main() {
   var a = 111 + 222 + 333 + 444;
@@ -692,7 +697,7 @@
     expect(refactoring.names, unorderedEquals(['i']));
   }
 
-  test_guessNames_singleExpression() async {
+  Future<void> test_guessNames_singleExpression() async {
     await indexTestUnit('''
 class TreeItem {}
 TreeItem getSelectedItem() => null;
@@ -708,7 +713,7 @@
         unorderedEquals(['selectedItem', 'item', 'my', 'treeItem']));
   }
 
-  test_guessNames_stringPart() async {
+  Future<void> test_guessNames_stringPart() async {
     await indexTestUnit('''
 main() {
   var s = 'Hello Bob... welcome to Dart!';
@@ -720,7 +725,7 @@
     expect(refactoring.names, unorderedEquals(['helloBob', 'bob']));
   }
 
-  test_isAvailable_false_notPartOfFunction() async {
+  Future<void> test_isAvailable_false_notPartOfFunction() async {
     await indexTestUnit('''
 var v = 1 + 2;
 ''');
@@ -728,7 +733,7 @@
     expect(refactoring.isAvailable(), isFalse);
   }
 
-  test_isAvailable_true() async {
+  Future<void> test_isAvailable_true() async {
     await indexTestUnit('''
 main() {
   print(1 + 2);
@@ -738,7 +743,7 @@
     expect(refactoring.isAvailable(), isTrue);
   }
 
-  test_lint_prefer_final_locals() async {
+  Future<void> test_lint_prefer_final_locals() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_final_locals]);
     await indexTestUnit('''
 main() {
@@ -755,7 +760,7 @@
 ''');
   }
 
-  test_occurrences_differentName_samePrefix() async {
+  Future<void> test_occurrences_differentName_samePrefix() async {
     await indexTestUnit('''
 void main(A a) {
   if (a.foo != 1) {
@@ -785,7 +790,7 @@
 ''');
   }
 
-  test_occurrences_differentVariable() async {
+  Future<void> test_occurrences_differentVariable() async {
     await indexTestUnit('''
 main() {
   {
@@ -819,7 +824,7 @@
         length: 3, offsets: [36, 59, 85], names: ['object', 'i']);
   }
 
-  test_occurrences_disableOccurrences() async {
+  Future<void> test_occurrences_disableOccurrences() async {
     await indexTestUnit('''
 int foo() => 42;
 main() {
@@ -840,7 +845,7 @@
 ''');
   }
 
-  test_occurrences_ignore_assignmentLeftHandSize() async {
+  Future<void> test_occurrences_ignore_assignmentLeftHandSize() async {
     await indexTestUnit('''
 main() {
   int v = 1;
@@ -864,7 +869,7 @@
 ''');
   }
 
-  test_occurrences_ignore_nameOfVariableDeclaration() async {
+  Future<void> test_occurrences_ignore_nameOfVariableDeclaration() async {
     await indexTestUnit('''
 main() {
   int v = 1;
@@ -882,7 +887,7 @@
 ''');
   }
 
-  test_occurrences_singleExpression() async {
+  Future<void> test_occurrences_singleExpression() async {
     await indexTestUnit('''
 int foo() => 42;
 main() {
@@ -902,7 +907,7 @@
 ''');
   }
 
-  test_occurrences_useDominator() async {
+  Future<void> test_occurrences_useDominator() async {
     await indexTestUnit('''
 main() {
   if (true) {
@@ -926,7 +931,7 @@
 ''');
   }
 
-  test_occurrences_whenComment() async {
+  Future<void> test_occurrences_whenComment() async {
     await indexTestUnit('''
 int foo() => 42;
 main() {
@@ -946,7 +951,7 @@
 ''');
   }
 
-  test_occurrences_withSpace() async {
+  Future<void> test_occurrences_withSpace() async {
     await indexTestUnit('''
 int foo(String s) => 42;
 main() {
@@ -966,7 +971,7 @@
 ''');
   }
 
-  test_offsets_lengths() async {
+  Future<void> test_offsets_lengths() async {
     await indexTestUnit('''
 int foo() => 42;
 main() {
@@ -982,7 +987,7 @@
     expect(refactoring.lengths, unorderedEquals([5, 6]));
   }
 
-  test_singleExpression() async {
+  Future<void> test_singleExpression() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -998,7 +1003,7 @@
 ''');
   }
 
-  test_singleExpression_getter() async {
+  Future<void> test_singleExpression_getter() async {
     await indexTestUnit('''
 class A {
   int get foo => 42;
@@ -1023,7 +1028,7 @@
   }
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
-  test_singleExpression_hasParseError_expectedSemicolon() async {
+  Future<void> test_singleExpression_hasParseError_expectedSemicolon() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit('''
 main(p) {
@@ -1042,7 +1047,7 @@
 ''');
   }
 
-  test_singleExpression_inExpressionBody_ofClosure() async {
+  Future<void> test_singleExpression_inExpressionBody_ofClosure() async {
     await indexTestUnit('''
 main() {
   print((x) => x.y * x.y + 1);
@@ -1062,7 +1067,7 @@
         length: 3, offsets: [31, 53, 59], names: ['y']);
   }
 
-  test_singleExpression_inExpressionBody_ofFunction() async {
+  Future<void> test_singleExpression_inExpressionBody_ofFunction() async {
     await indexTestUnit('''
 foo(Point p) => p.x * p.x + p.y * p.y;
 class Point {int x; int y;}
@@ -1080,7 +1085,7 @@
         length: 3, offsets: [21, 41, 47], names: ['x', 'i']);
   }
 
-  test_singleExpression_inExpressionBody_ofMethod() async {
+  Future<void> test_singleExpression_inExpressionBody_ofMethod() async {
     await indexTestUnit('''
 class A {
   foo(Point p) => p.x * p.x + p.y * p.y;
@@ -1102,7 +1107,7 @@
         length: 3, offsets: [35, 57, 63], names: ['x', 'i']);
   }
 
-  test_singleExpression_inIfElseIf() async {
+  Future<void> test_singleExpression_inIfElseIf() async {
     await indexTestUnit('''
 main(int p) {
   if (p == 1) {
@@ -1126,7 +1131,7 @@
 ''');
   }
 
-  test_singleExpression_inMethod() async {
+  Future<void> test_singleExpression_inMethod() async {
     await indexTestUnit('''
 class A {
   main() {
@@ -1146,7 +1151,7 @@
 ''');
   }
 
-  test_singleExpression_leadingNotWhitespace() async {
+  Future<void> test_singleExpression_leadingNotWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 12 + 345;
@@ -1162,7 +1167,7 @@
 ''');
   }
 
-  test_singleExpression_leadingWhitespace() async {
+  Future<void> test_singleExpression_leadingWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 1 /*abc*/ + 2 + 345;
@@ -1178,7 +1183,7 @@
 ''');
   }
 
-  test_singleExpression_methodName_reference() async {
+  Future<void> test_singleExpression_methodName_reference() async {
     await indexTestUnit('''
 main() {
   var v = foo().length;
@@ -1196,7 +1201,7 @@
 ''');
   }
 
-  test_singleExpression_nameOfProperty_prefixedIdentifier() async {
+  Future<void> test_singleExpression_nameOfProperty_prefixedIdentifier() async {
     await indexTestUnit('''
 main(p) {
   var v = p.value; // marker
@@ -1212,7 +1217,7 @@
 ''');
   }
 
-  test_singleExpression_nameOfProperty_propertyAccess() async {
+  Future<void> test_singleExpression_nameOfProperty_propertyAccess() async {
     await indexTestUnit('''
 main() {
   var v = foo().length; // marker
@@ -1235,7 +1240,7 @@
    * `1 + 2` will be a separate and complete binary expression, so it can be
    * handled as a single expression.
    */
-  test_singleExpression_partOfBinaryExpression() async {
+  Future<void> test_singleExpression_partOfBinaryExpression() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 + 3 + 4;
@@ -1251,7 +1256,7 @@
 ''');
   }
 
-  test_singleExpression_string() async {
+  Future<void> test_singleExpression_string() async {
     await indexTestUnit('''
 void main() {
   print("1234");
@@ -1267,7 +1272,7 @@
 ''');
   }
 
-  test_singleExpression_trailingNotWhitespace() async {
+  Future<void> test_singleExpression_trailingNotWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 12 + 345;
@@ -1283,7 +1288,7 @@
 ''');
   }
 
-  test_singleExpression_trailingWhitespace() async {
+  Future<void> test_singleExpression_trailingWhitespace() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2 ;
@@ -1299,7 +1304,7 @@
 ''');
   }
 
-  test_stringLiteral_part() async {
+  Future<void> test_stringLiteral_part() async {
     await indexTestUnit('''
 main() {
   print('abcdefgh');
@@ -1316,7 +1321,7 @@
     _assertSingleLinkedEditGroup(length: 3, offsets: [15, 41], names: ['cde']);
   }
 
-  test_stringLiteral_whole() async {
+  Future<void> test_stringLiteral_whole() async {
     await indexTestUnit('''
 main() {
   print('abc');
@@ -1334,7 +1339,7 @@
         length: 3, offsets: [15, 36], names: ['object', 's']);
   }
 
-  test_stringLiteralPart() async {
+  Future<void> test_stringLiteralPart() async {
     await indexTestUnit(r'''
 main() {
   int x = 1;
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 77be546..a6409cf 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -13,7 +13,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractMethodTest);
   });
@@ -24,7 +24,7 @@
   @override
   ExtractMethodRefactoringImpl refactoring;
 
-  test_bad_assignmentLeftHandSide() async {
+  Future<void> test_bad_assignmentLeftHandSide() async {
     await indexTestUnit('''
 main() {
   int aaa;
@@ -36,7 +36,7 @@
         'Cannot extract the left-hand side of an assignment.');
   }
 
-  test_bad_comment_selectionEndsInside() async {
+  Future<void> test_bad_comment_selectionEndsInside() async {
     await indexTestUnit('''
 main() {
 // start
@@ -50,7 +50,7 @@
     return _assertConditionsFatal('Selection ends inside a comment.');
   }
 
-  test_bad_comment_selectionStartsInside() async {
+  Future<void> test_bad_comment_selectionStartsInside() async {
     await indexTestUnit('''
 main() {
 /*
@@ -64,7 +64,7 @@
     return _assertConditionsFatal('Selection begins inside a comment.');
   }
 
-  test_bad_conflict_method_alreadyDeclaresMethod() async {
+  Future<void> test_bad_conflict_method_alreadyDeclaresMethod() async {
     await indexTestUnit('''
 class A {
   void res() {}
@@ -80,7 +80,7 @@
         "Class 'A' already declares method with name 'res'.");
   }
 
-  test_bad_conflict_method_shadowsSuperDeclaration() async {
+  Future<void> test_bad_conflict_method_shadowsSuperDeclaration() async {
     await indexTestUnit('''
 class A {
   void res() {} // marker
@@ -98,7 +98,7 @@
     return _assertConditionsError("Created method will shadow method 'A.res'.");
   }
 
-  test_bad_conflict_topLevel_alreadyDeclaresFunction() async {
+  Future<void> test_bad_conflict_topLevel_alreadyDeclaresFunction() async {
     await indexTestUnit('''
 library my.lib;
 
@@ -114,7 +114,7 @@
         "Library already declares function with name 'res'.");
   }
 
-  test_bad_conflict_topLevel_willHideInheritedMemberUsage() async {
+  Future<void> test_bad_conflict_topLevel_willHideInheritedMemberUsage() async {
     await indexTestUnit('''
 class A {
   void res() {}
@@ -135,7 +135,7 @@
         "Created function will shadow method 'A.res'.");
   }
 
-  test_bad_constructor_initializer() async {
+  Future<void> test_bad_constructor_initializer() async {
     await indexTestUnit('''
 class A {
   int f;
@@ -147,7 +147,7 @@
         'Cannot extract a constructor initializer. Select expression part of initializer.');
   }
 
-  test_bad_constructor_redirectingConstructor() async {
+  Future<void> test_bad_constructor_redirectingConstructor() async {
     await indexTestUnit('''
 class A {
   A() : this.named();
@@ -159,7 +159,7 @@
         'Cannot extract a constructor initializer. Select expression part of initializer.');
   }
 
-  test_bad_constructor_superConstructor() async {
+  Future<void> test_bad_constructor_superConstructor() async {
     await indexTestUnit('''
 class A {}
 class B extends A {
@@ -171,7 +171,7 @@
         'Cannot extract a constructor initializer. Select expression part of initializer.');
   }
 
-  test_bad_doWhile_body() async {
+  Future<void> test_bad_doWhile_body() async {
     await indexTestUnit('''
 main() {
   do
@@ -187,7 +187,7 @@
         "Operation not applicable to a 'do' statement's body and expression.");
   }
 
-  test_bad_emptySelection() async {
+  Future<void> test_bad_emptySelection() async {
     await indexTestUnit('''
 main() {
 // start
@@ -200,7 +200,7 @@
         'Can only extract a single expression or a set of statements.');
   }
 
-  test_bad_forLoop_conditionAndUpdaters() async {
+  Future<void> test_bad_forLoop_conditionAndUpdaters() async {
     await indexTestUnit('''
 main() {
   for (
@@ -217,7 +217,7 @@
         "Operation not applicable to a 'for' statement's condition and updaters.");
   }
 
-  test_bad_forLoop_init() async {
+  Future<void> test_bad_forLoop_init() async {
     await indexTestUnit('''
 main() {
   for (
@@ -234,7 +234,7 @@
         "Cannot extract initialization part of a 'for' statement.");
   }
 
-  test_bad_forLoop_initAndCondition() async {
+  Future<void> test_bad_forLoop_initAndCondition() async {
     await indexTestUnit('''
 main() {
   for (
@@ -251,7 +251,7 @@
         "Operation not applicable to a 'for' statement's initializer and condition.");
   }
 
-  test_bad_forLoop_updaters() async {
+  Future<void> test_bad_forLoop_updaters() async {
     await indexTestUnit('''
 main() {
   for (
@@ -268,7 +268,7 @@
         "Cannot extract increment part of a 'for' statement.");
   }
 
-  test_bad_forLoop_updatersAndBody() async {
+  Future<void> test_bad_forLoop_updatersAndBody() async {
     await indexTestUnit('''
 main() {
   for (
@@ -285,7 +285,7 @@
         'Not all selected statements are enclosed by the same parent statement.');
   }
 
-  test_bad_methodName_reference() async {
+  Future<void> test_bad_methodName_reference() async {
     await indexTestUnit('''
 main() {
   main();
@@ -295,7 +295,7 @@
     return _assertConditionsFatal('Cannot extract a single method name.');
   }
 
-  test_bad_namePartOfDeclaration_function() async {
+  Future<void> test_bad_namePartOfDeclaration_function() async {
     await indexTestUnit('''
 void main() {
 }
@@ -305,7 +305,7 @@
         'Cannot extract the name part of a declaration.');
   }
 
-  test_bad_namePartOfDeclaration_variable() async {
+  Future<void> test_bad_namePartOfDeclaration_variable() async {
     await indexTestUnit('''
 main() {
   int vvv = 0;
@@ -316,7 +316,7 @@
         'Cannot extract the name part of a declaration.');
   }
 
-  test_bad_namePartOfQualified() async {
+  Future<void> test_bad_namePartOfQualified() async {
     await indexTestUnit('''
 class A {
   var fff;
@@ -331,7 +331,7 @@
         'Can not extract name part of a property access.');
   }
 
-  test_bad_newMethodName_notIdentifier() async {
+  Future<void> test_bad_newMethodName_notIdentifier() async {
     await indexTestUnit('''
 main() {
 // start
@@ -345,7 +345,7 @@
     return _assertConditionsFatal("Method name must not contain '-'.");
   }
 
-  test_bad_notSameParent() async {
+  Future<void> test_bad_notSameParent() async {
     await indexTestUnit('''
 main() {
   while (false)
@@ -361,7 +361,7 @@
         'Not all selected statements are enclosed by the same parent statement.');
   }
 
-  test_bad_parameterName_duplicate() async {
+  Future<void> test_bad_parameterName_duplicate() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -384,7 +384,7 @@
     return _assertFinalConditionsError("Parameter 'dup' already exists");
   }
 
-  test_bad_parameterName_inUse_function() async {
+  Future<void> test_bad_parameterName_inUse_function() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -408,7 +408,7 @@
         "'f' is already used as a name in the selected code");
   }
 
-  test_bad_parameterName_inUse_localVariable() async {
+  Future<void> test_bad_parameterName_inUse_localVariable() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -431,7 +431,7 @@
         "'a' is already used as a name in the selected code");
   }
 
-  test_bad_parameterName_inUse_method() async {
+  Future<void> test_bad_parameterName_inUse_method() async {
     await indexTestUnit('''
 class A {
   main() {
@@ -457,7 +457,7 @@
         "'m' is already used as a name in the selected code");
   }
 
-  test_bad_selectionEndsInSomeNode() async {
+  Future<void> test_bad_selectionEndsInSomeNode() async {
     await indexTestUnit('''
 main() {
 // start
@@ -472,7 +472,7 @@
         'Extend selection to a valid range.');
   }
 
-  test_bad_statements_exit_notAllExecutionFlows() async {
+  Future<void> test_bad_statements_exit_notAllExecutionFlows() async {
     await indexTestUnit('''
 main(int p) {
 // start
@@ -487,7 +487,7 @@
     return _assertConditionsError(ExtractMethodRefactoringImpl.ERROR_EXITS);
   }
 
-  test_bad_statements_return_andAssignsVariable() async {
+  Future<void> test_bad_statements_return_andAssignsVariable() async {
     await indexTestUnit('''
 main() {
 // start
@@ -503,7 +503,7 @@
         'local variables and return statement.');
   }
 
-  test_bad_switchCase() async {
+  Future<void> test_bad_switchCase() async {
     await indexTestUnit('''
 main() {
   switch (1) {
@@ -519,7 +519,7 @@
         'or parts of a single case block.');
   }
 
-  test_bad_tokensBetweenLastNodeAndSelectionEnd() async {
+  Future<void> test_bad_tokensBetweenLastNodeAndSelectionEnd() async {
     await indexTestUnit('''
 main() {
 // start
@@ -533,7 +533,7 @@
         'The end of the selection contains characters that do not belong to a statement.');
   }
 
-  test_bad_tokensBetweenSelectionStartAndFirstNode() async {
+  Future<void> test_bad_tokensBetweenSelectionStartAndFirstNode() async {
     await indexTestUnit('''
 main() {
 // start
@@ -547,7 +547,7 @@
         'The beginning of the selection contains characters that do not belong to a statement.');
   }
 
-  test_bad_try_catchBlock_block() async {
+  Future<void> test_bad_try_catchBlock_block() async {
     await indexTestUnit('''
 main() {
   try
@@ -564,7 +564,7 @@
         'parts of try, catch, or finally block.');
   }
 
-  test_bad_try_catchBlock_complete() async {
+  Future<void> test_bad_try_catchBlock_complete() async {
     await indexTestUnit('''
 main() {
   try
@@ -581,7 +581,7 @@
         'parts of try, catch, or finally block.');
   }
 
-  test_bad_try_catchBlock_exception() async {
+  Future<void> test_bad_try_catchBlock_exception() async {
     await indexTestUnit('''
 main() {
   try {
@@ -598,7 +598,7 @@
         'Cannot extract the name part of a declaration.');
   }
 
-  test_bad_try_finallyBlock() async {
+  Future<void> test_bad_try_finallyBlock() async {
     await indexTestUnit('''
 main() {
   try
@@ -615,7 +615,7 @@
         'parts of try, catch, or finally block.');
   }
 
-  test_bad_try_tryBlock() async {
+  Future<void> test_bad_try_tryBlock() async {
     await indexTestUnit('''
 main() {
   try
@@ -632,7 +632,7 @@
         'parts of try, catch, or finally block.');
   }
 
-  test_bad_typeReference() async {
+  Future<void> test_bad_typeReference() async {
     await indexTestUnit('''
 main() {
   int a = 0;
@@ -642,7 +642,7 @@
     return _assertConditionsFatal('Cannot extract a single type reference.');
   }
 
-  test_bad_variableDeclarationFragment() async {
+  Future<void> test_bad_variableDeclarationFragment() async {
     await indexTestUnit('''
 main() {
   int
@@ -657,7 +657,7 @@
         'Cannot extract a variable declaration fragment. Select whole declaration statement.');
   }
 
-  test_bad_while_conditionAndBody() async {
+  Future<void> test_bad_while_conditionAndBody() async {
     await indexTestUnit('''
 main() {
   while
@@ -673,7 +673,7 @@
         "Operation not applicable to a while statement's expression and body.");
   }
 
-  test_canExtractGetter_false_closure() async {
+  Future<void> test_canExtractGetter_false_closure() async {
     await indexTestUnit('''
 main() {
   useFunction((_) => true);
@@ -687,7 +687,7 @@
     expect(refactoring.createGetter, false);
   }
 
-  test_canExtractGetter_false_fieldAssignment() async {
+  Future<void> test_canExtractGetter_false_fieldAssignment() async {
     await indexTestUnit('''
 class A {
   var f;
@@ -705,7 +705,7 @@
     expect(refactoring.createGetter, false);
   }
 
-  test_canExtractGetter_false_hasParameters() async {
+  Future<void> test_canExtractGetter_false_hasParameters() async {
     await indexTestUnit('''
 main(int p) {
   int a = p + 1;
@@ -718,7 +718,7 @@
     expect(refactoring.createGetter, false);
   }
 
-  test_canExtractGetter_false_returnNotUsed_assignment() async {
+  Future<void> test_canExtractGetter_false_returnNotUsed_assignment() async {
     await indexTestUnit('''
 var topVar = 0;
 f(int p) {
@@ -732,7 +732,7 @@
     expect(refactoring.createGetter, false);
   }
 
-  test_canExtractGetter_false_returnNotUsed_noReturn() async {
+  Future<void> test_canExtractGetter_false_returnNotUsed_noReturn() async {
     await indexTestUnit('''
 var topVar = 0;
 main() {
@@ -750,7 +750,7 @@
     expect(refactoring.createGetter, false);
   }
 
-  test_canExtractGetter_true() async {
+  Future<void> test_canExtractGetter_true() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -763,7 +763,7 @@
     expect(refactoring.createGetter, true);
   }
 
-  test_checkInitialCondition_false_outOfRange_length() async {
+  Future<void> test_checkInitialCondition_false_outOfRange_length() async {
     await indexTestUnit('''
 main() {
   1 + 2;
@@ -774,7 +774,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkInitialCondition_outOfRange_offset() async {
+  Future<void> test_checkInitialCondition_outOfRange_offset() async {
     await indexTestUnit('''
 main() {
   1 + 2;
@@ -785,7 +785,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkName() async {
+  Future<void> test_checkName() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -823,7 +823,7 @@
     assertRefactoringStatusOK(refactoring.checkName());
   }
 
-  test_closure_asFunction_singleExpression() async {
+  Future<void> test_closure_asFunction_singleExpression() async {
     await indexTestUnit('''
 process(f(x)) {}
 main() {
@@ -842,7 +842,7 @@
 ''');
   }
 
-  test_closure_asFunction_statements() async {
+  Future<void> test_closure_asFunction_statements() async {
     await indexTestUnit('''
 process(f(x)) {}
 main() {
@@ -867,7 +867,7 @@
 ''');
   }
 
-  test_closure_asMethod_statements() async {
+  Future<void> test_closure_asMethod_statements() async {
     await indexTestUnit('''
 process(f(x)) {}
 class A {
@@ -898,7 +898,7 @@
 ''');
   }
 
-  test_closure_atArgumentName() async {
+  Future<void> test_closure_atArgumentName() async {
     await indexTestUnit('''
 void process({int fff(int x)}) {}
 class C {
@@ -921,7 +921,7 @@
 ''');
   }
 
-  test_closure_atParameters() async {
+  Future<void> test_closure_atParameters() async {
     await indexTestUnit('''
 void process(num f(int x)) {}
 class C {
@@ -944,7 +944,7 @@
 ''');
   }
 
-  test_closure_bad_referencesLocalVariable() async {
+  Future<void> test_closure_bad_referencesLocalVariable() async {
     await indexTestUnit('''
 process(f(x)) {}
 main() {
@@ -960,7 +960,7 @@
             'Cannot extract closure as method, it references 1 external variable(s).');
   }
 
-  test_closure_bad_referencesParameter() async {
+  Future<void> test_closure_bad_referencesParameter() async {
     await indexTestUnit('''
 process(f(x)) {}
 main(int k) {
@@ -975,7 +975,7 @@
             'Cannot extract closure as method, it references 1 external variable(s).');
   }
 
-  test_fromTopLevelVariableInitializerClosure() async {
+  Future<void> test_fromTopLevelVariableInitializerClosure() async {
     await indexTestUnit('''
 var X = 1;
 
@@ -996,7 +996,7 @@
 ''');
   }
 
-  test_getExtractGetter_expression_true_binaryExpression() async {
+  Future<void> test_getExtractGetter_expression_true_binaryExpression() async {
     await indexTestUnit('''
 main() {
   print(1 + 2);
@@ -1008,7 +1008,7 @@
     expect(refactoring.createGetter, true);
   }
 
-  test_getExtractGetter_expression_true_literal() async {
+  Future<void> test_getExtractGetter_expression_true_literal() async {
     await indexTestUnit('''
 main() {
   print(42);
@@ -1020,7 +1020,8 @@
     expect(refactoring.createGetter, true);
   }
 
-  test_getExtractGetter_expression_true_prefixedExpression() async {
+  Future<void>
+      test_getExtractGetter_expression_true_prefixedExpression() async {
     await indexTestUnit('''
 main() {
   print(!true);
@@ -1032,7 +1033,8 @@
     expect(refactoring.createGetter, true);
   }
 
-  test_getExtractGetter_expression_true_prefixedIdentifier() async {
+  Future<void>
+      test_getExtractGetter_expression_true_prefixedIdentifier() async {
     await indexTestUnit('''
 main() {
   print(myValue.isEven);
@@ -1045,7 +1047,7 @@
     expect(refactoring.createGetter, true);
   }
 
-  test_getExtractGetter_expression_true_propertyAccess() async {
+  Future<void> test_getExtractGetter_expression_true_propertyAccess() async {
     await indexTestUnit('''
 main() {
   print(1.isEven);
@@ -1057,7 +1059,7 @@
     expect(refactoring.createGetter, true);
   }
 
-  test_getExtractGetter_statements() async {
+  Future<void> test_getExtractGetter_statements() async {
     await indexTestUnit('''
 main() {
 // start
@@ -1072,7 +1074,7 @@
     expect(refactoring.createGetter, false);
   }
 
-  test_getRefactoringName_function() async {
+  Future<void> test_getRefactoringName_function() async {
     await indexTestUnit('''
 main() {
   print(1 + 2);
@@ -1082,7 +1084,7 @@
     expect(refactoring.refactoringName, 'Extract Function');
   }
 
-  test_getRefactoringName_method() async {
+  Future<void> test_getRefactoringName_method() async {
     await indexTestUnit('''
 class A {
   main() {
@@ -1094,7 +1096,7 @@
     expect(refactoring.refactoringName, 'Extract Method');
   }
 
-  test_isAvailable_false_functionName() async {
+  Future<void> test_isAvailable_false_functionName() async {
     await indexTestUnit('''
 void main() {}
 ''');
@@ -1102,7 +1104,7 @@
     expect(refactoring.isAvailable(), isFalse);
   }
 
-  test_isAvailable_true() async {
+  Future<void> test_isAvailable_true() async {
     await indexTestUnit('''
 main() {
   1 + 2;
@@ -1112,7 +1114,7 @@
     expect(refactoring.isAvailable(), isTrue);
   }
 
-  test_names_singleExpression() async {
+  Future<void> test_names_singleExpression() async {
     await indexTestUnit('''
 class TreeItem {}
 TreeItem getSelectedItem() => null;
@@ -1129,7 +1131,7 @@
         unorderedEquals(['selectedItem', 'item', 'my', 'treeItem2']));
   }
 
-  test_offsets_lengths() async {
+  Future<void> test_offsets_lengths() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -1144,7 +1146,7 @@
     expect(refactoring.lengths, unorderedEquals([5, 6]));
   }
 
-  test_returnType_closure() async {
+  Future<void> test_returnType_closure() async {
     await indexTestUnit('''
 process(f(x)) {}
 main() {
@@ -1157,7 +1159,7 @@
     expect(refactoring.returnType, '');
   }
 
-  test_returnType_expression() async {
+  Future<void> test_returnType_expression() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -1169,7 +1171,7 @@
     expect(refactoring.returnType, 'int');
   }
 
-  test_returnType_mixInterfaceFunction() async {
+  Future<void> test_returnType_mixInterfaceFunction() async {
     await indexTestUnit('''
 main() {
 // start
@@ -1187,7 +1189,7 @@
     expect(refactoring.returnType, 'Object');
   }
 
-  test_returnType_statements() async {
+  Future<void> test_returnType_statements() async {
     await indexTestUnit('''
 main() {
 // start
@@ -1202,7 +1204,7 @@
     expect(refactoring.returnType, 'double');
   }
 
-  test_returnType_statements_nullMix() async {
+  Future<void> test_returnType_statements_nullMix() async {
     await indexTestUnit('''
 main(bool p) {
 // start
@@ -1219,7 +1221,7 @@
     expect(refactoring.returnType, 'int');
   }
 
-  test_returnType_statements_void() async {
+  Future<void> test_returnType_statements_void() async {
     await indexTestUnit('''
 main() {
 // start
@@ -1233,7 +1235,7 @@
     expect(refactoring.returnType, 'void');
   }
 
-  test_setExtractGetter() async {
+  Future<void> test_setExtractGetter() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -1254,7 +1256,7 @@
 ''');
   }
 
-  test_singleExpression() async {
+  Future<void> test_singleExpression() async {
     await indexTestUnit('''
 main() {
   int a = 1 + 2;
@@ -1271,7 +1273,7 @@
 ''');
   }
 
-  test_singleExpression_cascade() async {
+  Future<void> test_singleExpression_cascade() async {
     await indexTestUnit('''
 main() {
   String s = '';
@@ -1290,7 +1292,7 @@
 ''');
   }
 
-  test_singleExpression_coveringExpression() async {
+  Future<void> test_singleExpression_coveringExpression() async {
     await indexTestUnit('''
 main(int n) {
   var v = new FooBar(n);
@@ -1314,7 +1316,7 @@
 ''');
   }
 
-  test_singleExpression_dynamic() async {
+  Future<void> test_singleExpression_dynamic() async {
     await indexTestUnit('''
 dynaFunction() {}
 main() {
@@ -1333,7 +1335,7 @@
 ''');
   }
 
-  test_singleExpression_hasAwait() async {
+  Future<void> test_singleExpression_hasAwait() async {
     await indexTestUnit('''
 import 'dart:async';
 Future<int> getValue() async => 42;
@@ -1356,7 +1358,7 @@
 ''');
   }
 
-  test_singleExpression_ignore_assignmentLeftHandSize() async {
+  Future<void> test_singleExpression_ignore_assignmentLeftHandSize() async {
     await indexTestUnit('''
 main() {
   getButton().text = 'txt';
@@ -1377,7 +1379,7 @@
 ''');
   }
 
-  test_singleExpression_occurrences() async {
+  Future<void> test_singleExpression_occurrences() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1414,7 +1416,7 @@
 ''');
   }
 
-  test_singleExpression_occurrences_disabled() async {
+  Future<void> test_singleExpression_occurrences_disabled() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1440,7 +1442,7 @@
 ''');
   }
 
-  test_singleExpression_occurrences_inClassOnly() async {
+  Future<void> test_singleExpression_occurrences_inClassOnly() async {
     await indexTestUnit('''
 class A {
   myMethod() {
@@ -1475,7 +1477,7 @@
 ''');
   }
 
-  test_singleExpression_occurrences_incompatibleTypes() async {
+  Future<void> test_singleExpression_occurrences_incompatibleTypes() async {
     await indexTestUnit('''
 main() {
   int x = 1;
@@ -1498,7 +1500,7 @@
 ''');
   }
 
-  test_singleExpression_occurrences_inWholeUnit() async {
+  Future<void> test_singleExpression_occurrences_inWholeUnit() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1533,7 +1535,7 @@
 ''');
   }
 
-  test_singleExpression_parameter_functionTypeAlias() async {
+  Future<void> test_singleExpression_parameter_functionTypeAlias() async {
     await indexTestUnit('''
 typedef R Foo<S, R>(S s);
 void main(Foo<String, int> foo, String s) {
@@ -1552,7 +1554,7 @@
 ''');
   }
 
-  test_singleExpression_returnType_importLibrary() async {
+  Future<void> test_singleExpression_returnType_importLibrary() async {
     _addLibraryReturningAsync();
     await indexTestUnit('''
 import 'asyncLib.dart';
@@ -1573,7 +1575,7 @@
 ''');
   }
 
-  test_singleExpression_returnTypeGeneric() async {
+  Future<void> test_singleExpression_returnTypeGeneric() async {
     await indexTestUnit('''
 main() {
   var v = new List<String>();
@@ -1590,7 +1592,7 @@
 ''');
   }
 
-  test_singleExpression_returnTypePrefix() async {
+  Future<void> test_singleExpression_returnTypePrefix() async {
     await indexTestUnit('''
 import 'dart:math' as pref;
 main() {
@@ -1609,7 +1611,8 @@
 ''');
   }
 
-  test_singleExpression_staticContext_extractFromInitializer() async {
+  Future<void>
+      test_singleExpression_staticContext_extractFromInitializer() async {
     await indexTestUnit('''
 class A {
   A(int v) {}
@@ -1632,7 +1635,7 @@
 ''');
   }
 
-  test_singleExpression_staticContext_extractFromInstance() async {
+  Future<void> test_singleExpression_staticContext_extractFromInstance() async {
     await indexTestUnit('''
 class A {
   instanceMethodA() {
@@ -1677,7 +1680,7 @@
 ''');
   }
 
-  test_singleExpression_staticContext_extractFromStatic() async {
+  Future<void> test_singleExpression_staticContext_extractFromStatic() async {
     await indexTestUnit('''
 class A {
   static staticMethodA() {
@@ -1722,7 +1725,7 @@
 ''');
   }
 
-  test_singleExpression_staticContext_hasInInitializer() async {
+  Future<void> test_singleExpression_staticContext_hasInInitializer() async {
     await indexTestUnit('''
 class A {
   A(int v) {}
@@ -1751,7 +1754,7 @@
 ''');
   }
 
-  test_singleExpression_usesParameter() async {
+  Future<void> test_singleExpression_usesParameter() async {
     await indexTestUnit('''
 fooA(int a1) {
   int a2 = 2;
@@ -1778,7 +1781,7 @@
 ''');
   }
 
-  test_singleExpression_withVariables() async {
+  Future<void> test_singleExpression_withVariables() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1799,7 +1802,7 @@
 ''');
   }
 
-  test_singleExpression_withVariables_doRename() async {
+  Future<void> test_singleExpression_withVariables_doRename() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1836,7 +1839,7 @@
 ''');
   }
 
-  test_singleExpression_withVariables_doReorder() async {
+  Future<void> test_singleExpression_withVariables_doReorder() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1873,7 +1876,7 @@
 ''');
   }
 
-  test_singleExpression_withVariables_namedExpression() async {
+  Future<void> test_singleExpression_withVariables_namedExpression() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1896,7 +1899,7 @@
 ''');
   }
 
-  test_singleExpression_withVariables_newType() async {
+  Future<void> test_singleExpression_withVariables_newType() async {
     await indexTestUnit('''
 main() {
   int v1 = 1;
@@ -1933,7 +1936,7 @@
 ''');
   }
 
-  test_singleExpression_withVariables_useBestType() async {
+  Future<void> test_singleExpression_withVariables_useBestType() async {
     await indexTestUnit('''
 main() {
   var v1 = 1;
@@ -1954,7 +1957,7 @@
 ''');
   }
 
-  test_statements_assignment() async {
+  Future<void> test_statements_assignment() async {
     await indexTestUnit('''
 main() {
   int v;
@@ -1982,7 +1985,7 @@
 ''');
   }
 
-  test_statements_changeIndentation() async {
+  Future<void> test_statements_changeIndentation() async {
     await indexTestUnit('''
 main() {
   {
@@ -2013,7 +2016,7 @@
 ''');
   }
 
-  test_statements_changeIndentation_multilineString() async {
+  Future<void> test_statements_changeIndentation_multilineString() async {
     await indexTestUnit('''
 main() {
   {
@@ -2046,7 +2049,7 @@
 ''');
   }
 
-  test_statements_definesVariable_notUsedOutside() async {
+  Future<void> test_statements_definesVariable_notUsedOutside() async {
     await indexTestUnit('''
 main() {
   int a = 1;
@@ -2075,7 +2078,8 @@
 ''');
   }
 
-  test_statements_definesVariable_oneUsedOutside_assignment() async {
+  Future<void>
+      test_statements_definesVariable_oneUsedOutside_assignment() async {
     await indexTestUnit('''
 myFunctionA() {
   int a = 1;
@@ -2113,7 +2117,8 @@
 ''');
   }
 
-  test_statements_definesVariable_oneUsedOutside_declaration() async {
+  Future<void>
+      test_statements_definesVariable_oneUsedOutside_declaration() async {
     await indexTestUnit('''
 myFunctionA() {
   int a = 1;
@@ -2155,7 +2160,7 @@
 ''');
   }
 
-  test_statements_definesVariable_twoUsedOutside() async {
+  Future<void> test_statements_definesVariable_twoUsedOutside() async {
     await indexTestUnit('''
 main() {
 // start
@@ -2171,7 +2176,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_statements_duplicate_absolutelySame() async {
+  Future<void> test_statements_duplicate_absolutelySame() async {
     await indexTestUnit('''
 myFunctionA() {
   print(0);
@@ -2203,7 +2208,8 @@
 ''');
   }
 
-  test_statements_duplicate_declaresDifferentlyNamedVariable() async {
+  Future<void>
+      test_statements_duplicate_declaresDifferentlyNamedVariable() async {
     await indexTestUnit('''
 myFunctionA() {
   int varA = 1;
@@ -2235,7 +2241,7 @@
 ''');
   }
 
-  test_statements_dynamic() async {
+  Future<void> test_statements_dynamic() async {
     await indexTestUnit('''
 dynaFunction(p) => 0;
 main() {
@@ -2268,7 +2274,7 @@
   /**
    * We should always add ";" when invoke method with extracted statements.
    */
-  test_statements_endsWithBlock() async {
+  Future<void> test_statements_endsWithBlock() async {
     await indexTestUnit('''
 main() {
 // start
@@ -2295,7 +2301,7 @@
 ''');
   }
 
-  test_statements_exit_throws() async {
+  Future<void> test_statements_exit_throws() async {
     await indexTestUnit('''
 main(int p) {
 // start
@@ -2310,7 +2316,7 @@
     await assertRefactoringConditionsOK();
   }
 
-  test_statements_hasAwait_dynamicReturnType() async {
+  Future<void> test_statements_hasAwait_dynamicReturnType() async {
     await indexTestUnit('''
 import 'dart:async';
 Future getValue() async => 42;
@@ -2340,7 +2346,7 @@
 ''');
   }
 
-  test_statements_hasAwait_expression() async {
+  Future<void> test_statements_hasAwait_expression() async {
     await indexTestUnit('''
 import 'dart:async';
 Future<int> getValue() async => 42;
@@ -2372,7 +2378,7 @@
 ''');
   }
 
-  test_statements_hasAwait_forEach() async {
+  Future<void> test_statements_hasAwait_forEach() async {
     await indexTestUnit('''
 import 'dart:async';
 Stream<int> getValueStream() => null;
@@ -2408,7 +2414,7 @@
 ''');
   }
 
-  test_statements_hasAwait_voidReturnType() async {
+  Future<void> test_statements_hasAwait_voidReturnType() async {
     await indexTestUnit('''
 import 'dart:async';
 Future<int> getValue() async => 42;
@@ -2437,7 +2443,7 @@
 ''');
   }
 
-  test_statements_inSwitchMember() async {
+  Future<void> test_statements_inSwitchMember() async {
     await indexTestUnit('''
 class A {
   foo(int p) {
@@ -2476,7 +2482,7 @@
 ''');
   }
 
-  test_statements_method() async {
+  Future<void> test_statements_method() async {
     await indexTestUnit('''
 class A {
   foo() {
@@ -2503,7 +2509,7 @@
 ''');
   }
 
-  test_statements_noDuplicates() async {
+  Future<void> test_statements_noDuplicates() async {
     await indexTestUnit('''
 main() {
   int a = 1;
@@ -2530,7 +2536,7 @@
 ''');
   }
 
-  test_statements_parameters_ignoreInnerPropagatedType() async {
+  Future<void> test_statements_parameters_ignoreInnerPropagatedType() async {
     await indexTestUnit('''
 main(Object x) {
 // start
@@ -2563,7 +2569,7 @@
 ''');
   }
 
-  test_statements_parameters_importType() async {
+  Future<void> test_statements_parameters_importType() async {
     _addLibraryReturningAsync();
     await indexTestUnit('''
 import 'asyncLib.dart';
@@ -2592,7 +2598,7 @@
 ''');
   }
 
-  test_statements_parameters_localFunction() async {
+  Future<void> test_statements_parameters_localFunction() async {
     await indexTestUnit('''
 class C {
   int f(int a) {
@@ -2626,7 +2632,7 @@
 }''');
   }
 
-  test_statements_parameters_noLocalVariableConflict() async {
+  Future<void> test_statements_parameters_noLocalVariableConflict() async {
     await indexTestUnit('''
 int f(int x) {
   int y = x + 1;
@@ -2644,7 +2650,7 @@
     await assertRefactoringConditionsOK();
   }
 
-  test_statements_return_last() async {
+  Future<void> test_statements_return_last() async {
     await indexTestUnit('''
 main() {
 // start
@@ -2669,7 +2675,7 @@
 ''');
   }
 
-  test_statements_return_multiple_ifElse() async {
+  Future<void> test_statements_return_multiple_ifElse() async {
     await indexTestUnit('''
 num main(bool b) {
 // start
@@ -2700,7 +2706,7 @@
 ''');
   }
 
-  test_statements_return_multiple_ifThen() async {
+  Future<void> test_statements_return_multiple_ifThen() async {
     await indexTestUnit('''
 num main(bool b) {
 // start
@@ -2729,7 +2735,7 @@
 ''');
   }
 
-  test_statements_return_multiple_ignoreInFunction() async {
+  Future<void> test_statements_return_multiple_ignoreInFunction() async {
     await indexTestUnit('''
 int main() {
 // start
@@ -2758,7 +2764,7 @@
 ''');
   }
 
-  test_statements_return_multiple_interfaceFunction() async {
+  Future<void> test_statements_return_multiple_interfaceFunction() async {
     await indexTestUnit('''
 main(bool b) {
 // start
@@ -2787,7 +2793,8 @@
 ''');
   }
 
-  test_statements_return_multiple_sameElementDifferentTypeArgs() async {
+  Future<void>
+      test_statements_return_multiple_sameElementDifferentTypeArgs() async {
     await indexTestUnit('''
 main(bool b) {
 // start
@@ -2822,7 +2829,7 @@
 ''');
   }
 
-  test_statements_return_single() async {
+  Future<void> test_statements_return_single() async {
     await indexTestUnit('''
 main() {
 // start
@@ -2849,7 +2856,7 @@
    * We have 3 identical statements, but select only 2.
    * This should not cause problems.
    */
-  test_statements_twoOfThree() async {
+  Future<void> test_statements_twoOfThree() async {
     await indexTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart b/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
index cc04abd..7212255 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
@@ -13,7 +13,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractWidgetTest);
   });
@@ -24,7 +24,7 @@
   @override
   ExtractWidgetRefactoringImpl refactoring;
 
-  test_checkAllConditions_selection() async {
+  Future<void> test_checkAllConditions_selection() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -36,7 +36,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkName() async {
+  Future<void> test_checkName() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -67,7 +67,7 @@
     assertRefactoringStatusOK(refactoring.checkName());
   }
 
-  test_checkName_alreadyDeclared() async {
+  Future<void> test_checkName_alreadyDeclared() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -89,7 +89,7 @@
         expectedMessage: "Library already declares class with name 'Test'.");
   }
 
-  test_expression() async {
+  Future<void> test_expression() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -148,7 +148,7 @@
 ''');
   }
 
-  test_expression_localFunction() async {
+  Future<void> test_expression_localFunction() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -195,7 +195,7 @@
 ''');
   }
 
-  test_expression_onTypeName() async {
+  Future<void> test_expression_onTypeName() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -232,7 +232,7 @@
 ''');
   }
 
-  test_expression_selection() async {
+  Future<void> test_expression_selection() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -280,7 +280,7 @@
     await assertResult('return new Container();');
   }
 
-  test_expression_topFunction() async {
+  Future<void> test_expression_topFunction() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -321,7 +321,7 @@
 ''');
   }
 
-  test_invocation_enclosingClass() async {
+  Future<void> test_invocation_enclosingClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -346,7 +346,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR);
   }
 
-  test_invocation_enclosingSuperClass() async {
+  Future<void> test_invocation_enclosingSuperClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -373,7 +373,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR);
   }
 
-  test_invocation_otherClass() async {
+  Future<void> test_invocation_otherClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -435,7 +435,7 @@
 ''');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -484,7 +484,7 @@
 ''');
   }
 
-  test_method_parameters() async {
+  Future<void> test_method_parameters() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -556,7 +556,7 @@
 ''');
   }
 
-  test_method_parameters_named() async {
+  Future<void> test_method_parameters_named() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -628,7 +628,7 @@
 ''');
   }
 
-  test_parameters_field_read_enclosingClass() async {
+  Future<void> test_parameters_field_read_enclosingClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -672,7 +672,7 @@
 ''');
   }
 
-  test_parameters_field_read_otherClass() async {
+  Future<void> test_parameters_field_read_otherClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -724,7 +724,7 @@
 ''');
   }
 
-  test_parameters_field_read_topLevelVariable() async {
+  Future<void> test_parameters_field_read_topLevelVariable() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -765,7 +765,7 @@
 ''');
   }
 
-  test_parameters_field_write_enclosingClass() async {
+  Future<void> test_parameters_field_write_enclosingClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -790,7 +790,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR);
   }
 
-  test_parameters_field_write_enclosingSuperClass() async {
+  Future<void> test_parameters_field_write_enclosingSuperClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -817,7 +817,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR);
   }
 
-  test_parameters_field_write_otherClass() async {
+  Future<void> test_parameters_field_write_otherClass() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -879,7 +879,7 @@
 ''');
   }
 
-  test_parameters_key() async {
+  Future<void> test_parameters_key() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -898,7 +898,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR);
   }
 
-  test_parameters_local_read_enclosingScope() async {
+  Future<void> test_parameters_local_read_enclosingScope() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -940,7 +940,7 @@
 ''');
   }
 
-  test_parameters_local_write_enclosingScope() async {
+  Future<void> test_parameters_local_write_enclosingScope() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -964,7 +964,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR);
   }
 
-  test_parameters_private() async {
+  Future<void> test_parameters_private() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -1008,7 +1008,7 @@
 ''');
   }
 
-  test_parameters_private_conflictWithPublic() async {
+  Future<void> test_parameters_private_conflictWithPublic() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -1056,7 +1056,7 @@
 ''');
   }
 
-  test_parameters_readField_readLocal() async {
+  Future<void> test_parameters_readField_readLocal() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -1114,7 +1114,7 @@
 ''');
   }
 
-  test_refactoringName() async {
+  Future<void> test_refactoringName() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -1130,7 +1130,7 @@
     expect(refactoring.refactoringName, 'Extract Widget');
   }
 
-  test_statements() async {
+  Future<void> test_statements() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -1186,7 +1186,7 @@
 ''');
   }
 
-  test_statements_BAD_emptySelection() async {
+  Future<void> test_statements_BAD_emptySelection() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -1202,7 +1202,7 @@
         RefactoringProblemSeverity.FATAL);
   }
 
-  test_statements_BAD_notReturnStatement() async {
+  Future<void> test_statements_BAD_notReturnStatement() async {
     addFlutterPackage();
     await indexTestUnit(r'''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
index 7abb5ae..fb5784a 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
@@ -11,7 +11,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InlineLocalTest);
   });
@@ -22,7 +22,7 @@
   @override
   InlineLocalRefactoringImpl refactoring;
 
-  test_access() async {
+  Future<void> test_access() async {
     await indexTestUnit('''
 main() {
   int test = 1 + 2;
@@ -38,7 +38,7 @@
     expect(refactoring.referenceCount, 2);
   }
 
-  test_bad_selectionMethod() async {
+  Future<void> test_bad_selectionMethod() async {
     await indexTestUnit(r'''
 main() {
 }
@@ -48,7 +48,7 @@
     _assert_fatalError_selection(status);
   }
 
-  test_bad_selectionParameter() async {
+  Future<void> test_bad_selectionParameter() async {
     await indexTestUnit(r'''
 main(int test) {
 }
@@ -58,7 +58,7 @@
     _assert_fatalError_selection(status);
   }
 
-  test_bad_selectionVariable_hasAssignments_1() async {
+  Future<void> test_bad_selectionVariable_hasAssignments_1() async {
     await indexTestUnit(r'''
 main() {
   int test = 0;
@@ -71,7 +71,7 @@
         expectedContextSearch: 'test = 1');
   }
 
-  test_bad_selectionVariable_hasAssignments_2() async {
+  Future<void> test_bad_selectionVariable_hasAssignments_2() async {
     await indexTestUnit(r'''
 main() {
   int test = 0;
@@ -84,7 +84,7 @@
         expectedContextSearch: 'test += 1');
   }
 
-  test_bad_selectionVariable_notInBlock() async {
+  Future<void> test_bad_selectionVariable_notInBlock() async {
     await indexTestUnit(r'''
 main() {
   if (true)
@@ -96,7 +96,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_bad_selectionVariable_notInitialized() async {
+  Future<void> test_bad_selectionVariable_notInitialized() async {
     await indexTestUnit(r'''
 main() {
   int test;
@@ -107,7 +107,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_OK_cascade_intoCascade() async {
+  Future<void> test_OK_cascade_intoCascade() async {
     await indexTestUnit(r'''
 class A {
   foo() {}
@@ -131,7 +131,7 @@
 ''');
   }
 
-  test_OK_cascade_intoNotCascade() async {
+  Future<void> test_OK_cascade_intoNotCascade() async {
     await indexTestUnit(r'''
 class A {
   foo() {}
@@ -155,7 +155,7 @@
 ''');
   }
 
-  test_OK_inSwitchCase() async {
+  Future<void> test_OK_inSwitchCase() async {
     await indexTestUnit('''
 main(int p) {
   switch (p) {
@@ -179,7 +179,7 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_binaryExpression() async {
+  Future<void> test_OK_intoStringInterpolation_binaryExpression() async {
     await indexTestUnit(r'''
 main() {
   int test = 1 + 2;
@@ -201,7 +201,7 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_simpleIdentifier() async {
+  Future<void> test_OK_intoStringInterpolation_simpleIdentifier() async {
     await indexTestUnit(r'''
 main() {
   int foo = 1 + 2;
@@ -225,7 +225,7 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_string_differentQuotes() async {
+  Future<void> test_OK_intoStringInterpolation_string_differentQuotes() async {
     await indexTestUnit(r'''
 main() {
   String a = "aaa";
@@ -241,7 +241,7 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_string_doubleQuotes() async {
+  Future<void> test_OK_intoStringInterpolation_string_doubleQuotes() async {
     await indexTestUnit(r'''
 main() {
   String a = "aaa";
@@ -257,7 +257,8 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_string_multiLineIntoMulti_leadingSpaces() async {
+  Future<void>
+      test_OK_intoStringInterpolation_string_multiLineIntoMulti_leadingSpaces() async {
     await indexTestUnit(r"""
 main() {
   String a = '''\ \
@@ -280,7 +281,8 @@
 """);
   }
 
-  test_OK_intoStringInterpolation_string_multiLineIntoMulti_unixEOL() async {
+  Future<void>
+      test_OK_intoStringInterpolation_string_multiLineIntoMulti_unixEOL() async {
     await indexTestUnit(r"""
 main() {
   String a = '''
@@ -305,7 +307,8 @@
 """);
   }
 
-  test_OK_intoStringInterpolation_string_multiLineIntoMulti_windowsEOL() async {
+  Future<void>
+      test_OK_intoStringInterpolation_string_multiLineIntoMulti_windowsEOL() async {
     await indexTestUnit(r"""
 main() {
   String a = '''
@@ -332,7 +335,8 @@
         .replaceAll('\n', '\r\n'));
   }
 
-  test_OK_intoStringInterpolation_string_multiLineIntoSingle() async {
+  Future<void>
+      test_OK_intoStringInterpolation_string_multiLineIntoSingle() async {
     await indexTestUnit(r'''
 main() {
   String a = """aaa""";
@@ -348,7 +352,7 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_string_raw() async {
+  Future<void> test_OK_intoStringInterpolation_string_raw() async {
     await indexTestUnit(r'''
 main() {
   String a = r'an $ignored interpolation';
@@ -364,7 +368,8 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_string_singleLineIntoMulti_doubleQuotes() async {
+  Future<void>
+      test_OK_intoStringInterpolation_string_singleLineIntoMulti_doubleQuotes() async {
     await indexTestUnit(r'''
 main() {
   String a = "aaa";
@@ -380,7 +385,8 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_string_singleLineIntoMulti_singleQuotes() async {
+  Future<void>
+      test_OK_intoStringInterpolation_string_singleLineIntoMulti_singleQuotes() async {
     await indexTestUnit(r"""
 main() {
   String a = 'aaa';
@@ -396,7 +402,7 @@
 """);
   }
 
-  test_OK_intoStringInterpolation_string_singleQuotes() async {
+  Future<void> test_OK_intoStringInterpolation_string_singleQuotes() async {
     await indexTestUnit(r'''
 main() {
   String a = 'aaa';
@@ -412,7 +418,7 @@
 ''');
   }
 
-  test_OK_intoStringInterpolation_stringInterpolation() async {
+  Future<void> test_OK_intoStringInterpolation_stringInterpolation() async {
     await indexTestUnit(r'''
 main() {
   String a = 'aaa';
@@ -434,7 +440,7 @@
    * <p>
    * https://code.google.com/p/dart/issues/detail?id=18587
    */
-  test_OK_keepNextCommentedLine() async {
+  Future<void> test_OK_keepNextCommentedLine() async {
     await indexTestUnit('''
 main() {
   int test = 1 + 2;
@@ -454,7 +460,7 @@
 ''');
   }
 
-  test_OK_noUsages_1() async {
+  Future<void> test_OK_noUsages_1() async {
     await indexTestUnit('''
 main() {
   int test = 1 + 2;
@@ -470,7 +476,7 @@
 ''');
   }
 
-  test_OK_noUsages_2() async {
+  Future<void> test_OK_noUsages_2() async {
     await indexTestUnit('''
 main() {
   int test = 1 + 2;
@@ -484,7 +490,7 @@
 ''');
   }
 
-  test_OK_oneUsage() async {
+  Future<void> test_OK_oneUsage() async {
     await indexTestUnit('''
 main() {
   int test = 1 + 2;
@@ -500,7 +506,7 @@
 ''');
   }
 
-  test_OK_parenthesis_decrement_intoNegate() async {
+  Future<void> test_OK_parenthesis_decrement_intoNegate() async {
     await indexTestUnit('''
 main() {
   var a = 1;
@@ -518,7 +524,7 @@
 ''');
   }
 
-  test_OK_parenthesis_instanceCreation_intoList() async {
+  Future<void> test_OK_parenthesis_instanceCreation_intoList() async {
     await indexTestUnit('''
 class A {}
 main() {
@@ -536,7 +542,7 @@
 ''');
   }
 
-  test_OK_parenthesis_intoIndexExpression_index() async {
+  Future<void> test_OK_parenthesis_intoIndexExpression_index() async {
     await indexTestUnit('''
 main() {
   var items = [];
@@ -554,7 +560,7 @@
 ''');
   }
 
-  test_OK_parenthesis_intoParenthesizedExpression() async {
+  Future<void> test_OK_parenthesis_intoParenthesizedExpression() async {
     await indexTestUnit('''
 f(m, x, y) {
   int test = x as int;
@@ -572,7 +578,7 @@
 ''');
   }
 
-  test_OK_parenthesis_negate_intoNegate() async {
+  Future<void> test_OK_parenthesis_negate_intoNegate() async {
     await indexTestUnit('''
 main() {
   var a = 1;
@@ -590,7 +596,7 @@
 ''');
   }
 
-  test_OK_parenthesis_plus_intoMultiply() async {
+  Future<void> test_OK_parenthesis_plus_intoMultiply() async {
     await indexTestUnit('''
 main() {
   var test = 1 + 2;
@@ -606,7 +612,7 @@
 ''');
   }
 
-  test_OK_twoUsages() async {
+  Future<void> test_OK_twoUsages() async {
     await indexTestUnit('''
 main() {
   int test = 1 + 2;
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index de0b7b0..aac7820 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -14,7 +14,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InlineMethodTest);
   });
@@ -27,7 +27,7 @@
   bool deleteSource;
   bool inlineAll;
 
-  test_access_FunctionElement() async {
+  Future<void> test_access_FunctionElement() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -45,7 +45,7 @@
     expect(refactoring.isDeclaration, isFalse);
   }
 
-  test_access_MethodElement() async {
+  Future<void> test_access_MethodElement() async {
     await indexTestUnit(r'''
 class A {
   test(a, b) {
@@ -65,7 +65,7 @@
     expect(refactoring.isDeclaration, isTrue);
   }
 
-  test_bad_async_intoSyncStar() async {
+  Future<void> test_bad_async_intoSyncStar() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -80,7 +80,7 @@
     return _assertConditionsFatal('Cannot inline async into sync*.');
   }
 
-  test_bad_async_targetIsSync_doesNotReturnFuture() async {
+  Future<void> test_bad_async_targetIsSync_doesNotReturnFuture() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -97,7 +97,7 @@
         'Cannot inline async into a function that does not return a Future.');
   }
 
-  test_bad_asyncStar() async {
+  Future<void> test_bad_asyncStar() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -115,7 +115,7 @@
     return _assertConditionsFatal('Cannot inline a generator.');
   }
 
-  test_bad_cascadeInvocation() async {
+  Future<void> test_bad_cascadeInvocation() async {
     await indexTestUnit(r'''
 class A {
   foo() {}
@@ -136,7 +136,7 @@
         expectedContextRange: location);
   }
 
-  test_bad_constructor() async {
+  Future<void> test_bad_constructor() async {
     await indexTestUnit(r'''
 class A {
   A.named() {}
@@ -147,7 +147,7 @@
     return _assertInvalidSelection();
   }
 
-  test_bad_deleteSource_inlineOne() async {
+  Future<void> test_bad_deleteSource_inlineOne() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -170,7 +170,7 @@
             'All references must be inlined to remove the source.');
   }
 
-  test_bad_notExecutableElement() async {
+  Future<void> test_bad_notExecutableElement() async {
     await indexTestUnit(r'''
 main() {
 }
@@ -180,7 +180,7 @@
     return _assertInvalidSelection();
   }
 
-  test_bad_notSimpleIdentifier() async {
+  Future<void> test_bad_notSimpleIdentifier() async {
     await indexTestUnit(r'''
 main() {
   var test = 42;
@@ -192,7 +192,7 @@
     return _assertInvalidSelection();
   }
 
-  test_bad_operator() async {
+  Future<void> test_bad_operator() async {
     await indexTestUnit(r'''
 class A {
   operator -(other) => this;
@@ -203,7 +203,7 @@
     return _assertConditionsFatal('Cannot inline operator.');
   }
 
-  test_bad_propertyAccessor_synthetic() async {
+  Future<void> test_bad_propertyAccessor_synthetic() async {
     await indexTestUnit(r'''
 class A {
   int fff;
@@ -218,7 +218,7 @@
     return _assertInvalidSelection();
   }
 
-  test_bad_reference_toClassMethod() async {
+  Future<void> test_bad_reference_toClassMethod() async {
     await indexTestUnit(r'''
 class A {
   test(a, b) {
@@ -235,7 +235,7 @@
     return _assertConditionsFatal('Cannot inline class method reference.');
   }
 
-  test_bad_severalReturns() async {
+  Future<void> test_bad_severalReturns() async {
     await indexTestUnit(r'''
 test() {
   if (true) {
@@ -252,7 +252,7 @@
     return _assertConditionsError('Ambiguous return value.');
   }
 
-  test_cascadeInCascade() async {
+  Future<void> test_cascadeInCascade() async {
     await indexTestUnit(r'''
 class Inner {
   String a;
@@ -297,7 +297,7 @@
 ''');
   }
 
-  test_fieldAccessor_getter() async {
+  Future<void> test_fieldAccessor_getter() async {
     await indexTestUnit(r'''
 class A {
   var f;
@@ -323,7 +323,7 @@
 ''');
   }
 
-  test_fieldAccessor_getter_PropertyAccess() async {
+  Future<void> test_fieldAccessor_getter_PropertyAccess() async {
     await indexTestUnit(r'''
 class A {
   var f;
@@ -355,7 +355,7 @@
 ''');
   }
 
-  test_fieldAccessor_setter() async {
+  Future<void> test_fieldAccessor_setter() async {
     await indexTestUnit(r'''
 class A {
   var f;
@@ -381,7 +381,7 @@
 ''');
   }
 
-  test_fieldAccessor_setter_PropertyAccess() async {
+  Future<void> test_fieldAccessor_setter_PropertyAccess() async {
     await indexTestUnit(r'''
 class A {
   var f;
@@ -413,7 +413,7 @@
 ''');
   }
 
-  test_function_expressionFunctionBody() async {
+  Future<void> test_function_expressionFunctionBody() async {
     await indexTestUnit(r'''
 test(a, b) => a + b;
 main() {
@@ -429,7 +429,7 @@
 ''');
   }
 
-  test_function_hasReturn_assign() async {
+  Future<void> test_function_hasReturn_assign() async {
     await indexTestUnit(r'''
 test(a, b) {
   print(a);
@@ -453,7 +453,7 @@
 ''');
   }
 
-  test_function_hasReturn_hasReturnType() async {
+  Future<void> test_function_hasReturn_hasReturnType() async {
     await indexTestUnit(r'''
 int test(a, b) {
   return a + b;
@@ -471,7 +471,7 @@
 ''');
   }
 
-  test_function_hasReturn_noExpression() async {
+  Future<void> test_function_hasReturn_noExpression() async {
     await indexTestUnit(r'''
 test(a, b) {
   print(a);
@@ -492,7 +492,7 @@
 ''');
   }
 
-  test_function_hasReturn_noVars_oneUsage() async {
+  Future<void> test_function_hasReturn_noVars_oneUsage() async {
     await indexTestUnit(r'''
 test(a, b) {
   print(a);
@@ -514,7 +514,7 @@
 ''');
   }
 
-  test_function_multilineString() async {
+  Future<void> test_function_multilineString() async {
     await indexTestUnit(r"""
 main() {
   {
@@ -542,7 +542,8 @@
 """);
   }
 
-  test_function_noReturn_hasVars_hasConflict_fieldSuperClass() async {
+  Future<void>
+      test_function_noReturn_hasVars_hasConflict_fieldSuperClass() async {
     await indexTestUnit(r'''
 class A {
   var c;
@@ -572,7 +573,8 @@
 ''');
   }
 
-  test_function_noReturn_hasVars_hasConflict_fieldThisClass() async {
+  Future<void>
+      test_function_noReturn_hasVars_hasConflict_fieldThisClass() async {
     await indexTestUnit(r'''
 class A {
   var c;
@@ -598,7 +600,7 @@
 ''');
   }
 
-  test_function_noReturn_hasVars_hasConflict_localAfter() async {
+  Future<void> test_function_noReturn_hasVars_hasConflict_localAfter() async {
     await indexTestUnit(r'''
 test(a, b) {
   var c = a + b;
@@ -620,7 +622,7 @@
 ''');
   }
 
-  test_function_noReturn_hasVars_hasConflict_localBefore() async {
+  Future<void> test_function_noReturn_hasVars_hasConflict_localBefore() async {
     await indexTestUnit(r'''
 test(a, b) {
   var c = a + b;
@@ -642,7 +644,7 @@
 ''');
   }
 
-  test_function_noReturn_hasVars_noConflict() async {
+  Future<void> test_function_noReturn_hasVars_noConflict() async {
     await indexTestUnit(r'''
 test(a, b) {
   var c = a + b;
@@ -662,7 +664,7 @@
 ''');
   }
 
-  test_function_noReturn_noVars_oneUsage() async {
+  Future<void> test_function_noReturn_noVars_oneUsage() async {
     await indexTestUnit(r'''
 test(a, b) {
   print(a);
@@ -682,7 +684,7 @@
 ''');
   }
 
-  test_function_noReturn_noVars_useIndentation() async {
+  Future<void> test_function_noReturn_noVars_useIndentation() async {
     await indexTestUnit(r'''
 test(a, b) {
   print(a);
@@ -706,7 +708,7 @@
 ''');
   }
 
-  test_function_noReturn_voidReturnType() async {
+  Future<void> test_function_noReturn_voidReturnType() async {
     await indexTestUnit(r'''
 void test(a, b) {
   print(a + b);
@@ -724,7 +726,7 @@
 ''');
   }
 
-  test_function_notStatement_oneStatement_assign() async {
+  Future<void> test_function_notStatement_oneStatement_assign() async {
     await indexTestUnit(r'''
 test(int p) {
   print(p * 2);
@@ -746,7 +748,8 @@
 ''');
   }
 
-  test_function_notStatement_oneStatement_variableDeclaration() async {
+  Future<void>
+      test_function_notStatement_oneStatement_variableDeclaration() async {
     await indexTestUnit(r'''
 test(int p) {
   print(p * 2);
@@ -766,7 +769,7 @@
 ''');
   }
 
-  test_function_notStatement_severalStatements() async {
+  Future<void> test_function_notStatement_severalStatements() async {
     await indexTestUnit(r'''
 test(int p) {
   print(p);
@@ -788,7 +791,7 @@
 ''');
   }
 
-  test_function_notStatement_zeroStatements() async {
+  Future<void> test_function_notStatement_zeroStatements() async {
     await indexTestUnit(r'''
 test(int p) {
 }
@@ -806,7 +809,7 @@
 ''');
   }
 
-  test_function_singleStatement() async {
+  Future<void> test_function_singleStatement() async {
     await indexTestUnit(r'''
 var topLevelField = 0;
 test() {
@@ -826,7 +829,7 @@
 ''');
   }
 
-  test_getter_async_targetIsAsync() async {
+  Future<void> test_getter_async_targetIsAsync() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -848,7 +851,7 @@
 ''');
   }
 
-  test_getter_async_targetIsAsyncStar() async {
+  Future<void> test_getter_async_targetIsAsyncStar() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -870,7 +873,7 @@
 ''');
   }
 
-  test_getter_async_targetIsSync() async {
+  Future<void> test_getter_async_targetIsSync() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -892,7 +895,7 @@
 ''');
   }
 
-  test_getter_async_targetIsSync2() async {
+  Future<void> test_getter_async_targetIsSync2() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -920,7 +923,7 @@
 ''');
   }
 
-  test_getter_classMember_instance() async {
+  Future<void> test_getter_classMember_instance() async {
     await indexTestUnit(r'''
 class A {
   int f;
@@ -942,7 +945,7 @@
 ''');
   }
 
-  test_getter_classMember_static() async {
+  Future<void> test_getter_classMember_static() async {
     await indexTestUnit(r'''
 class A {
   static int get result => 1 + 2;
@@ -962,7 +965,7 @@
 ''');
   }
 
-  test_getter_topLevel() async {
+  Future<void> test_getter_topLevel() async {
     await indexTestUnit(r'''
 String get message => 'Hello, World!';
 main() {
@@ -978,7 +981,7 @@
 ''');
   }
 
-  test_initialMode_all() async {
+  Future<void> test_initialMode_all() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -994,7 +997,7 @@
     expect(refactoring.inlineAll, true);
   }
 
-  test_initialMode_single() async {
+  Future<void> test_initialMode_single() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -1012,7 +1015,7 @@
     expect(refactoring.inlineAll, false);
   }
 
-  test_method_async() async {
+  Future<void> test_method_async() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -1034,7 +1037,7 @@
 ''');
   }
 
-  test_method_async2() async {
+  Future<void> test_method_async2() async {
     await indexTestUnit(r'''
 import 'dart:async';
 class A {
@@ -1058,7 +1061,7 @@
 ''');
   }
 
-  test_method_emptyBody() async {
+  Future<void> test_method_emptyBody() async {
     await indexTestUnit(r'''
 abstract class A {
   test();
@@ -1072,7 +1075,7 @@
     return _assertConditionsFatal('Cannot inline method without body.');
   }
 
-  test_method_fieldInstance() async {
+  Future<void> test_method_fieldInstance() async {
     await indexTestUnit(r'''
 class A {
   var fA;
@@ -1110,7 +1113,7 @@
 ''');
   }
 
-  test_method_fieldStatic() async {
+  Future<void> test_method_fieldStatic() async {
     await indexTestUnit(r'''
 class A {
   static var FA = 1;
@@ -1146,7 +1149,7 @@
 ''');
   }
 
-  test_method_fieldStatic_sameClass() async {
+  Future<void> test_method_fieldStatic_sameClass() async {
     await indexTestUnit(r'''
 class A {
   static var F = 1;
@@ -1170,7 +1173,7 @@
 ''');
   }
 
-  test_method_methodInstance() async {
+  Future<void> test_method_methodInstance() async {
     await indexTestUnit(r'''
 class A {
   ma() {}
@@ -1206,7 +1209,7 @@
 ''');
   }
 
-  test_method_methodStatic() async {
+  Future<void> test_method_methodStatic() async {
     await indexTestUnit(r'''
 class A {
   static ma() {}
@@ -1245,7 +1248,7 @@
 ''');
   }
 
-  test_method_singleStatement() async {
+  Future<void> test_method_singleStatement() async {
     await indexTestUnit(r'''
 class A {
   test() {
@@ -1267,7 +1270,7 @@
 ''');
   }
 
-  test_method_this() async {
+  Future<void> test_method_this() async {
     await indexTestUnit(r'''
 class A {
   accept(B b) {}
@@ -1301,7 +1304,7 @@
 ''');
   }
 
-  test_method_unqualifiedInvocation() async {
+  Future<void> test_method_unqualifiedInvocation() async {
     await indexTestUnit(r'''
 class A {
   test(a, b) {
@@ -1327,7 +1330,7 @@
 ''');
   }
 
-  test_namedArgument_inBody() async {
+  Future<void> test_namedArgument_inBody() async {
     await indexTestUnit(r'''
 fa(pa) => fb(pb: true);
 fb({pb: false}) {}
@@ -1346,7 +1349,7 @@
 ''');
   }
 
-  test_namedArguments() async {
+  Future<void> test_namedArguments() async {
     await indexTestUnit(r'''
 test({a: 0, b: 2}) {
   print(a + b);
@@ -1366,7 +1369,7 @@
 ''');
   }
 
-  test_noArgument_named_hasDefault() async {
+  Future<void> test_noArgument_named_hasDefault() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit(r'''
 test({a: 42}) {
@@ -1385,7 +1388,7 @@
 ''');
   }
 
-  test_noArgument_positional_hasDefault() async {
+  Future<void> test_noArgument_positional_hasDefault() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit(r'''
 test([a = 42]) {
@@ -1404,7 +1407,7 @@
 ''');
   }
 
-  test_noArgument_positional_noDefault() async {
+  Future<void> test_noArgument_positional_noDefault() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit(r'''
 test([a]) {
@@ -1423,7 +1426,7 @@
 ''');
   }
 
-  test_noArgument_required() async {
+  Future<void> test_noArgument_required() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit(r'''
 test(a) {
@@ -1442,7 +1445,7 @@
         expectedContextRange: location);
   }
 
-  test_reference_expressionBody() async {
+  Future<void> test_reference_expressionBody() async {
     await indexTestUnit(r'''
 String message() => 'Hello, World!';
 main() {
@@ -1458,7 +1461,7 @@
 ''');
   }
 
-  test_reference_noStatement() async {
+  Future<void> test_reference_noStatement() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a || b;
@@ -1482,7 +1485,7 @@
 ''');
   }
 
-  test_reference_toLocal() async {
+  Future<void> test_reference_toLocal() async {
     await indexTestUnit(r'''
 main() {
   test(a, b) {
@@ -1504,7 +1507,7 @@
 ''');
   }
 
-  test_reference_toTopLevel() async {
+  Future<void> test_reference_toTopLevel() async {
     await indexTestUnit(r'''
 test(a, b) {
   print(a);
@@ -1526,7 +1529,7 @@
 ''');
   }
 
-  test_removeEmptyLinesBefore_method() async {
+  Future<void> test_removeEmptyLinesBefore_method() async {
     await indexTestUnit(r'''
 class A {
   before() {
@@ -1556,7 +1559,7 @@
 ''');
   }
 
-  test_setter_classMember_instance() async {
+  Future<void> test_setter_classMember_instance() async {
     await indexTestUnit(r'''
 class A {
   int f;
@@ -1580,7 +1583,7 @@
 ''');
   }
 
-  test_setter_topLevel() async {
+  Future<void> test_setter_topLevel() async {
     await indexTestUnit(r'''
 void set result(x) {
   print(x + 1);
@@ -1598,7 +1601,7 @@
 ''');
   }
 
-  test_singleExpression_oneUsage() async {
+  Future<void> test_singleExpression_oneUsage() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -1616,7 +1619,7 @@
 ''');
   }
 
-  test_singleExpression_oneUsage_keepMethod() async {
+  Future<void> test_singleExpression_oneUsage_keepMethod() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -1638,7 +1641,7 @@
 ''');
   }
 
-  test_singleExpression_twoUsages() async {
+  Future<void> test_singleExpression_twoUsages() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -1658,7 +1661,7 @@
 ''');
   }
 
-  test_singleExpression_twoUsages_inlineOne() async {
+  Future<void> test_singleExpression_twoUsages_inlineOne() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a + b;
@@ -1681,7 +1684,8 @@
 ''');
   }
 
-  test_singleExpression_wrapIntoParenthesized_alreadyInMethod() async {
+  Future<void>
+      test_singleExpression_wrapIntoParenthesized_alreadyInMethod() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a * (b);
@@ -1699,7 +1703,7 @@
 ''');
   }
 
-  test_singleExpression_wrapIntoParenthesized_asNeeded() async {
+  Future<void> test_singleExpression_wrapIntoParenthesized_asNeeded() async {
     await indexTestUnit(r'''
 test(a, b) {
   return a * b;
@@ -1719,7 +1723,7 @@
 ''');
   }
 
-  test_singleExpression_wrapIntoParenthesized_bool() async {
+  Future<void> test_singleExpression_wrapIntoParenthesized_bool() async {
     await indexTestUnit(r'''
 test(bool a, bool b) {
   return a || b;
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
index 706d1cc..58c93882 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MoveFileTest);
   });
@@ -23,7 +23,7 @@
   @override
   MoveFileRefactoring refactoring;
 
-  test_file_containing_imports_exports_parts() async {
+  Future<void> test_file_containing_imports_exports_parts() async {
     String pathA = convertPath('/home/test/000/1111/a.dart');
     String pathB = convertPath('/home/test/000/1111/b.dart');
     String pathC = convertPath('/home/test/000/1111/22/c.dart');
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_file_imported_with_package_uri_down() async {
+  Future<void> test_file_imported_with_package_uri_down() async {
     var file = newFile('/home/test/lib/old_name.dart', content: '');
     addTestSource(r'''
 import 'package:test/old_name.dart';
@@ -77,7 +77,7 @@
   }
 
   @failingTest
-  test_file_imported_with_package_uri_lib_change() async {
+  Future<void> test_file_imported_with_package_uri_lib_change() async {
     // The current testing stack does not support creating such bazel roots
     var file =
         newFile('/home/test0/test1/test2/lib/111/name.dart', content: '');
@@ -100,7 +100,7 @@
   }
 
   @failingTest
-  test_file_imported_with_package_uri_lib_change_down() async {
+  Future<void> test_file_imported_with_package_uri_lib_change_down() async {
     // The current testing stack does not support creating such bazel roots
     var file =
         newFile('/home/test0/test1/test2/lib/111/name.dart', content: '');
@@ -123,7 +123,7 @@
   }
 
   @failingTest
-  test_file_imported_with_package_uri_lib_change_up() async {
+  Future<void> test_file_imported_with_package_uri_lib_change_up() async {
     // The current testing stack does not support creating such bazel roots
     var file =
         newFile('/home/test0/test1/test2/lib/111/name.dart', content: '');
@@ -145,7 +145,7 @@
 ''');
   }
 
-  test_file_imported_with_package_uri_sideways() async {
+  Future<void> test_file_imported_with_package_uri_sideways() async {
     var file = newFile('/home/test/lib/111/old_name.dart', content: '');
     addTestSource(r'''
 import 'package:test/111/old_name.dart';
@@ -164,7 +164,7 @@
 ''');
   }
 
-  test_file_imported_with_package_uri_up() async {
+  Future<void> test_file_imported_with_package_uri_up() async {
     var file = newFile('/home/test/lib/222/old_name.dart', content: '');
     addTestSource(r'''
 import 'package:test/222/old_name.dart';
@@ -183,7 +183,7 @@
 ''');
   }
 
-  test_file_imported_with_relative_uri_down() async {
+  Future<void> test_file_imported_with_relative_uri_down() async {
     String pathA = convertPath('/home/test/000/1111/a.dart');
     testFile = convertPath('/home/test/000/1111/test.dart');
     addSource(pathA, '''
@@ -201,7 +201,7 @@
     assertNoFileChange(testFile);
   }
 
-  test_file_imported_with_relative_uri_sideways() async {
+  Future<void> test_file_imported_with_relative_uri_sideways() async {
     String pathA = convertPath('/home/test/000/1111/a.dart');
     testFile = convertPath('/home/test/000/1111/sub/folder/test.dart');
     addSource(pathA, '''
@@ -217,7 +217,7 @@
     assertNoFileChange(testFile);
   }
 
-  test_file_imported_with_relative_uri_up() async {
+  Future<void> test_file_imported_with_relative_uri_up() async {
     String pathA = convertPath('/home/test/000/1111/a.dart');
     testFile = convertPath('/home/test/000/1111/22/test.dart');
     addSource(pathA, '''
@@ -234,7 +234,7 @@
   }
 
   @failingTest
-  test_file_referenced_by_multiple_libraries() async {
+  Future<void> test_file_referenced_by_multiple_libraries() async {
     // This test fails because the search index doesn't support multiple uris for
     // a library, so only one of them is updated.
     String pathA = convertPath('/home/test/000/1111/a.dart');
@@ -265,7 +265,7 @@
     assertNoFileChange(testFile);
   }
 
-  test_file_referenced_by_part() async {
+  Future<void> test_file_referenced_by_part() async {
     String pathA = convertPath('/home/test/000/1111/a.dart');
     testFile = convertPath('/home/test/000/1111/22/test.dart');
     addSource(pathA, '''
@@ -286,11 +286,11 @@
   }
 
   @failingTest
-  test_folder_inside_project() async {
+  Future<void> test_folder_inside_project() async {
     fail('Not yet implemented/tested');
   }
 
-  test_folder_outside_workspace_returns_failure() async {
+  Future<void> test_folder_outside_workspace_returns_failure() async {
     _createRefactoring('/tmp-new', oldFile: '/tmp');
     // TODO(dantup): These paths should all use convertPath so they're as expected
     // on Windows.
@@ -299,7 +299,7 @@
             '${convertPath('/tmp')} does not belong to an analysis root.');
   }
 
-  test_nonexistent_file_returns_failure() async {
+  Future<void> test_nonexistent_file_returns_failure() async {
     _createRefactoring(convertPath('/home/test/test_missing_new.dart'),
         oldFile: convertPath('/home/test/test_missing.dart'));
     await _assertFailedRefactoring(RefactoringProblemSeverity.FATAL,
@@ -308,20 +308,20 @@
   }
 
   @failingTest
-  test_project_folder_ancestor() async {
+  Future<void> test_project_folder_ancestor() async {
     // For this, we need the project to not be at top level (/project) so we can
     // rename an ancestor folder.
     fail('Not yet implemented/tested');
   }
 
-  test_projectFolder() async {
+  Future<void> test_projectFolder() async {
     _createRefactoring('/home/test2', oldFile: '/home/test');
     await _assertFailedRefactoring(RefactoringProblemSeverity.FATAL,
         expectedMessage: 'Renaming an analysis root is not supported '
             '(${convertPath('/home/test')})');
   }
 
-  test_renaming_part_that_uses_uri_in_part_of() async {
+  Future<void> test_renaming_part_that_uses_uri_in_part_of() async {
     // If the file is a part in a library, and the part-of directive uses a URI
     // rather than a library name, that will need updating too (if the relative
     // path to the parent changes).
@@ -346,7 +346,7 @@
 ''');
   }
 
-  test_renaming_part_that_uses_uri_in_part_of_2() async {
+  Future<void> test_renaming_part_that_uses_uri_in_part_of_2() async {
     // If the file is a part in a library, and the part-of directive uses a URI
     // rather than a library name, that will need updating too (if the relative
     // path to the parent changes).
@@ -369,7 +369,7 @@
 ''');
   }
 
-  test_renaming_part_that_uses_uri_in_part_of_3() async {
+  Future<void> test_renaming_part_that_uses_uri_in_part_of_3() async {
     // If the file is a part in a library, and the part-of directive uses a URI
     // rather than a library name, that will need updating too (if the relative
     // path to the parent changes).
@@ -392,7 +392,7 @@
 ''');
   }
 
-  test_renaming_part_that_uses_uri_in_part_of_4() async {
+  Future<void> test_renaming_part_that_uses_uri_in_part_of_4() async {
     // If the file is a part in a library, and the part-of directive uses a URI
     // rather than a library name, that will need updating too (if the relative
     // path to the parent changes).
@@ -415,7 +415,7 @@
 ''');
   }
 
-  test_renaming_part_that_uses_uri_in_part_of_5() async {
+  Future<void> test_renaming_part_that_uses_uri_in_part_of_5() async {
     // If the file is a part in a library, and the part-of directive uses a URI
     // rather than a library name, that will need updating too (if the relative
     // path to the parent changes).
diff --git a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
index a51399b..8c9ec86 100644
--- a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
@@ -11,7 +11,7 @@
 
 import 'abstract_refactoring.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NamingConventionsTest);
   });
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index 9fb1fd4..fc05cbd 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -10,7 +10,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameClassMemberTest);
   });
@@ -18,7 +18,7 @@
 
 @reflectiveTest
 class RenameClassMemberTest extends RenameRefactoringTest {
-  test_checkFinalConditions_classNameConflict_sameClass() async {
+  Future<void> test_checkFinalConditions_classNameConflict_sameClass() async {
     await indexTestUnit('''
 class NewName {
   void test() {}
@@ -34,7 +34,7 @@
         expectedContextSearch: 'test() {}');
   }
 
-  test_checkFinalConditions_classNameConflict_subClass() async {
+  Future<void> test_checkFinalConditions_classNameConflict_subClass() async {
     await indexTestUnit('''
 class A {
   void test() {} // 1
@@ -53,7 +53,7 @@
         expectedContextSearch: 'test() {} // 2');
   }
 
-  test_checkFinalConditions_classNameConflict_superClass() async {
+  Future<void> test_checkFinalConditions_classNameConflict_superClass() async {
     await indexTestUnit('''
 class NewName {
   void test() {} // 1
@@ -72,7 +72,7 @@
         expectedContextSearch: 'test() {} // 1');
   }
 
-  test_checkFinalConditions_hasMember_MethodElement() async {
+  Future<void> test_checkFinalConditions_hasMember_MethodElement() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -89,7 +89,7 @@
         expectedContextSearch: 'newName() {} // existing');
   }
 
-  test_checkFinalConditions_OK_dropSuffix() async {
+  Future<void> test_checkFinalConditions_OK_dropSuffix() async {
     await indexTestUnit(r'''
 abstract class A {
   void testOld();
@@ -105,7 +105,7 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_OK_noShadow() async {
+  Future<void> test_checkFinalConditions_OK_noShadow() async {
     await indexTestUnit('''
 class A {
   int newName;
@@ -126,7 +126,7 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_OK_noShadow_nullVisibleRange() async {
+  Future<void> test_checkFinalConditions_OK_noShadow_nullVisibleRange() async {
     await indexTestUnit('''
 class A {
   int foo;
@@ -151,7 +151,8 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_publicToPrivate_usedInOtherLibrary() async {
+  Future<void>
+      test_checkFinalConditions_publicToPrivate_usedInOtherLibrary() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -173,7 +174,8 @@
         expectedMessage: "Renamed method will be invisible in 'my.lib'.");
   }
 
-  test_checkFinalConditions_shadowed_byLocalFunction_inSameClass() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalFunction_inSameClass() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -193,7 +195,8 @@
         expectedContextSearch: 'test(); // marker');
   }
 
-  test_checkFinalConditions_shadowed_byLocalVariable_inSameClass() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_inSameClass() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -213,7 +216,8 @@
         expectedContextSearch: 'test(); // marker');
   }
 
-  test_checkFinalConditions_shadowed_byLocalVariable_inSubClass() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_inSubClass() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -235,7 +239,8 @@
         expectedContextSearch: 'test(); // marker');
   }
 
-  test_checkFinalConditions_shadowed_byLocalVariable_OK_qualifiedReference() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_OK_qualifiedReference() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -252,7 +257,8 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_shadowed_byLocalVariable_OK_renamedNotUsed() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_OK_renamedNotUsed() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -268,7 +274,8 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_shadowed_byParameter_inSameClass() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byParameter_inSameClass() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -287,7 +294,7 @@
         expectedContextSearch: 'test(); // marker');
   }
 
-  test_checkFinalConditions_shadowedBySub_MethodElement() async {
+  Future<void> test_checkFinalConditions_shadowedBySub_MethodElement() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -309,7 +316,7 @@
         expectedContextSearch: 'newName() {} // marker');
   }
 
-  test_checkFinalConditions_shadowsSuper_FieldElement() async {
+  Future<void> test_checkFinalConditions_shadowsSuper_FieldElement() async {
     await indexTestUnit('''
 class A {
   int newName; // marker
@@ -332,7 +339,7 @@
         expectedContextSearch: 'newName; // marker');
   }
 
-  test_checkFinalConditions_shadowsSuper_MethodElement() async {
+  Future<void> test_checkFinalConditions_shadowsSuper_MethodElement() async {
     await indexTestUnit('''
 class A {
   newName() {} // marker
@@ -350,7 +357,8 @@
         expectedContextSearch: 'newName() {} // marker');
   }
 
-  test_checkFinalConditions_shadowsSuper_MethodElement_otherLib() async {
+  Future<void>
+      test_checkFinalConditions_shadowsSuper_MethodElement_otherLib() async {
     var libCode = r'''
 class A {
   newName() {} // marker
@@ -373,7 +381,7 @@
             libCode.indexOf('newName() {} // marker'), 'newName'.length));
   }
 
-  test_checkInitialConditions_inSDK() async {
+  Future<void> test_checkInitialConditions_inSDK() async {
     await indexTestUnit('''
 main() {
   'abc'.toUpperCase();
@@ -388,7 +396,7 @@
             "The method 'String.toUpperCase' is defined in the SDK, so cannot be renamed.");
   }
 
-  test_checkInitialConditions_operator() async {
+  Future<void> test_checkInitialConditions_operator() async {
     await indexTestUnit('''
 class A {
   operator -(other) => this;
@@ -401,7 +409,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkNewName_FieldElement() async {
+  Future<void> test_checkNewName_FieldElement() async {
     await indexTestUnit('''
 class A {
   int test;
@@ -418,7 +426,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_MethodElement() async {
+  Future<void> test_checkNewName_MethodElement() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -446,7 +454,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_createChange_FieldElement() async {
+  Future<void> test_createChange_FieldElement() async {
     await indexTestUnit('''
 class A {
   int test; // marker
@@ -512,7 +520,8 @@
 ''');
   }
 
-  test_createChange_FieldElement_constructorFieldInitializer() async {
+  Future<void>
+      test_createChange_FieldElement_constructorFieldInitializer() async {
     await indexTestUnit('''
 class A {
   final test;
@@ -533,7 +542,7 @@
 ''');
   }
 
-  test_createChange_FieldElement_fieldFormalParameter() async {
+  Future<void> test_createChange_FieldElement_fieldFormalParameter() async {
     await indexTestUnit('''
 class A {
   final test;
@@ -554,7 +563,8 @@
 ''');
   }
 
-  test_createChange_FieldElement_fieldFormalParameter_named() async {
+  Future<void>
+      test_createChange_FieldElement_fieldFormalParameter_named() async {
     await indexTestUnit('''
 class A {
   final test;
@@ -581,7 +591,7 @@
 ''');
   }
 
-  test_createChange_FieldElement_invocation() async {
+  Future<void> test_createChange_FieldElement_invocation() async {
     await indexTestUnit('''
 typedef F(a);
 class A {
@@ -616,7 +626,7 @@
 ''');
   }
 
-  test_createChange_MethodElement() async {
+  Future<void> test_createChange_MethodElement() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -684,7 +694,7 @@
 ''');
   }
 
-  test_createChange_MethodElement_potential() async {
+  Future<void> test_createChange_MethodElement_potential() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -714,7 +724,7 @@
     assertPotentialEdits(['test(); // 1', 'test(); // 2']);
   }
 
-  test_createChange_MethodElement_potential_inPubCache() async {
+  Future<void> test_createChange_MethodElement_potential_inPubCache() async {
     var externalPath = addPackageFile('aaa', 'lib.dart', r'''
 processObj(p) {
   p.test();
@@ -752,7 +762,8 @@
     expect(fileEdit, isNull);
   }
 
-  test_createChange_MethodElement_potential_private_otherLibrary() async {
+  Future<void>
+      test_createChange_MethodElement_potential_private_otherLibrary() async {
     await indexUnit('/lib.dart', '''
 library lib;
 main(p) {
@@ -786,7 +797,7 @@
     assertNoFileChange('/lib.dart');
   }
 
-  test_createChange_outsideOfProject_declarationInPackage() async {
+  Future<void> test_createChange_outsideOfProject_declarationInPackage() async {
     addPackageFile('aaa', 'aaa.dart', r'''
 class A {
   void test() {}
@@ -828,7 +839,7 @@
     expect(refactoringChange.edits[0].file, testFile);
   }
 
-  test_createChange_outsideOfProject_referenceInPart() async {
+  Future<void> test_createChange_outsideOfProject_referenceInPart() async {
     newFile('/home/part.dart', content: r'''
 part of test;
 
@@ -874,7 +885,7 @@
     expect(refactoringChange.edits[0].file, testFile);
   }
 
-  test_createChange_PropertyAccessorElement_getter() async {
+  Future<void> test_createChange_PropertyAccessorElement_getter() async {
     await indexTestUnit('''
 class A {
   get test {} // marker
@@ -929,7 +940,7 @@
 ''');
   }
 
-  test_createChange_PropertyAccessorElement_setter() async {
+  Future<void> test_createChange_PropertyAccessorElement_setter() async {
     await indexTestUnit('''
 class A {
   get test {}
@@ -984,7 +995,7 @@
 ''');
   }
 
-  test_createChange_TypeParameterElement() async {
+  Future<void> test_createChange_TypeParameterElement() async {
     await indexTestUnit('''
 class A<Test> {
   Test field;
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 91686be..dc99c2b 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -12,7 +12,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameConstructorTest);
   });
@@ -20,7 +20,7 @@
 
 @reflectiveTest
 class RenameConstructorTest extends RenameRefactoringTest {
-  test_checkInitialConditions_inSDK() async {
+  Future<void> test_checkInitialConditions_inSDK() async {
     await indexTestUnit('''
 main() {
   new String.fromCharCodes([]);
@@ -35,7 +35,7 @@
             "The constructor 'String.fromCharCodes' is defined in the SDK, so cannot be renamed.");
   }
 
-  test_checkNewName() async {
+  Future<void> test_checkNewName() async {
     await indexTestUnit('''
 class A {
   A.test() {}
@@ -62,7 +62,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_hasMember_constructor() async {
+  Future<void> test_checkNewName_hasMember_constructor() async {
     await indexTestUnit('''
 class A {
   A.test() {}
@@ -79,7 +79,7 @@
         expectedContextSearch: 'newName() {} // existing');
   }
 
-  test_checkNewName_hasMember_method() async {
+  Future<void> test_checkNewName_hasMember_method() async {
     await indexTestUnit('''
 class A {
   A.test() {}
@@ -96,7 +96,7 @@
         expectedContextSearch: 'newName() {} // existing');
   }
 
-  test_createChange_add() async {
+  Future<void> test_createChange_add() async {
     await indexTestUnit('''
 class A {
   A() {} // marker
@@ -130,7 +130,7 @@
 ''');
   }
 
-  test_createChange_add_toSynthetic() async {
+  Future<void> test_createChange_add_toSynthetic() async {
     await indexTestUnit('''
 class A {
 }
@@ -161,7 +161,7 @@
 ''');
   }
 
-  test_createChange_change() async {
+  Future<void> test_createChange_change() async {
     await indexTestUnit('''
 class A {
   A.test() {} // marker
@@ -195,7 +195,7 @@
 ''');
   }
 
-  test_createChange_remove() async {
+  Future<void> test_createChange_remove() async {
     await indexTestUnit('''
 class A {
   A.test() {} // marker
@@ -229,7 +229,7 @@
 ''');
   }
 
-  test_newInstance_nullElement() async {
+  Future<void> test_newInstance_nullElement() async {
     await indexTestUnit('');
     var workspace = RefactoringWorkspace([driver], searchEngine);
     var refactoring = RenameRefactoring(workspace, testAnalysisResult, null);
diff --git a/pkg/analysis_server/test/services/refactoring/rename_extension_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_extension_member_test.dart
index b26061f..87c9044 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_extension_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_extension_member_test.dart
@@ -9,7 +9,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameExtensionMemberTest);
   });
@@ -23,7 +23,7 @@
     super.setUp();
   }
 
-  test_checkFinalConditions_hasMember_MethodElement() async {
+  Future<void> test_checkFinalConditions_hasMember_MethodElement() async {
     await indexTestUnit('''
 extension E on int {
   test() {}
@@ -40,7 +40,7 @@
         expectedContextSearch: 'newName() {} // existing');
   }
 
-  test_checkFinalConditions_OK_dropSuffix() async {
+  Future<void> test_checkFinalConditions_OK_dropSuffix() async {
     await indexTestUnit(r'''
 extension E on int {
   void testOld() {}
@@ -53,7 +53,8 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_shadowed_byLocalFunction_inExtension() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalFunction_inExtension() async {
     await indexTestUnit('''
 extension E on int {
   test() {}
@@ -76,7 +77,8 @@
     );
   }
 
-  test_checkFinalConditions_shadowed_byLocalVariable_inExtension() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_inExtension() async {
     await indexTestUnit('''
 extension E on int {
   test() {}
@@ -99,7 +101,8 @@
     );
   }
 
-  test_checkFinalConditions_shadowed_byParameter_inExtension() async {
+  Future<void>
+      test_checkFinalConditions_shadowed_byParameter_inExtension() async {
     await indexTestUnit('''
 extension E on int {
   test() {}
@@ -121,7 +124,7 @@
     );
   }
 
-  test_checkInitialConditions_operator() async {
+  Future<void> test_checkInitialConditions_operator() async {
     await indexTestUnit('''
 extension E on int {
   operator -(other) => null;
@@ -134,7 +137,7 @@
     assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
   }
 
-  test_checkNewName_FieldElement() async {
+  Future<void> test_checkNewName_FieldElement() async {
     await indexTestUnit('''
 extension E on int {
   int get test => 0;
@@ -154,7 +157,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_MethodElement() async {
+  Future<void> test_checkNewName_MethodElement() async {
     await indexTestUnit('''
 extension E on int {
   void test() {}
@@ -191,7 +194,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_createChange_MethodElement_instance() async {
+  Future<void> test_createChange_MethodElement_instance() async {
     await indexTestUnit('''
 class A {}
 
@@ -227,7 +230,7 @@
 ''');
   }
 
-  test_createChange_PropertyAccessorElement_getter() async {
+  Future<void> test_createChange_PropertyAccessorElement_getter() async {
     await indexTestUnit('''
 extension E on int {
   get test {} // marker
@@ -270,7 +273,7 @@
 ''');
   }
 
-  test_createChange_PropertyAccessorElement_setter() async {
+  Future<void> test_createChange_PropertyAccessorElement_setter() async {
     await indexTestUnit('''
 extension E on int {
   get test {}
@@ -313,7 +316,7 @@
 ''');
   }
 
-  test_createChange_TypeParameterElement() async {
+  Future<void> test_createChange_TypeParameterElement() async {
     await indexTestUnit('''
 extension E<Test> on int {
   Test get g1 => null;
diff --git a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
index 51a5849..7c7bc63 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
@@ -9,7 +9,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameImportTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class RenameImportTest extends RenameRefactoringTest {
-  test_checkNewName() async {
+  Future<void> test_checkNewName() async {
     await indexTestUnit("import 'dart:async' as test;");
     _createRefactoring("import 'dart:");
     expect(refactoring.oldName, 'test');
@@ -40,7 +40,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_createChange_add() async {
+  Future<void> test_createChange_add() async {
     await indexTestUnit('''
 import 'dart:async';
 import 'dart:math' show Random, min hide max;
@@ -66,7 +66,8 @@
 ''');
   }
 
-  test_createChange_add_interpolationExpression_hasCurlyBrackets() async {
+  Future<void>
+      test_createChange_add_interpolationExpression_hasCurlyBrackets() async {
     await indexTestUnit(r'''
 import 'dart:async';
 main() {
@@ -88,7 +89,8 @@
 ''');
   }
 
-  test_createChange_add_interpolationExpression_noCurlyBrackets() async {
+  Future<void>
+      test_createChange_add_interpolationExpression_noCurlyBrackets() async {
     await indexTestUnit(r'''
 import 'dart:async';
 main() {
@@ -110,7 +112,7 @@
 ''');
   }
 
-  test_createChange_change_className() async {
+  Future<void> test_createChange_change_className() async {
     await indexTestUnit('''
 import 'dart:math' as test;
 import 'dart:async' as test;
@@ -133,7 +135,7 @@
 ''');
   }
 
-  test_createChange_change_function() async {
+  Future<void> test_createChange_change_function() async {
     await indexTestUnit('''
 import 'dart:math' as test;
 import 'dart:async' as test;
@@ -158,7 +160,7 @@
 ''');
   }
 
-  test_createChange_change_onPrefixElement() async {
+  Future<void> test_createChange_change_onPrefixElement() async {
     await indexTestUnit('''
 import 'dart:async' as test;
 import 'dart:math' as test;
@@ -185,7 +187,7 @@
 ''');
   }
 
-  test_createChange_remove() async {
+  Future<void> test_createChange_remove() async {
     await indexTestUnit('''
 import 'dart:math' as test;
 import 'dart:async' as test;
@@ -208,7 +210,7 @@
 ''');
   }
 
-  test_oldName_empty() async {
+  Future<void> test_oldName_empty() async {
     await indexTestUnit('''
 import 'dart:math';
 import 'dart:async';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_label_test.dart b/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
index b583c5b..6ca432e 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
@@ -8,7 +8,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameLabelTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class RenameLabelTest extends RenameRefactoringTest {
-  test_checkNewName_LocalVariableElement() async {
+  Future<void> test_checkNewName_LocalVariableElement() async {
     await indexTestUnit('''
 main() {
 test:
@@ -41,7 +41,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_createChange() async {
+  Future<void> test_createChange() async {
     await indexTestUnit('''
 main() {
 test:
@@ -66,7 +66,7 @@
 ''');
   }
 
-  test_oldName() async {
+  Future<void> test_oldName() async {
     await indexTestUnit('''
 main() {
 test:
diff --git a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
index 5ac2e21..38c315a 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
@@ -8,7 +8,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameLibraryTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class RenameLibraryTest extends RenameRefactoringTest {
-  test_checkNewName() async {
+  Future<void> test_checkNewName() async {
     await indexTestUnit('''
 library my.app;
 ''');
@@ -39,7 +39,7 @@
             'The new name must be different than the current name.');
   }
 
-  test_createChange() async {
+  Future<void> test_createChange() async {
     addSource('/home/test/lib/part.dart', '''
 part of my.app;
 ''');
@@ -62,7 +62,7 @@
 ''');
   }
 
-  test_createChange_hasWhitespaces() async {
+  Future<void> test_createChange_hasWhitespaces() async {
     addSource('/home/test/lib/part.dart', '''
 part of my .  app;
 ''');
diff --git a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
index c677fca..0bd0de6 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
@@ -9,7 +9,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameLocalTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class RenameLocalTest extends RenameRefactoringTest {
-  test_checkFinalConditions_hasLocalFunction_after() async {
+  Future<void> test_checkFinalConditions_hasLocalFunction_after() async {
     await indexTestUnit('''
 main() {
   int test = 0;
@@ -33,7 +33,7 @@
         expectedContextSearch: 'newName() => 1');
   }
 
-  test_checkFinalConditions_hasLocalFunction_before() async {
+  Future<void> test_checkFinalConditions_hasLocalFunction_before() async {
     await indexTestUnit('''
 main() {
   newName() => 1;
@@ -48,7 +48,7 @@
         expectedMessage: "Duplicate function 'newName'.");
   }
 
-  test_checkFinalConditions_hasLocalVariable_after() async {
+  Future<void> test_checkFinalConditions_hasLocalVariable_after() async {
     await indexTestUnit('''
 main() {
   int test = 0;
@@ -66,7 +66,7 @@
         expectedContextSearch: 'newName = 1;');
   }
 
-  test_checkFinalConditions_hasLocalVariable_before() async {
+  Future<void> test_checkFinalConditions_hasLocalVariable_before() async {
     await indexTestUnit('''
 main() {
   var newName = 1;
@@ -82,7 +82,7 @@
         expectedContextSearch: 'newName = 1;');
   }
 
-  test_checkFinalConditions_hasLocalVariable_otherBlock() async {
+  Future<void> test_checkFinalConditions_hasLocalVariable_otherBlock() async {
     await indexTestUnit('''
 main() {
   {
@@ -99,7 +99,8 @@
     return assertRefactoringConditionsOK();
   }
 
-  test_checkFinalConditions_hasLocalVariable_otherForEachLoop() async {
+  Future<void>
+      test_checkFinalConditions_hasLocalVariable_otherForEachLoop() async {
     await indexTestUnit('''
 main() {
   for (int newName in []) {}
@@ -112,7 +113,7 @@
     return assertRefactoringConditionsOK();
   }
 
-  test_checkFinalConditions_hasLocalVariable_otherForLoop() async {
+  Future<void> test_checkFinalConditions_hasLocalVariable_otherForLoop() async {
     await indexTestUnit('''
 main() {
   for (int newName = 0; newName < 10; newName++) {}
@@ -125,7 +126,8 @@
     return assertRefactoringConditionsOK();
   }
 
-  test_checkFinalConditions_hasLocalVariable_otherFunction() async {
+  Future<void>
+      test_checkFinalConditions_hasLocalVariable_otherFunction() async {
     await indexTestUnit('''
 main() {
   int test = 0;
@@ -140,7 +142,7 @@
     return assertRefactoringConditionsOK();
   }
 
-  test_checkFinalConditions_shadows_classMember() async {
+  Future<void> test_checkFinalConditions_shadows_classMember() async {
     await indexTestUnit('''
 class A {
   var newName = 1;
@@ -160,7 +162,8 @@
         expectedContextSearch: 'newName);');
   }
 
-  test_checkFinalConditions_shadows_classMember_namedParameter() async {
+  Future<void>
+      test_checkFinalConditions_shadows_classMember_namedParameter() async {
     await indexTestUnit('''
 class A {
   foo({test: 1}) { // in A
@@ -183,7 +186,8 @@
         expectedContextSearch: 'newName);');
   }
 
-  test_checkFinalConditions_shadows_classMemberOK_qualifiedReference() async {
+  Future<void>
+      test_checkFinalConditions_shadows_classMemberOK_qualifiedReference() async {
     await indexTestUnit('''
 class A {
   var newName = 1;
@@ -199,7 +203,8 @@
     return assertRefactoringConditionsOK();
   }
 
-  test_checkFinalConditions_shadows_OK_namedParameterReference() async {
+  Future<void>
+      test_checkFinalConditions_shadows_OK_namedParameterReference() async {
     await indexTestUnit('''
 void f({newName}) {}
 main() {
@@ -213,7 +218,7 @@
     return assertRefactoringFinalConditionsOK();
   }
 
-  test_checkFinalConditions_shadows_topLevelFunction() async {
+  Future<void> test_checkFinalConditions_shadows_topLevelFunction() async {
     await indexTestUnit('''
 newName() {}
 main() {
@@ -229,7 +234,7 @@
         expectedContextSearch: 'newName(); // ref');
   }
 
-  test_checkNewName_FunctionElement() async {
+  Future<void> test_checkNewName_FunctionElement() async {
     await indexTestUnit('''
 main() {
   int test() => 0;
@@ -246,7 +251,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_LocalVariableElement() async {
+  Future<void> test_checkNewName_LocalVariableElement() async {
     await indexTestUnit('''
 main() {
   int test = 0;
@@ -268,7 +273,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_ParameterElement() async {
+  Future<void> test_checkNewName_ParameterElement() async {
     await indexTestUnit('''
 main(test) {
 }
@@ -284,7 +289,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_createChange_localFunction() async {
+  Future<void> test_createChange_localFunction() async {
     await indexTestUnit('''
 main() {
   int test() => 0;
@@ -307,7 +312,8 @@
 ''');
   }
 
-  test_createChange_localFunction_sameNameDifferenceScopes() async {
+  Future<void>
+      test_createChange_localFunction_sameNameDifferenceScopes() async {
     await indexTestUnit('''
 main() {
   {
@@ -347,7 +353,7 @@
 ''');
   }
 
-  test_createChange_localVariable() async {
+  Future<void> test_createChange_localVariable() async {
     await indexTestUnit('''
 main() {
   int test = 0;
@@ -372,7 +378,8 @@
 ''');
   }
 
-  test_createChange_localVariable_sameNameDifferenceScopes() async {
+  Future<void>
+      test_createChange_localVariable_sameNameDifferenceScopes() async {
     await indexTestUnit('''
 main() {
   {
@@ -412,7 +419,7 @@
 ''');
   }
 
-  test_createChange_parameter_named() async {
+  Future<void> test_createChange_parameter_named() async {
     await indexTestUnit('''
 myFunction({int test}) {
   test = 1;
@@ -441,7 +448,7 @@
 ''');
   }
 
-  test_createChange_parameter_named_inOtherFile() async {
+  Future<void> test_createChange_parameter_named_inOtherFile() async {
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
@@ -484,7 +491,7 @@
 ''');
   }
 
-  test_createChange_parameter_named_updateHierarchy() async {
+  Future<void> test_createChange_parameter_named_updateHierarchy() async {
     await indexUnit('/home/test/lib/test2.dart', '''
 library test2;
 class A {
@@ -544,7 +551,7 @@
 ''');
   }
 
-  test_createChange_parameter_optionalPositional() async {
+  Future<void> test_createChange_parameter_optionalPositional() async {
     await indexTestUnit('''
 myFunction([int test]) {
   test = 1;
@@ -573,7 +580,7 @@
 ''');
   }
 
-  test_oldName() async {
+  Future<void> test_oldName() async {
     await indexTestUnit('''
 main() {
   int test = 0;
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index c075d62..d78f249 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -9,7 +9,7 @@
 
 import 'abstract_rename.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameUnitMemberTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class RenameUnitMemberTest extends RenameRefactoringTest {
-  test_checkFinalConditions_hasTopLevel_ClassElement() async {
+  Future<void> test_checkFinalConditions_hasTopLevel_ClassElement() async {
     await indexTestUnit('''
 class Test {}
 class NewName {} // existing
@@ -31,7 +31,8 @@
         expectedContextSearch: 'NewName {} // existing');
   }
 
-  test_checkFinalConditions_hasTopLevel_FunctionTypeAliasElement() async {
+  Future<void>
+      test_checkFinalConditions_hasTopLevel_FunctionTypeAliasElement() async {
     await indexTestUnit('''
 class Test {}
 typedef NewName(); // existing
@@ -46,7 +47,8 @@
         expectedContextSearch: 'NewName(); // existing');
   }
 
-  test_checkFinalConditions_OK_qualifiedSuper_MethodElement() async {
+  Future<void>
+      test_checkFinalConditions_OK_qualifiedSuper_MethodElement() async {
     await indexTestUnit('''
 class Test {}
 class A {
@@ -65,7 +67,8 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_publicToPrivate_usedInOtherLibrary() async {
+  Future<void>
+      test_checkFinalConditions_publicToPrivate_usedInOtherLibrary() async {
     await indexTestUnit('''
 class Test {}
 ''');
@@ -85,7 +88,7 @@
         expectedMessage: "Renamed class will be invisible in 'my.lib'.");
   }
 
-  test_checkFinalConditions_shadowedBy_MethodElement() async {
+  Future<void> test_checkFinalConditions_shadowedBy_MethodElement() async {
     await indexTestUnit('''
 class Test {}
 class A {
@@ -105,7 +108,7 @@
         expectedContextSearch: 'NewName() {}');
   }
 
-  test_checkFinalConditions_shadowsInSubClass_importedLib() async {
+  Future<void> test_checkFinalConditions_shadowsInSubClass_importedLib() async {
     await indexTestUnit('''
 class Test {}
 ''');
@@ -129,7 +132,8 @@
         expectedMessage: "Renamed class will shadow method 'A.NewName'.");
   }
 
-  test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator() async {
+  Future<void>
+      test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator() async {
     await indexTestUnit('''
 class Test {}
 ''');
@@ -152,7 +156,8 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_shadowsInSubClass_MethodElement() async {
+  Future<void>
+      test_checkFinalConditions_shadowsInSubClass_MethodElement() async {
     await indexTestUnit('''
 class Test {}
 class A {
@@ -173,7 +178,8 @@
         expectedContextSearch: 'NewName(); // super-ref');
   }
 
-  test_checkFinalConditions_shadowsInSubClass_notImportedLib() async {
+  Future<void>
+      test_checkFinalConditions_shadowsInSubClass_notImportedLib() async {
     await indexUnit('/lib.dart', '''
 library my.lib;
 class A {
@@ -195,7 +201,7 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkFinalConditions_shadowsInSubClass_notSubClass() async {
+  Future<void> test_checkFinalConditions_shadowsInSubClass_notSubClass() async {
     await indexTestUnit('''
 class Test {}
 class A {
@@ -214,7 +220,7 @@
     assertRefactoringStatusOK(status);
   }
 
-  test_checkInitialConditions_inSDK() async {
+  Future<void> test_checkInitialConditions_inSDK() async {
     await indexTestUnit('''
 main() {
   String s;
@@ -229,7 +235,7 @@
             "The class 'String' is defined in the SDK, so cannot be renamed.");
   }
 
-  test_checkInitialConditions_outsideOfProject() async {
+  Future<void> test_checkInitialConditions_outsideOfProject() async {
     addPackageFile('aaa', 'lib.dart', r'''
 class A {}
 ''');
@@ -248,7 +254,7 @@
             "The class 'A' is defined outside of the project, so cannot be renamed.");
   }
 
-  test_checkNewName_ClassElement() async {
+  Future<void> test_checkNewName_ClassElement() async {
     await indexTestUnit('''
 class Test {}
 ''');
@@ -274,7 +280,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_FunctionElement() async {
+  Future<void> test_checkNewName_FunctionElement() async {
     await indexTestUnit('''
 test() {}
 ''');
@@ -294,7 +300,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_FunctionTypeAliasElement() async {
+  Future<void> test_checkNewName_FunctionTypeAliasElement() async {
     await indexTestUnit('''
 typedef Test();
 ''');
@@ -309,7 +315,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_checkNewName_TopLevelVariableElement() async {
+  Future<void> test_checkNewName_TopLevelVariableElement() async {
     await indexTestUnit('''
 var test;
 ''');
@@ -329,7 +335,7 @@
     assertRefactoringStatusOK(refactoring.checkNewName());
   }
 
-  test_createChange_ClassElement() async {
+  Future<void> test_createChange_ClassElement() async {
     await indexTestUnit('''
 class Test implements Other {
   Test() {}
@@ -367,7 +373,7 @@
 ''');
   }
 
-  test_createChange_ClassElement_flutterWidget() async {
+  Future<void> test_createChange_ClassElement_flutterWidget() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -408,7 +414,8 @@
 ''');
   }
 
-  test_createChange_ClassElement_flutterWidget_privateBoth() async {
+  Future<void>
+      test_createChange_ClassElement_flutterWidget_privateBoth() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -449,7 +456,8 @@
 ''');
   }
 
-  test_createChange_ClassElement_flutterWidget_privateState() async {
+  Future<void>
+      test_createChange_ClassElement_flutterWidget_privateState() async {
     addFlutterPackage();
     await indexTestUnit('''
 import 'package:flutter/material.dart';
@@ -490,7 +498,7 @@
 ''');
   }
 
-  test_createChange_ClassElement_invocation() async {
+  Future<void> test_createChange_ClassElement_invocation() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit('''
 class Test {
@@ -515,7 +523,7 @@
 ''');
   }
 
-  test_createChange_ClassElement_parameterTypeNested() async {
+  Future<void> test_createChange_ClassElement_parameterTypeNested() async {
     await indexTestUnit('''
 class Test {
 }
@@ -536,7 +544,7 @@
 ''');
   }
 
-  test_createChange_ClassElement_typeAlias() async {
+  Future<void> test_createChange_ClassElement_typeAlias() async {
     await indexTestUnit('''
 class A {}
 class Test = Object with A;
@@ -558,7 +566,7 @@
 ''');
   }
 
-  test_createChange_FunctionElement() async {
+  Future<void> test_createChange_FunctionElement() async {
     await indexTestUnit('''
 test() {}
 foo() {}
@@ -586,7 +594,7 @@
 ''');
   }
 
-  test_createChange_FunctionElement_imported() async {
+  Future<void> test_createChange_FunctionElement_imported() async {
     await indexUnit('/home/test/lib/foo.dart', r'''
 test() {}
 foo() {}
@@ -620,7 +628,7 @@
 ''');
   }
 
-  test_createChange_FunctionTypeAliasElement() async {
+  Future<void> test_createChange_FunctionTypeAliasElement() async {
     await indexTestUnit('''
 typedef void F();
 void foo<T>() {}
@@ -644,7 +652,7 @@
 ''');
   }
 
-  test_createChange_outsideOfProject_referenceInPart() async {
+  Future<void> test_createChange_outsideOfProject_referenceInPart() async {
     newFile('/home/part.dart', content: r'''
 part of test;
 
@@ -680,43 +688,45 @@
     expect(refactoringChange.edits[0].file, testFile);
   }
 
-  test_createChange_PropertyAccessorElement_getter_declaration() async {
+  Future<void>
+      test_createChange_PropertyAccessorElement_getter_declaration() async {
     await _test_createChange_PropertyAccessorElement('test {}');
   }
 
-  test_createChange_PropertyAccessorElement_getter_usage() async {
+  Future<void> test_createChange_PropertyAccessorElement_getter_usage() async {
     await _test_createChange_PropertyAccessorElement('test);');
   }
 
-  test_createChange_PropertyAccessorElement_mix() async {
+  Future<void> test_createChange_PropertyAccessorElement_mix() async {
     await _test_createChange_PropertyAccessorElement('test += 2');
   }
 
-  test_createChange_PropertyAccessorElement_setter_declaration() async {
+  Future<void>
+      test_createChange_PropertyAccessorElement_setter_declaration() async {
     await _test_createChange_PropertyAccessorElement('test(x) {}');
   }
 
-  test_createChange_PropertyAccessorElement_setter_usage() async {
+  Future<void> test_createChange_PropertyAccessorElement_setter_usage() async {
     await _test_createChange_PropertyAccessorElement('test = 1');
   }
 
-  test_createChange_TopLevelVariableElement_field() async {
+  Future<void> test_createChange_TopLevelVariableElement_field() async {
     await _test_createChange_TopLevelVariableElement('test = 0');
   }
 
-  test_createChange_TopLevelVariableElement_getter() async {
+  Future<void> test_createChange_TopLevelVariableElement_getter() async {
     await _test_createChange_TopLevelVariableElement('test);');
   }
 
-  test_createChange_TopLevelVariableElement_mix() async {
+  Future<void> test_createChange_TopLevelVariableElement_mix() async {
     await _test_createChange_TopLevelVariableElement('test += 2');
   }
 
-  test_createChange_TopLevelVariableElement_setter() async {
+  Future<void> test_createChange_TopLevelVariableElement_setter() async {
     await _test_createChange_TopLevelVariableElement('test = 1');
   }
 
-  _test_createChange_PropertyAccessorElement(String search) async {
+  Future<void> _test_createChange_PropertyAccessorElement(String search) async {
     await indexTestUnit('''
 get test {}
 set test(x) {}
@@ -743,7 +753,7 @@
 ''');
   }
 
-  _test_createChange_TopLevelVariableElement(String search) async {
+  Future<void> _test_createChange_TopLevelVariableElement(String search) async {
     await indexTestUnit('''
 int test = 0;
 main() {
diff --git a/pkg/analysis_server/test/services/refactoring/test_all.dart b/pkg/analysis_server/test/services/refactoring/test_all.dart
index 17ce7af..d48e879 100644
--- a/pkg/analysis_server/test/services/refactoring/test_all.dart
+++ b/pkg/analysis_server/test/services/refactoring/test_all.dart
@@ -22,8 +22,7 @@
 import 'rename_local_test.dart' as rename_local_test;
 import 'rename_unit_member_test.dart' as rename_unit_member_test;
 
-/// Utility for manually running all tests.
-main() {
+void main() {
   defineReflectiveSuite(() {
     convert_getter_to_method_test.main();
     convert_method_to_getter_test.main();
diff --git a/pkg/analysis_server/test/services/search/element_visitors_test.dart b/pkg/analysis_server/test/services/search/element_visitors_test.dart
index 5739ea8..11d8bc7 100644
--- a/pkg/analysis_server/test/services/search/element_visitors_test.dart
+++ b/pkg/analysis_server/test/services/search/element_visitors_test.dart
@@ -9,7 +9,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementByNameOffsetTest);
   });
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class FindElementByNameOffsetTest extends AbstractSingleUnitTest {
-  test_class() async {
+  Future<void> test_class() async {
     await resolveTestUnit(r'''
 class AAA {}
 class BBB {}
@@ -26,7 +26,7 @@
     _assertElement(19, ElementKind.CLASS, 'BBB');
   }
 
-  test_function() async {
+  Future<void> test_function() async {
     await resolveTestUnit(r'''
 void aaa() {}
 void bbb() {}
@@ -35,7 +35,7 @@
     _assertElement(19, ElementKind.FUNCTION, 'bbb');
   }
 
-  test_null() async {
+  Future<void> test_null() async {
     await resolveTestUnit(r'''
 class AAA {}
 class BBB {}
@@ -49,7 +49,7 @@
     expect(findElementByNameOffset(testUnitElement, 7), isNull);
   }
 
-  test_topLevelVariable() async {
+  Future<void> test_topLevelVariable() async {
     await resolveTestUnit(r'''
 int aaa, bbb;
 int ccc;
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index 252bd3f..333b02a 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(HierarchyTest);
   });
@@ -28,7 +28,7 @@
     searchEngine = SearchEngineImpl([driver]);
   }
 
-  test_getClassMembers() async {
+  Future<void> test_getClassMembers() async {
     await _indexTestUnit('''
 class A {
   A() {}
@@ -54,7 +54,7 @@
     }
   }
 
-  test_getHierarchyMembers_constructors() async {
+  Future<void> test_getHierarchyMembers_constructors() async {
     await _indexTestUnit('''
 class A {
   A() {}
@@ -76,7 +76,7 @@
     return Future.wait([futureA, futureB]);
   }
 
-  test_getHierarchyMembers_fields() async {
+  Future<void> test_getHierarchyMembers_fields() async {
     await _indexTestUnit('''
 class A {
   int foo;
@@ -114,7 +114,7 @@
     return Future.wait([futureA, futureB, futureC, futureD]);
   }
 
-  test_getHierarchyMembers_fields_static() async {
+  Future<void> test_getHierarchyMembers_fields_static() async {
     await _indexTestUnit('''
 class A {
   static int foo;
@@ -149,7 +149,7 @@
     }
   }
 
-  test_getHierarchyMembers_methods() async {
+  Future<void> test_getHierarchyMembers_methods() async {
     await _indexTestUnit('''
 class A {
   foo() {}
@@ -195,7 +195,7 @@
     return Future.wait([futureA, futureB, futureC, futureD, futureE]);
   }
 
-  test_getHierarchyMembers_methods_static() async {
+  Future<void> test_getHierarchyMembers_methods_static() async {
     await _indexTestUnit('''
 class A {
   static foo() {}
@@ -220,7 +220,7 @@
     }
   }
 
-  test_getHierarchyMembers_withInterfaces() async {
+  Future<void> test_getHierarchyMembers_withInterfaces() async {
     await _indexTestUnit('''
 class A {
   foo() {}
@@ -255,7 +255,7 @@
     return Future.wait([futureA, futureB, futureD]);
   }
 
-  test_getHierarchyNamedParameters() async {
+  Future<void> test_getHierarchyNamedParameters() async {
     await _indexTestUnit('''
 class A {
   foo({p}) {}
@@ -310,7 +310,7 @@
     }
   }
 
-  test_getHierarchyNamedParameters_invalid_missing() async {
+  Future<void> test_getHierarchyNamedParameters_invalid_missing() async {
     verifyNoTestUnitErrors = false;
     await _indexTestUnit('''
 class A {
@@ -327,7 +327,7 @@
     expect(result, unorderedEquals([parameterA]));
   }
 
-  test_getHierarchyNamedParameters_invalid_notNamed() async {
+  Future<void> test_getHierarchyNamedParameters_invalid_notNamed() async {
     verifyNoTestUnitErrors = false;
     await _indexTestUnit('''
 class A {
@@ -344,7 +344,7 @@
     expect(result, unorderedEquals([parameterA]));
   }
 
-  test_getMembers() async {
+  Future<void> test_getMembers() async {
     await _indexTestUnit('''
 class A {
   A() {}
@@ -392,7 +392,7 @@
     }
   }
 
-  test_getSuperClasses() async {
+  Future<void> test_getSuperClasses() async {
     await _indexTestUnit('''
 class A {}
 class B extends A {}
@@ -446,7 +446,7 @@
     }
   }
 
-  test_getSuperClasses_superclassConstraints() async {
+  Future<void> test_getSuperClasses_superclassConstraints() async {
     await _indexTestUnit('''
 class A {}
 class B extends A {}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 96f9cd2..c46b81f 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -21,7 +21,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchEngineImplTest);
   });
@@ -45,7 +45,7 @@
     scheduler.start();
   }
 
-  test_membersOfSubtypes_hasMembers() async {
+  Future<void> test_membersOfSubtypes_hasMembers() async {
     var a = newFile('/test/a.dart', content: '''
 class A {
   void a() {}
@@ -82,7 +82,7 @@
     expect(members, unorderedEquals(['a', 'b']));
   }
 
-  test_membersOfSubtypes_noMembers() async {
+  Future<void> test_membersOfSubtypes_noMembers() async {
     var a = newFile('/test/a.dart', content: '''
 class A {
   void a() {}
@@ -109,7 +109,7 @@
     expect(members, isEmpty);
   }
 
-  test_membersOfSubtypes_noSubtypes() async {
+  Future<void> test_membersOfSubtypes_noSubtypes() async {
     var a = newFile('/test/a.dart', content: '''
 class A {
   void a() {}
@@ -138,7 +138,7 @@
     expect(members, isNull);
   }
 
-  test_membersOfSubtypes_private() async {
+  Future<void> test_membersOfSubtypes_private() async {
     var a = newFile('/test/a.dart', content: '''
 class A {
   void a() {}
@@ -175,7 +175,7 @@
     expect(members, unorderedEquals(['a', '_b']));
   }
 
-  test_searchAllSubtypes() async {
+  Future<void> test_searchAllSubtypes() async {
     var p = newFile('/test.dart', content: '''
 class T {}
 class A extends T {}
@@ -197,7 +197,7 @@
     _assertContainsClass(subtypes, 'C');
   }
 
-  test_searchAllSubtypes_acrossDrivers() async {
+  Future<void> test_searchAllSubtypes_acrossDrivers() async {
     var a = newFile('/test/a.dart', content: '''
 class T {}
 class A extends T {}
@@ -225,7 +225,7 @@
     expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
   }
 
-  test_searchAllSubtypes_mixin() async {
+  Future<void> test_searchAllSubtypes_mixin() async {
     var p = newFile('/test.dart', content: '''
 class T {}
 
@@ -254,7 +254,7 @@
     _assertContainsClass(subtypes, 'E');
   }
 
-  test_searchMemberDeclarations() async {
+  Future<void> test_searchMemberDeclarations() async {
     var codeA = '''
 class A {
   int test; // 1
@@ -300,7 +300,7 @@
     assertHasElement('test', codeB.indexOf('test() {} // 2'));
   }
 
-  test_searchMemberReferences() async {
+  Future<void> test_searchMemberReferences() async {
     var a = newFile('/test/a.dart', content: '''
 class A {
   int test;
@@ -336,7 +336,7 @@
             m.element.name == 'bar' || m.kind == MatchKind.WRITE)));
   }
 
-  test_searchReferences() async {
+  Future<void> test_searchReferences() async {
     var a = newFile('/test/a.dart', content: '''
 class T {}
 T a;
@@ -364,7 +364,7 @@
         matches, contains(predicate((SearchMatch m) => m.element.name == 'b')));
   }
 
-  test_searchReferences_discover_owned() async {
+  Future<void> test_searchReferences_discover_owned() async {
     var t = newFile('/test/lib/t.dart', content: '''
 import 'package:aaa/a.dart';
 int t;
@@ -396,7 +396,7 @@
     assertHasOne(a, 'a');
   }
 
-  test_searchTopLevelDeclarations() async {
+  Future<void> test_searchTopLevelDeclarations() async {
     var a = newFile('/test/a.dart', content: '''
 class A {}
 int a;
@@ -433,7 +433,7 @@
     assertHasOneElement('b');
   }
 
-  test_searchTopLevelDeclarations_dependentPackage() async {
+  Future<void> test_searchTopLevelDeclarations_dependentPackage() async {
     var a = newFile('/a/lib/a.dart', content: '''
 class A {}
 ''').path;
diff --git a/pkg/analysis_server/test/services/search/test_all.dart b/pkg/analysis_server/test/services/search/test_all.dart
index 63d9465..c3f8f91 100644
--- a/pkg/analysis_server/test/services/search/test_all.dart
+++ b/pkg/analysis_server/test/services/search/test_all.dart
@@ -8,10 +8,7 @@
 import 'hierarchy_test.dart' as hierarchy_test;
 import 'search_engine_test.dart' as search_engine_test;
 
-/**
- * Utility for manually running all tests.
- */
-main() {
+void main() {
   defineReflectiveSuite(() {
     element_visitors.main();
     hierarchy_test.main();
diff --git a/pkg/analysis_server/test/services/test_all.dart b/pkg/analysis_server/test/services/test_all.dart
index 76edf82..954023d 100644
--- a/pkg/analysis_server/test/services/test_all.dart
+++ b/pkg/analysis_server/test/services/test_all.dart
@@ -10,7 +10,7 @@
 import 'refactoring/test_all.dart' as refactoring_all;
 import 'search/test_all.dart' as search_all;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     completion_all.main();
     correction_all.main();
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index e418a67..85d8c45 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -15,7 +15,7 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:test/test.dart';
 
-main() {
+void main() {
   group('SocketServer', () {
     test('createAnalysisServer_successful',
         SocketServerTest.createAnalysisServer_successful);
diff --git a/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart b/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
index 2304e90..b3783bb 100644
--- a/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ClosingLabelsComputerTest);
   });
@@ -23,12 +23,12 @@
   String sourcePath;
 
   @override
-  setUp() {
+  void setUp() {
     super.setUp();
     sourcePath = convertPath('/home/test/lib/test.dart');
   }
 
-  test_adjacentLinesExcluded() async {
+  Future<void> test_adjacentLinesExcluded() async {
     String content = '''
 void myMethod() {
   return /*1*/new Wrapper(
@@ -45,7 +45,7 @@
   /// When constructors span many like this, the node's start position is on the first line
   /// of the expression and not where the opening paren is, so this test ensures we
   /// don't end up with lots of unwanted labels on each line here.
-  test_chainedConstructorOverManyLines() async {
+  Future<void> test_chainedConstructorOverManyLines() async {
     String content = '''
 main() {
   return new thing
@@ -61,7 +61,7 @@
   /// When chaining methods like this, the node's start position is on the first line
   /// of the expression and not where the opening paren is, so this test ensures we
   /// don't end up with lots of unwanted labels on each line here.
-  test_chainedMethodsOverManyLines() async {
+  Future<void> test_chainedMethodsOverManyLines() async {
     String content = '''
 List<ClosingLabel> compute() {
   _unit.accept(new _DartUnitClosingLabelsComputerVisitor(this));
@@ -77,7 +77,7 @@
     _compareLabels(labels, content, expectedLabelCount: 0);
   }
 
-  test_constConstructor() async {
+  Future<void> test_constConstructor() async {
     String content = '''
 void myMethod() {
   return /*1*/new Wrapper(
@@ -93,7 +93,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_constNamedConstructor() async {
+  Future<void> test_constNamedConstructor() async {
     String content = '''
 void myMethod() {
   return /*1*/new Wrapper(
@@ -109,7 +109,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_knownBadCode1() async {
+  Future<void> test_knownBadCode1() async {
     // This code crashed during testing when I accidentally inserted a test snippet.
     String content = """
 @override
@@ -138,7 +138,7 @@
     await _computeElements(content);
   }
 
-  test_labelsShownForMultipleElements() async {
+  Future<void> test_labelsShownForMultipleElements() async {
     String content = '''
 Widget build(BuildContext context) {
   return /*1*/new Row(
@@ -151,7 +151,7 @@
     _compareLabels(labels, content, expectedLabelCount: 1);
   }
 
-  test_labelsShownForMultipleElements_2() async {
+  Future<void> test_labelsShownForMultipleElements_2() async {
     String content = '''
 Widget build(BuildContext context) {
   return /*1*/new Row(
@@ -166,7 +166,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_listLiterals() async {
+  Future<void> test_listLiterals() async {
     String content = '''
 void myMethod() {
   return /*1*/new Wrapper(
@@ -185,7 +185,7 @@
   /// When a line contains the end of a label, we need to ensure we also include any
   /// other labels that end on the same line, even if they are 1-2 lines, otherwise
   /// it isn't obvious which closing bracket goes with the label.
-  test_mixedLineSpanning() async {
+  Future<void> test_mixedLineSpanning() async {
     String content = '''
 main() {
     /*1*/new Foo((m) {
@@ -202,7 +202,7 @@
     _compareLabels(labels, content, expectedLabelCount: 3);
   }
 
-  test_multipleNested() async {
+  Future<void> test_multipleNested() async {
     String content = """
 Widget build(BuildContext context) {
   return /*1*/new Row(
@@ -226,7 +226,7 @@
     _compareLabels(labels, content, expectedLabelCount: 4);
   }
 
-  test_newConstructor() async {
+  Future<void> test_newConstructor() async {
     String content = '''
 void myMethod() {
   return /*1*/new Wrapper(
@@ -242,7 +242,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_newNamedConstructor() async {
+  Future<void> test_newNamedConstructor() async {
     String content = '''
 void myMethod() {
   return /*1*/new Wrapper(
@@ -258,7 +258,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_noLabelsForOneElement() async {
+  Future<void> test_noLabelsForOneElement() async {
     String content = '''
 Widget build(BuildContext context) {
   return new Row(
@@ -270,7 +270,7 @@
     _compareLabels(labels, content, expectedLabelCount: 0);
   }
 
-  test_NoLabelsFromInterpolatedStrings() async {
+  Future<void> test_NoLabelsFromInterpolatedStrings() async {
     String content = """
 void main(HighlightRegionType type, int offset, int length) {
   /*1*/new Wrapper(
@@ -285,7 +285,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_prefixedConstConstructor() async {
+  Future<void> test_prefixedConstConstructor() async {
     String content = """
 import 'dart:async' as a;
 void myMethod() {
@@ -302,7 +302,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_prefixedConstNamedConstructor() async {
+  Future<void> test_prefixedConstNamedConstructor() async {
     String content = """
 import 'dart:async' as a;
 void myMethod() {
@@ -319,7 +319,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_prefixedNewConstructor() async {
+  Future<void> test_prefixedNewConstructor() async {
     String content = """
 import 'dart:async' as a;
 void myMethod() {
@@ -336,7 +336,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_prefixedNewNamedConstructor() async {
+  Future<void> test_prefixedNewNamedConstructor() async {
     String content = """
 import 'dart:async' as a;
 void myMethod() {
@@ -353,7 +353,7 @@
     _compareLabels(labels, content, expectedLabelCount: 2);
   }
 
-  test_sameLineExcluded() async {
+  Future<void> test_sameLineExcluded() async {
     String content = '''
 void myMethod() {
   return new Thing();
diff --git a/pkg/analysis_server/test/src/computer/folding_computer_test.dart b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
index bec25b0..fbe1015 100644
--- a/pkg/analysis_server/test/src/computer/folding_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FoldingComputerTest);
   });
@@ -23,12 +23,12 @@
   String sourcePath;
 
   @override
-  setUp() {
+  void setUp() {
     super.setUp();
     sourcePath = convertPath('/home/test/lib/test.dart');
   }
 
-  test_annotations() async {
+  Future<void> test_annotations() async {
     String content = '''
 @myMultilineAnnotation/*1:INC*/(
   "this",
@@ -79,7 +79,7 @@
     _compareRegions(regions, content);
   }
 
-  test_assertInitializer() async {
+  Future<void> test_assertInitializer() async {
     String content = '''
 class C {/*1:INC*/
   C() : assert(/*2:INC*/
@@ -92,7 +92,7 @@
     _compareRegions(regions, content);
   }
 
-  test_assertStatement() async {
+  Future<void> test_assertStatement() async {
     String content = '''
 main() {/*1:INC*/
   assert(/*2:INC*/
@@ -105,7 +105,7 @@
     _compareRegions(regions, content);
   }
 
-  test_class() async {
+  Future<void> test_class() async {
     String content = '''
 // Content before
 
@@ -126,7 +126,7 @@
     _compareRegions(regions, content);
   }
 
-  test_comment_is_not_considered_file_header() async {
+  Future<void> test_comment_is_not_considered_file_header() async {
     String content = """
 // This is not the file header
 // It's just a comment
@@ -139,7 +139,7 @@
     expect(regions, hasLength(0));
   }
 
-  test_constructor_invocations() async {
+  Future<void> test_constructor_invocations() async {
     String content = '''
 // Content before
 
@@ -156,7 +156,7 @@
     _compareRegions(regions, content);
   }
 
-  test_file_header() async {
+  Future<void> test_file_header() async {
     String content = """
 // Copyright some year by some people/*1:EXC*/
 // See LICENCE etc./*1:INC:FILE_HEADER*/
@@ -170,7 +170,7 @@
     _compareRegions(regions, content);
   }
 
-  test_file_header_does_not_include_block_comments() async {
+  Future<void> test_file_header_does_not_include_block_comments() async {
     String content = """
 /*
  * Copyright some year by some people
@@ -185,7 +185,7 @@
     expect(regions, hasLength(0));
   }
 
-  test_file_header_with_no_function_comment() async {
+  Future<void> test_file_header_with_no_function_comment() async {
     String content = '''
 // Copyright some year by some people/*1:EXC*/
 // See LICENCE etc./*1:INC:FILE_HEADER*/
@@ -197,7 +197,7 @@
     _compareRegions(regions, content);
   }
 
-  test_file_header_with_non_end_of_line_comment() async {
+  Future<void> test_file_header_with_non_end_of_line_comment() async {
     String content = """
 // Copyright some year by some people/*1:EXC*/
 // See LICENCE etc./*1:INC:FILE_HEADER*/
@@ -210,7 +210,7 @@
     _compareRegions(regions, content);
   }
 
-  test_file_header_with_script_prefix() async {
+  Future<void> test_file_header_with_script_prefix() async {
     String content = """
 #! /usr/bin/dart
 // Copyright some year by some people/*1:EXC*/
@@ -225,7 +225,7 @@
     _compareRegions(regions, content);
   }
 
-  test_function() async {
+  Future<void> test_function() async {
     String content = '''
 // Content before
 
@@ -240,7 +240,7 @@
     _compareRegions(regions, content);
   }
 
-  test_function_expression_invocation() async {
+  Future<void> test_function_expression_invocation() async {
     String content = '''
 // Content before
 
@@ -262,7 +262,7 @@
     _compareRegions(regions, content);
   }
 
-  test_function_with_dart_doc() async {
+  Future<void> test_function_with_dart_doc() async {
     String content = '''
 // Content before
 
@@ -279,7 +279,7 @@
     _compareRegions(regions, content);
   }
 
-  test_invocations() async {
+  Future<void> test_invocations() async {
     String content = '''
 // Content before
 
@@ -296,7 +296,7 @@
     _compareRegions(regions, content);
   }
 
-  test_literal_list() async {
+  Future<void> test_literal_list() async {
     String content = '''
 // Content before
 
@@ -314,7 +314,7 @@
     _compareRegions(regions, content);
   }
 
-  test_literal_map() async {
+  Future<void> test_literal_map() async {
     String content = '''
 // Content before
 
@@ -332,7 +332,7 @@
     _compareRegions(regions, content);
   }
 
-  test_mixin() async {
+  Future<void> test_mixin() async {
     String content = '''
 // Content before
 
@@ -349,7 +349,7 @@
     _compareRegions(regions, content);
   }
 
-  test_multiple_directive_types() async {
+  Future<void> test_multiple_directive_types() async {
     String content = """
 import/*1:INC*/ 'dart:async';
 
@@ -366,7 +366,7 @@
     _compareRegions(regions, content);
   }
 
-  test_multiple_import_directives() async {
+  Future<void> test_multiple_import_directives() async {
     String content = """
 import/*1:INC*/ 'dart:async';
 
@@ -383,7 +383,7 @@
     _compareRegions(regions, content);
   }
 
-  test_nested_function() async {
+  Future<void> test_nested_function() async {
     String content = '''
 // Content before
 
@@ -401,7 +401,7 @@
     _compareRegions(regions, content);
   }
 
-  test_nested_invocations() async {
+  Future<void> test_nested_invocations() async {
     String content = '''
 // Content before
 
@@ -422,7 +422,7 @@
     _compareRegions(regions, content);
   }
 
-  test_single_import_directives() async {
+  Future<void> test_single_import_directives() async {
     String content = """
 import 'dart:async';
 
diff --git a/pkg/analysis_server/test/src/computer/highlights2_computer_test.dart b/pkg/analysis_server/test/src/computer/highlights2_computer_test.dart
index 84e1537..6579b8d 100644
--- a/pkg/analysis_server/test/src/computer/highlights2_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/highlights2_computer_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(Highlights2ComputerTest);
   });
@@ -25,12 +25,12 @@
   List<HighlightRegion> highlights;
 
   @override
-  setUp() {
+  void setUp() {
     super.setUp();
     sourcePath = convertPath('/home/test/lib/test.dart');
   }
 
-  test_extension() async {
+  Future<void> test_extension() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await _computeHighlights('''
 extension E on String {}
@@ -39,7 +39,7 @@
     _check(HighlightRegionType.BUILT_IN, 'on');
   }
 
-  test_methodInvocation_ofExtensionOverride_unresolved() async {
+  Future<void> test_methodInvocation_ofExtensionOverride_unresolved() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await _computeHighlights('''
 extension E on int {}
@@ -51,12 +51,12 @@
     _check(HighlightRegionType.IDENTIFIER_DEFAULT, 'foo');
   }
 
-  test_nullLiteral() async {
+  Future<void> test_nullLiteral() async {
     await _computeHighlights('var x = null;');
     _check(HighlightRegionType.KEYWORD, 'null');
   }
 
-  test_throwExpression() async {
+  Future<void> test_throwExpression() async {
     await _computeHighlights('''
 void main() {
   throw 'foo';
diff --git a/pkg/analysis_server/test/src/computer/highlights_computer_test.dart b/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
index 46c96b6..36860bd 100644
--- a/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(HighlightsComputerTest);
   });
@@ -25,12 +25,12 @@
   List<HighlightRegion> highlights;
 
   @override
-  setUp() {
+  void setUp() {
     super.setUp();
     sourcePath = convertPath('/home/test/lib/test.dart');
   }
 
-  test_extension() async {
+  Future<void> test_extension() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await _computeHighlights('''
 extension E on String {}
@@ -39,7 +39,7 @@
     _check(HighlightRegionType.BUILT_IN, 'on');
   }
 
-  test_methodInvocation_ofExtensionOverride_unresolved() async {
+  Future<void> test_methodInvocation_ofExtensionOverride_unresolved() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await _computeHighlights('''
 extension E on int {}
diff --git a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
index 8d78b6f..2fe414a 100644
--- a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
@@ -13,7 +13,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportElementsComputerTest);
   });
@@ -61,7 +61,7 @@
     path = convertPath('/home/test/lib/test.dart');
   }
 
-  test_createEdits_addImport_noDirectives() async {
+  Future<void> test_createEdits_addImport_noDirectives() async {
     await createBuilder('''
 main() {
   // paste here
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_createEdits_addImport_noPrefix() async {
+  Future<void> test_createEdits_addImport_noPrefix() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' as foo;
@@ -94,7 +94,7 @@
 ''');
   }
 
-  test_createEdits_addImport_prefix() async {
+  Future<void> test_createEdits_addImport_prefix() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart';
@@ -108,7 +108,7 @@
 ''');
   }
 
-  test_createEdits_addShow_multipleNames() async {
+  Future<void> test_createEdits_addShow_multipleNames() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' show B;
@@ -123,7 +123,7 @@
 ''');
   }
 
-  test_createEdits_addShow_removeHide() async {
+  Future<void> test_createEdits_addShow_removeHide() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' show A, B hide C, D;
@@ -136,7 +136,7 @@
 ''');
   }
 
-  test_createEdits_addShow_singleName_noPrefix() async {
+  Future<void> test_createEdits_addShow_singleName_noPrefix() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' show B;
@@ -149,7 +149,7 @@
 ''');
   }
 
-  test_createEdits_addShow_singleName_prefix() async {
+  Future<void> test_createEdits_addShow_singleName_prefix() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' show C;
@@ -164,7 +164,7 @@
 ''');
   }
 
-  test_createEdits_alreadyImported_noCombinators() async {
+  Future<void> test_createEdits_alreadyImported_noCombinators() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart';
@@ -175,7 +175,7 @@
     assertNoChanges();
   }
 
-  test_createEdits_alreadyImported_withPrefix() async {
+  Future<void> test_createEdits_alreadyImported_withPrefix() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' as foo;
@@ -186,7 +186,7 @@
     assertNoChanges();
   }
 
-  test_createEdits_alreadyImported_withShow() async {
+  Future<void> test_createEdits_alreadyImported_withShow() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' show A;
@@ -197,7 +197,7 @@
     assertNoChanges();
   }
 
-  test_createEdits_importSelf() async {
+  Future<void> test_createEdits_importSelf() async {
     await createBuilder('''
 class A {
   A parent;
@@ -209,7 +209,7 @@
     assertNoChanges();
   }
 
-  test_createEdits_invalidUri() async {
+  Future<void> test_createEdits_invalidUri() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'pakage:pkg/foo.dart';
@@ -223,13 +223,13 @@
 ''');
   }
 
-  test_createEdits_noElements() async {
+  Future<void> test_createEdits_noElements() async {
     await createBuilder('');
     await computeChanges(<ImportedElements>[]);
     assertNoChanges();
   }
 
-  test_createEdits_removeHide_firstInCombinator() async {
+  Future<void> test_createEdits_removeHide_firstInCombinator() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A, B, C;
@@ -242,7 +242,7 @@
 ''');
   }
 
-  test_createEdits_removeHide_lastInCombinator() async {
+  Future<void> test_createEdits_removeHide_lastInCombinator() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A, B, C;
@@ -255,7 +255,7 @@
 ''');
   }
 
-  test_createEdits_removeHide_middleInCombinator() async {
+  Future<void> test_createEdits_removeHide_middleInCombinator() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A, B, C;
@@ -268,7 +268,7 @@
 ''');
   }
 
-  test_createEdits_removeHide_multipleCombinators() async {
+  Future<void> test_createEdits_removeHide_multipleCombinators() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A, B, C hide A, B, C;
@@ -281,7 +281,7 @@
 ''');
   }
 
-  test_createEdits_removeHide_multipleNames() async {
+  Future<void> test_createEdits_removeHide_multipleNames() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A, B, C hide D, E, F hide G, H, I;
@@ -294,7 +294,7 @@
 ''');
   }
 
-  test_createEdits_removeHideCombinator_first() async {
+  Future<void> test_createEdits_removeHideCombinator_first() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A hide B hide C;
@@ -307,7 +307,7 @@
 ''');
   }
 
-  test_createEdits_removeHideCombinator_last() async {
+  Future<void> test_createEdits_removeHideCombinator_last() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A hide B hide C;
@@ -320,7 +320,7 @@
 ''');
   }
 
-  test_createEdits_removeHideCombinator_middle() async {
+  Future<void> test_createEdits_removeHideCombinator_middle() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A hide B hide C;
@@ -333,7 +333,7 @@
 ''');
   }
 
-  test_createEdits_removeHideCombinator_only() async {
+  Future<void> test_createEdits_removeHideCombinator_only() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A;
@@ -346,7 +346,7 @@
 ''');
   }
 
-  test_createEdits_removeHideCombinator_only_multiple() async {
+  Future<void> test_createEdits_removeHideCombinator_only_multiple() async {
     var fooFile = addPackageFile('pkg', 'foo.dart', '');
     await createBuilder('''
 import 'package:pkg/foo.dart' hide A, B;
diff --git a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
index 127b4a6..b7c07c7 100644
--- a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportedElementsComputerTest);
   });
@@ -45,12 +45,12 @@
   }
 
   @override
-  setUp() {
+  void setUp() {
     super.setUp();
     sourcePath = convertPath('/home/test/lib/test.dart');
   }
 
-  test_dartAsync_noPrefix() async {
+  Future<void> test_dartAsync_noPrefix() async {
     String selection = 'Future<String> f = null;';
     String content = '''
 import 'dart:async';
@@ -66,7 +66,7 @@
     ]);
   }
 
-  test_dartAsync_prefix() async {
+  Future<void> test_dartAsync_prefix() async {
     String selection = 'a.Future<String> f = null;';
     String content = '''
 import 'dart:async' as a;
@@ -82,7 +82,7 @@
     ]);
   }
 
-  test_dartCore_noPrefix() async {
+  Future<void> test_dartCore_noPrefix() async {
     String selection = "String s = '';";
     String content = '''
 blankLine() {
@@ -96,7 +96,7 @@
     ]);
   }
 
-  test_dartCore_prefix() async {
+  Future<void> test_dartCore_prefix() async {
     String selection = "core.String s = '';";
     String content = '''
 import 'dart:core' as core;
@@ -111,7 +111,7 @@
     ]);
   }
 
-  test_dartMath_noPrefix() async {
+  Future<void> test_dartMath_noPrefix() async {
     String selection = 'new Random();';
     String content = '''
 import 'dart:math';
@@ -126,7 +126,7 @@
     ]);
   }
 
-  test_import_simple() async {
+  Future<void> test_import_simple() async {
     String selection = "import 'dart:math';";
     String content = '''
 $selection
@@ -139,7 +139,7 @@
     expect(importedElements, hasLength(0));
   }
 
-  test_import_simple_show() async {
+  Future<void> test_import_simple_show() async {
     String selection = "import 'dart:math' show Random;";
     String content = '''
 $selection
@@ -152,7 +152,7 @@
     expect(importedElements, hasLength(0));
   }
 
-  test_multiple() async {
+  Future<void> test_multiple() async {
     String selection = r'''
 main() {
   Random r = new Random();
@@ -172,7 +172,7 @@
     ]);
   }
 
-  test_none_comment() async {
+  Future<void> test_none_comment() async {
     String selection = 'comment';
     String content = '''
 // Method $selection.
@@ -184,7 +184,7 @@
     expect(importedElements, hasLength(0));
   }
 
-  test_none_constructorDeclarationReturnType() async {
+  Future<void> test_none_constructorDeclarationReturnType() async {
     String selection = r'''
 class A {
   A();
@@ -198,7 +198,7 @@
     expect(importedElements, hasLength(0));
   }
 
-  test_none_partialNames() async {
+  Future<void> test_none_partialNames() async {
     String selection = 'x + y';
     String content = '''
 plusThree(int xx) {
@@ -210,7 +210,7 @@
     expect(importedElements, hasLength(0));
   }
 
-  test_none_wholeNames() async {
+  Future<void> test_none_wholeNames() async {
     String selection = 'x + y + 1';
     String content = '''
 plusThree(int x) {
@@ -222,7 +222,7 @@
     expect(importedElements, hasLength(0));
   }
 
-  test_package_multipleInSame() async {
+  Future<void> test_package_multipleInSame() async {
     addPackageFile('foo', 'foo.dart', '''
 class A {
   static String a = '';
@@ -244,7 +244,7 @@
     ]);
   }
 
-  test_package_noPrefix() async {
+  Future<void> test_package_noPrefix() async {
     addPackageFile('foo', 'foo.dart', '''
 class Foo {
   static String first = '';
@@ -263,7 +263,7 @@
     ]);
   }
 
-  test_package_prefix_selected_class() async {
+  Future<void> test_package_prefix_selected_class() async {
     addPackageFile('foo', 'foo.dart', '''
 class Foo {
   static String first = '';
@@ -282,7 +282,7 @@
     ]);
   }
 
-  test_package_prefix_selected_function() async {
+  Future<void> test_package_prefix_selected_function() async {
     addPackageFile('foo', 'foo.dart', '''
 String foo() => '';
 ''');
@@ -299,7 +299,7 @@
     ]);
   }
 
-  test_package_prefix_selected_getter() async {
+  Future<void> test_package_prefix_selected_getter() async {
     addPackageFile('foo', 'foo.dart', '''
 String foo = '';
 ''');
@@ -316,7 +316,7 @@
     ]);
   }
 
-  test_package_prefix_selected_setter() async {
+  Future<void> test_package_prefix_selected_setter() async {
     addPackageFile('foo', 'foo.dart', '''
 String foo = '';
 ''');
@@ -333,7 +333,7 @@
     ]);
   }
 
-  test_package_prefix_unselected() async {
+  Future<void> test_package_prefix_unselected() async {
     addPackageFile('foo', 'foo.dart', '''
 class Foo {
   static String first = '';
@@ -352,7 +352,7 @@
     ]);
   }
 
-  test_package_prefixedAndNot() async {
+  Future<void> test_package_prefixedAndNot() async {
     addPackageFile('foo', 'foo.dart', '''
 class Foo {
   static String first = '';
@@ -374,7 +374,7 @@
     ]);
   }
 
-  test_self() async {
+  Future<void> test_self() async {
     String selection = 'A parent;';
     String content = '''
 class A {
@@ -387,7 +387,7 @@
     ]);
   }
 
-  test_wholeFile_noImports() async {
+  Future<void> test_wholeFile_noImports() async {
     String content = '''
 blankLine() {
   String s = '';
@@ -400,7 +400,7 @@
     ]);
   }
 
-  test_wholeFile_withImports() async {
+  Future<void> test_wholeFile_withImports() async {
     String content = '''
 import 'dart:math';
 bool randomBool() {
diff --git a/pkg/analysis_server/test/src/computer/outline_computer_test.dart b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
index 0da185a..8215a70 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
@@ -13,7 +13,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterOutlineComputerTest);
     defineReflectiveTests(OutlineComputerTest);
@@ -49,7 +49,7 @@
     addFlutterPackage();
   }
 
-  test_columnWithChildren() async {
+  Future<void> test_columnWithChildren() async {
     Outline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
@@ -139,7 +139,7 @@
 
 @reflectiveTest
 class OutlineComputerTest extends AbstractOutlineComputerTest {
-  test_class() async {
+  Future<void> test_class() async {
     Outline unitOutline = await _computeOutline('''
 abstract class A<K, V> {
   int fa, fb;
@@ -384,7 +384,7 @@
     }
   }
 
-  test_enum() async {
+  Future<void> test_enum() async {
     Outline unitOutline = await _computeOutline('''
 enum MyEnum {
   A, B, C
@@ -414,7 +414,7 @@
     }
   }
 
-  test_extension_named() async {
+  Future<void> test_extension_named() async {
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
     Outline unitOutline = await _computeOutline('''
 extension MyExt on String {
@@ -445,7 +445,7 @@
     }
   }
 
-  test_extension_unnamed() async {
+  Future<void> test_extension_unnamed() async {
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
     Outline unitOutline = await _computeOutline('''
 extension on String {
@@ -476,7 +476,7 @@
     }
   }
 
-  test_genericTypeAlias_incomplete() async {
+  Future<void> test_genericTypeAlias_incomplete() async {
     Outline unitOutline = await _computeOutline('''
 typedef F = Object;
 ''');
@@ -496,7 +496,7 @@
     expect(element_F.returnType, '');
   }
 
-  test_genericTypeAlias_minimal() async {
+  Future<void> test_genericTypeAlias_minimal() async {
     Outline unitOutline = await _computeOutline('''
 typedef F = void Function();
 ''');
@@ -516,7 +516,7 @@
     expect(element_F.returnType, 'void');
   }
 
-  test_genericTypeAlias_noReturnType() async {
+  Future<void> test_genericTypeAlias_noReturnType() async {
     Outline unitOutline = await _computeOutline('''
 typedef F = Function();
 ''');
@@ -536,7 +536,7 @@
     expect(element_F.returnType, '');
   }
 
-  test_groupAndTest() async {
+  Future<void> test_groupAndTest() async {
     Outline outline = await _computeOutline('''
 void group(name, closure) {}
 void test(name) {}
@@ -652,7 +652,7 @@
    *
    * https://code.google.com/p/dart/issues/detail?id=21373
    */
-  test_invalidGetterInConstructor() async {
+  Future<void> test_invalidGetterInConstructor() async {
     Outline outline = await _computeOutline('''
 class A {
   A() {
@@ -670,7 +670,7 @@
    *
    * https://github.com/dart-lang/sdk/issues/33228
    */
-  test_invocation_ofParameter() async {
+  Future<void> test_invocation_ofParameter() async {
     Outline outline = await _computeOutline('''
 main(p()) {
   p();
@@ -679,7 +679,7 @@
     expect(outline, isNotNull);
   }
 
-  test_isTest_isTestGroup() async {
+  Future<void> test_isTest_isTestGroup() async {
     addMetaPackage();
     Outline outline = await _computeOutline('''
 import 'package:meta/meta.dart';
@@ -797,7 +797,7 @@
         offset: testCode.indexOf("myTest('test2_2'"));
   }
 
-  test_localFunctions() async {
+  Future<void> test_localFunctions() async {
     Outline unitOutline = await _computeOutline('''
 class A {
   A() {
@@ -952,7 +952,7 @@
     }
   }
 
-  test_mixin() async {
+  Future<void> test_mixin() async {
     Outline unitOutline = await _computeOutline('''
 mixin M<N> {
   c(int d) {}
@@ -1023,7 +1023,7 @@
     }
   }
 
-  test_sourceRanges_fields() async {
+  Future<void> test_sourceRanges_fields() async {
     Outline unitOutline = await _computeOutline('''
 class A {
   int fieldA, fieldB = 2;
@@ -1094,7 +1094,7 @@
     }
   }
 
-  test_sourceRanges_inUnit() async {
+  Future<void> test_sourceRanges_inUnit() async {
     Outline unitOutline = await _computeOutline('''
 /// My first class.
 class A {}
@@ -1133,7 +1133,7 @@
     }
   }
 
-  test_sourceRanges_method() async {
+  Future<void> test_sourceRanges_method() async {
     Outline unitOutline = await _computeOutline('''
 class A {
   int methodA() {}
@@ -1175,7 +1175,7 @@
     }
   }
 
-  test_topLevel() async {
+  Future<void> test_topLevel() async {
     Outline unitOutline = await _computeOutline('''
 typedef String FTA<K, V>(int i, String s);
 typedef FTB(int p);
diff --git a/pkg/analysis_server/test/src/computer/test_all.dart b/pkg/analysis_server/test/src/computer/test_all.dart
index fa0c1a9..8d7653e 100644
--- a/pkg/analysis_server/test/src/computer/test_all.dart
+++ b/pkg/analysis_server/test/src/computer/test_all.dart
@@ -12,7 +12,7 @@
 import 'imported_elements_computer_test.dart' as imported_elements_computer;
 import 'outline_computer_test.dart' as outline_computer;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     closing_labels_computer.main();
     folding_computer.main();
diff --git a/pkg/analysis_server/test/src/domain_abstract_test.dart b/pkg/analysis_server/test/src/domain_abstract_test.dart
index cd94ff6..19f7c97 100644
--- a/pkg/analysis_server/test/src/domain_abstract_test.dart
+++ b/pkg/analysis_server/test/src/domain_abstract_test.dart
@@ -15,7 +15,7 @@
 
 import '../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AbstractRequestHandlerTest);
   });
@@ -23,7 +23,7 @@
 
 @reflectiveTest
 class AbstractRequestHandlerTest extends AbstractAnalysisTest {
-  test_waitForResponses_empty_noTimeout() async {
+  Future<void> test_waitForResponses_empty_noTimeout() async {
     AbstractRequestHandler handler = TestAbstractRequestHandler(server);
     Map<PluginInfo, Future<plugin.Response>> futures =
         <PluginInfo, Future<plugin.Response>>{};
@@ -31,7 +31,7 @@
     expect(responses, isEmpty);
   }
 
-  test_waitForResponses_empty_timeout() async {
+  Future<void> test_waitForResponses_empty_timeout() async {
     AbstractRequestHandler handler = TestAbstractRequestHandler(server);
     Map<PluginInfo, Future<plugin.Response>> futures =
         <PluginInfo, Future<plugin.Response>>{};
@@ -40,7 +40,7 @@
     expect(responses, isEmpty);
   }
 
-  test_waitForResponses_nonEmpty_noTimeout_immediate() async {
+  Future<void> test_waitForResponses_nonEmpty_noTimeout_immediate() async {
     AbstractRequestHandler handler = TestAbstractRequestHandler(server);
     PluginInfo plugin1 = DiscoveredPluginInfo('p1', '', '', null, null);
     PluginInfo plugin2 = DiscoveredPluginInfo('p2', '', '', null, null);
@@ -55,7 +55,7 @@
     expect(responses, unorderedEquals([response1, response2]));
   }
 
-  test_waitForResponses_nonEmpty_noTimeout_withError() async {
+  Future<void> test_waitForResponses_nonEmpty_noTimeout_withError() async {
     AbstractRequestHandler handler = TestAbstractRequestHandler(server);
     PluginInfo plugin1 = DiscoveredPluginInfo('p1', '', '', null, null);
     PluginInfo plugin2 = DiscoveredPluginInfo('p2', '', '', null, null);
@@ -72,7 +72,7 @@
     expect(responses, unorderedEquals([response1]));
   }
 
-  test_waitForResponses_nonEmpty_timeout_someDelayed() async {
+  Future<void> test_waitForResponses_nonEmpty_timeout_someDelayed() async {
     AbstractRequestHandler handler = TestAbstractRequestHandler(server);
     PluginInfo plugin1 = DiscoveredPluginInfo('p1', '', '', null, null);
     PluginInfo plugin2 = DiscoveredPluginInfo('p2', '', '', null, null);
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
index 6e8af8e..9230187 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
@@ -8,7 +8,7 @@
 
 import 'available_suggestions_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AvailableSuggestionSetsTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class AvailableSuggestionSetsTest extends AvailableSuggestionsBase {
-  test_notifications_whenFileChanges() async {
+  Future<void> test_notifications_whenFileChanges() async {
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
@@ -47,7 +47,7 @@
     waitForSetWithUriRemoved(uriStr);
   }
 
-  test_suggestion_class() async {
+  Future<void> test_suggestion_class() async {
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
@@ -109,7 +109,7 @@
 ''');
   }
 
-  test_suggestion_enum() async {
+  Future<void> test_suggestion_enum() async {
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
@@ -189,7 +189,7 @@
 ''');
   }
 
-  test_suggestion_topLevelVariable() async {
+  Future<void> test_suggestion_topLevelVariable() async {
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
index 33d5226..f0bed0b 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
@@ -12,7 +12,7 @@
 
 import 'available_suggestions_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetSuggestionDetailsTest);
   });
@@ -20,7 +20,7 @@
 
 @reflectiveTest
 class GetSuggestionDetailsTest extends AvailableSuggestionsBase {
-  test_enum() async {
+  Future<void> test_enum() async {
     newFile('/home/test/lib/a.dart', content: r'''
 enum MyEnum {
   aaa, bbb
@@ -47,7 +47,7 @@
 ''');
   }
 
-  test_existingImport() async {
+  Future<void> test_existingImport() async {
     addTestFile(r'''
 import 'dart:math';
 
@@ -67,7 +67,7 @@
     _assertEmptyChange(result.change);
   }
 
-  test_existingImport_prefixed() async {
+  Future<void> test_existingImport_prefixed() async {
     addTestFile(r'''
 import 'dart:math' as math;
 
@@ -87,7 +87,7 @@
     _assertEmptyChange(result.change);
   }
 
-  test_invalid_library() async {
+  Future<void> test_invalid_library() async {
     addTestFile('');
 
     var response = await waitResponse(
@@ -96,7 +96,7 @@
     expect(response.error.code, RequestErrorCode.INVALID_PARAMETER);
   }
 
-  test_newImport() async {
+  Future<void> test_newImport() async {
     addTestFile(r'''
 main() {} // ref
 ''');
@@ -118,7 +118,7 @@
 ''');
   }
 
-  test_newImport_part() async {
+  Future<void> test_newImport_part() async {
     var partCode = r'''
 part of 'test.dart';
 
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
index d9f168d..b1a06be 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
@@ -8,7 +8,7 @@
 
 import 'available_suggestions_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExistingImportsNotification);
     defineReflectiveTests(GetSuggestionAvailableTest);
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class ExistingImportsNotification extends GetSuggestionsBase {
-  test_dart() async {
+  Future<void> test_dart() async {
     addTestFile(r'''
 import 'dart:math';
 ''');
@@ -25,7 +25,7 @@
     _assertHasImport('dart:math', 'dart:math', 'Random');
   }
 
-  test_invalidUri() async {
+  Future<void> test_invalidUri() async {
     addTestFile(r'''
 import 'ht:';
 ''');
@@ -54,7 +54,7 @@
 
 @reflectiveTest
 class GetSuggestionAvailableTest extends GetSuggestionsBase {
-  test_dart() async {
+  Future<void> test_dart() async {
     addTestFile('');
     var mathSet = await waitForSetWithUri('dart:math');
     var asyncSet = await waitForSetWithUri('dart:async');
@@ -67,7 +67,7 @@
     expect(includedIdSet, contains(asyncSet.id));
   }
 
-  test_dart_instanceCreationExpression() async {
+  Future<void> test_dart_instanceCreationExpression() async {
     addTestFile(r'''
 main() {
   new ; // ref
@@ -88,7 +88,7 @@
     expect(includedIdSet, contains(asyncSet.id));
   }
 
-  test_defaultArgumentListString() async {
+  Future<void> test_defaultArgumentListString() async {
     newFile('/home/test/lib/a.dart', content: r'''
 void fff(int aaa, int bbb) {}
 
@@ -106,7 +106,7 @@
     expect(ggg.defaultArgumentListTextRanges, [5, 4, 16, 4]);
   }
 
-  test_displayUri_file() async {
+  Future<void> test_displayUri_file() async {
     var aPath = '/home/test/test/a.dart';
     newFile(aPath, content: 'class A {}');
 
@@ -123,7 +123,7 @@
     );
   }
 
-  test_displayUri_package() async {
+  Future<void> test_displayUri_package() async {
     var aPath = '/home/test/lib/a.dart';
     newFile(aPath, content: 'class A {}');
 
@@ -139,7 +139,7 @@
     );
   }
 
-  test_includedElementKinds_type() async {
+  Future<void> test_includedElementKinds_type() async {
     addTestFile(r'''
 class X extends {} // ref
 ''');
@@ -161,7 +161,7 @@
     );
   }
 
-  test_includedElementKinds_value() async {
+  Future<void> test_includedElementKinds_value() async {
     addTestFile(r'''
 main() {
   print(); // ref
@@ -190,7 +190,7 @@
     );
   }
 
-  test_inHtml() async {
+  Future<void> test_inHtml() async {
     newFile('/home/test/lib/a.dart', content: 'class A {}');
 
     var path = convertPath('/home/test/doc/a.html');
@@ -201,7 +201,7 @@
     );
   }
 
-  test_relevanceTags_enum() async {
+  Future<void> test_relevanceTags_enum() async {
     newFile('/home/test/lib/a.dart', content: r'''
 enum MyEnum {
   aaa, bbb
@@ -230,7 +230,7 @@
 ''');
   }
 
-  test_relevanceTags_location_argumentList_named() async {
+  Future<void> test_relevanceTags_location_argumentList_named() async {
     addTestFile(r'''
 void foo({int a, String b}) {}
 
@@ -254,7 +254,7 @@
 ''');
   }
 
-  test_relevanceTags_location_argumentList_positional() async {
+  Future<void> test_relevanceTags_location_argumentList_positional() async {
     addTestFile(r'''
 void foo(double a) {}
 
@@ -278,7 +278,7 @@
 ''');
   }
 
-  test_relevanceTags_location_assignment() async {
+  Future<void> test_relevanceTags_location_assignment() async {
     addTestFile(r'''
 main() {
   int v;
@@ -301,7 +301,7 @@
 ''');
   }
 
-  test_relevanceTags_location_initializer() async {
+  Future<void> test_relevanceTags_location_initializer() async {
     addTestFile(r'''
 int v = // ref;
 ''');
@@ -321,7 +321,7 @@
 ''');
   }
 
-  test_relevanceTags_location_listLiteral() async {
+  Future<void> test_relevanceTags_location_listLiteral() async {
     addTestFile(r'''
 main() {
   var v = [0, ]; // ref
diff --git a/pkg/analysis_server/test/src/domains/completion/test_all.dart b/pkg/analysis_server/test/src/domains/completion/test_all.dart
index 066f43c..1452e21 100644
--- a/pkg/analysis_server/test/src/domains/completion/test_all.dart
+++ b/pkg/analysis_server/test/src/domains/completion/test_all.dart
@@ -8,7 +8,7 @@
 import 'get_suggestion_details_test.dart' as get_suggestion_details;
 import 'get_suggestions_available_test.dart' as get_suggestions_available;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     available_suggestion_sets.main();
     get_suggestion_details.main();
diff --git a/pkg/analysis_server/test/src/domains/execution/completion_test.dart b/pkg/analysis_server/test/src/domains/execution/completion_test.dart
index 8507c09..a083383 100644
--- a/pkg/analysis_server/test/src/domains/execution/completion_test.dart
+++ b/pkg/analysis_server/test/src/domains/execution/completion_test.dart
@@ -11,7 +11,7 @@
 
 import '../../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RuntimeCompletionComputerTest);
   });
@@ -87,7 +87,7 @@
     return null;
   }
 
-  test_class_fields() async {
+  Future<void> test_class_fields() async {
     addContextFile(r'''
 class A {
   int a;
@@ -105,7 +105,7 @@
     assertSuggested('c', returnType: 'double');
   }
 
-  test_class_methods() async {
+  Future<void> test_class_methods() async {
     addContextFile(r'''
 class A {
   int a() => null;
@@ -122,7 +122,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_inPart() async {
+  Future<void> test_inPart() async {
     addSource('/home/test/lib/a.dart', r'''
 part 'b.dart';
 part 'context.dart';
@@ -149,7 +149,7 @@
     assertSuggested('c', returnType: 'String');
   }
 
-  test_locals_block() async {
+  Future<void> test_locals_block() async {
     addContextFile(r'''
 class A {
   int foo;
@@ -169,7 +169,7 @@
     assertSuggested('foo');
   }
 
-  test_locals_block_codeWithClosure() async {
+  Future<void> test_locals_block_codeWithClosure() async {
     addContextFile(r'''
 main() {
   var items = <String>[];
@@ -180,7 +180,7 @@
     assertSuggested('toUpperCase');
   }
 
-  test_locals_block_nested() async {
+  Future<void> test_locals_block_nested() async {
     addContextFile(r'''
 void main() {
   var a = 0;
@@ -200,7 +200,7 @@
     assertNotSuggested('c');
   }
 
-  test_locals_for() async {
+  Future<void> test_locals_for() async {
     addContextFile(r'''
 void main(List<int> intItems, List<double> doubleItems) {
   for (var a = 0, b = 0.0; a < 5; a++) {
@@ -213,7 +213,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_locals_forEach() async {
+  Future<void> test_locals_forEach() async {
     addContextFile(r'''
 void main(List<int> intItems, List<double> doubleItems) {
   for (var a in intItems) {
@@ -228,7 +228,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_parameters_constructor() async {
+  Future<void> test_parameters_constructor() async {
     addContextFile(r'''
 class C {
   C(int a, double b) {
@@ -241,7 +241,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_parameters_function() async {
+  Future<void> test_parameters_function() async {
     addContextFile(r'''
 void main(int a, double b) {
   // context line
@@ -252,7 +252,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_parameters_function_locals() async {
+  Future<void> test_parameters_function_locals() async {
     addContextFile(r'''
 void main(int a, int b) {
   String a;
@@ -266,7 +266,7 @@
     assertSuggested('c', returnType: 'double');
   }
 
-  test_parameters_function_nested() async {
+  Future<void> test_parameters_function_nested() async {
     addContextFile(r'''
 void foo(int a, double b) {
   void bar(String a, bool c) {
@@ -280,7 +280,7 @@
     assertSuggested('c', returnType: 'bool');
   }
 
-  test_parameters_functionExpression() async {
+  Future<void> test_parameters_functionExpression() async {
     addContextFile(r'''
 void main(List<int> intItems, List<double> doubleItems) {
   intItems.forEach((a) {
@@ -295,7 +295,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_parameters_method() async {
+  Future<void> test_parameters_method() async {
     addContextFile(r'''
 class C {
   void main(int a, double b) {
@@ -308,7 +308,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_parameters_method_locals() async {
+  Future<void> test_parameters_method_locals() async {
     addContextFile(r'''
 class C {
   void main(int a, int b) {
@@ -324,7 +324,7 @@
     assertSuggested('c', returnType: 'double');
   }
 
-  test_syntheticImportPrefix() async {
+  Future<void> test_syntheticImportPrefix() async {
     newFile('/test/lib/a.dart', content: 'class A {}');
     newFile('/test/lib/b.dart', content: 'class B {}');
     addContextFile(r'''
@@ -342,7 +342,7 @@
     }
   }
 
-  test_topLevelFunctions() async {
+  Future<void> test_topLevelFunctions() async {
     addContextFile(r'''
 int a() => null;
 double b() => null;
@@ -355,7 +355,7 @@
     assertSuggested('b', returnType: 'double');
   }
 
-  test_topLevelVariables() async {
+  Future<void> test_topLevelVariables() async {
     addContextFile(r'''
 int a;
 double b;
diff --git a/pkg/analysis_server/test/src/domains/execution/test_all.dart b/pkg/analysis_server/test/src/domains/execution/test_all.dart
index cde2384..1cbd9d3 100644
--- a/pkg/analysis_server/test/src/domains/execution/test_all.dart
+++ b/pkg/analysis_server/test/src/domains/execution/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'completion_test.dart' as completion_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     completion_test.main();
   });
diff --git a/pkg/analysis_server/test/src/domains/flutter/get_widget_description_test.dart b/pkg/analysis_server/test/src/domains/flutter/get_widget_description_test.dart
index 9a319ca..45affaa 100644
--- a/pkg/analysis_server/test/src/domains/flutter/get_widget_description_test.dart
+++ b/pkg/analysis_server/test/src/domains/flutter/get_widget_description_test.dart
@@ -8,7 +8,7 @@
 
 import 'base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetWidgetDescriptionTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class GetWidgetDescriptionTest extends FlutterBase {
-  test_kind_required() async {
+  Future<void> test_kind_required() async {
     addTestFile(r'''
 import 'package:flutter/material.dart';
 
@@ -35,7 +35,7 @@
     expect(property.value.stringValue, 'aaa');
   }
 
-  test_notInstanceCreation() async {
+  Future<void> test_notInstanceCreation() async {
     addTestFile(r'''
 void main() {
   42;
@@ -49,7 +49,7 @@
     );
   }
 
-  test_unresolvedInstanceCreation() async {
+  Future<void> test_unresolvedInstanceCreation() async {
     addTestFile(r'''
 void main() {
   new Foo();
diff --git a/pkg/analysis_server/test/src/domains/flutter/set_property_value_test.dart b/pkg/analysis_server/test/src/domains/flutter/set_property_value_test.dart
index 8306d1e..6475882 100644
--- a/pkg/analysis_server/test/src/domains/flutter/set_property_value_test.dart
+++ b/pkg/analysis_server/test/src/domains/flutter/set_property_value_test.dart
@@ -8,7 +8,7 @@
 
 import 'base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetPropertyValueTest);
   });
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class SetPropertyValueTest extends FlutterBase {
-  test_named_add() async {
+  Future<void> test_named_add() async {
     addTestFile(r'''
 import 'package:flutter/material.dart';
 
@@ -45,7 +45,7 @@
 ''');
   }
 
-  test_named_change() async {
+  Future<void> test_named_change() async {
     addTestFile(r'''
 import 'package:flutter/material.dart';
 
@@ -71,7 +71,7 @@
 ''');
   }
 
-  test_named_remove() async {
+  Future<void> test_named_remove() async {
     addTestFile(r'''
 import 'package:flutter/material.dart';
 
@@ -94,7 +94,7 @@
 ''');
   }
 
-  test_required_change() async {
+  Future<void> test_required_change() async {
     addTestFile(r'''
 import 'package:flutter/material.dart';
 
diff --git a/pkg/analysis_server/test/src/domains/flutter/test_all.dart b/pkg/analysis_server/test/src/domains/flutter/test_all.dart
index d25b982..2030531 100644
--- a/pkg/analysis_server/test/src/domains/flutter/test_all.dart
+++ b/pkg/analysis_server/test/src/domains/flutter/test_all.dart
@@ -7,7 +7,7 @@
 import 'get_widget_description_test.dart' as get_widget_description;
 import 'set_property_value_test.dart' as set_property_value;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     get_widget_description.main();
     set_property_value.main();
diff --git a/pkg/analysis_server/test/src/domains/test_all.dart b/pkg/analysis_server/test/src/domains/test_all.dart
index 5e6917d..dac4cfe 100644
--- a/pkg/analysis_server/test/src/domains/test_all.dart
+++ b/pkg/analysis_server/test/src/domains/test_all.dart
@@ -8,7 +8,7 @@
 import 'execution/test_all.dart' as execution;
 import 'flutter/test_all.dart' as flutter;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     completion.main();
     execution.main();
diff --git a/pkg/analysis_server/test/src/edit/fix/non_nullable_fix_test.dart b/pkg/analysis_server/test/src/edit/fix/non_nullable_fix_test.dart
index c4a53fe..a485d89 100644
--- a/pkg/analysis_server/test/src/edit/fix/non_nullable_fix_test.dart
+++ b/pkg/analysis_server/test/src/edit/fix/non_nullable_fix_test.dart
@@ -14,7 +14,7 @@
 
 import '../../../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NonNullableFixTest);
   });
@@ -30,6 +30,13 @@
 
   String get nextRequestId => (++requestId).toString();
 
+  /// On Windows, canonicalization results in changing a drive letter to be
+  /// lowercase. When a path is canonicalized in [NonNullableFix], and asserted
+  /// on in a test below, the expected path below also needs to be
+  /// canonicalized.
+  String canonicalizeAndConvertPath(String p) =>
+      convertPath(context.canonicalize(p));
+
   Future<EditDartfixResult> performFix({List<String> included}) async {
     final id = nextRequestId;
     final params = EditDartfixParams(included);
@@ -71,59 +78,75 @@
     listener = DartFixListener(server);
   }
 
-  test_included_multipleRelativeDirectories() async {
+  Future<void> test_included_multipleRelativeDirectories() async {
     NonNullableFix fix = NonNullableFix(listener, included: ['lib', 'test']);
-    expect(fix.includedRoot, equals(convertPath('/project')));
+    expect(fix.includedRoot, equals(canonicalizeAndConvertPath('/project')));
   }
 
-  test_included_multipleRelativeDirectories_nonCanonical() async {
-    NonNullableFix fix = NonNullableFix(listener,
-        included: ['../project2/lib', '../project2/lib/src']);
-    expect(fix.includedRoot, equals(convertPath('/project2/lib')));
+  Future<void> test_included_multipleRelativeDirectories_nonCanonical() async {
+    NonNullableFix fix = NonNullableFix(listener, included: [
+      convertPath('../project2/lib'),
+      convertPath('../project2/lib/src')
+    ]);
+    expect(
+        fix.includedRoot, equals(canonicalizeAndConvertPath('/project2/lib')));
   }
 
-  test_included_multipleRelativeDirectories_nonCanonical_atFilesystemRoot() async {
-    NonNullableFix fix = NonNullableFix(listener,
-        included: ['../project2/lib', '../project/lib']);
-    expect(fix.includedRoot, equals(convertPath('/')));
+  Future<void>
+      test_included_multipleRelativeDirectories_nonCanonical_atRoot() async {
+    NonNullableFix fix = NonNullableFix(listener, included: [
+      convertPath('../project2/lib'),
+      convertPath('../project/lib')
+    ]);
+    expect(fix.includedRoot, equals(canonicalizeAndConvertPath('/')));
   }
 
-  test_included_multipleRelativeDirectories_subAndSuperDirectories() async {
+  Future<void>
+      test_included_multipleRelativeDirectories_subAndSuperDirectories() async {
     NonNullableFix fix = NonNullableFix(listener, included: ['lib', '.']);
-    expect(fix.includedRoot, equals(convertPath('/project')));
+    expect(fix.includedRoot, equals(canonicalizeAndConvertPath('/project')));
   }
 
-  test_included_multipleRelativeFiles() async {
-    NonNullableFix fix =
-        NonNullableFix(listener, included: ['lib/lib1.dart', 'test/test.dart']);
-    expect(fix.includedRoot, equals(convertPath('/project')));
+  Future<void> test_included_multipleRelativeFiles() async {
+    NonNullableFix fix = NonNullableFix(listener, included: [
+      convertPath('lib/lib1.dart'),
+      convertPath('test/test.dart')
+    ]);
+    expect(fix.includedRoot, equals(canonicalizeAndConvertPath('/project')));
   }
 
-  test_included_multipleRelativeFiles_sameDirectory() async {
-    NonNullableFix fix =
-        NonNullableFix(listener, included: ['lib/lib1.dart', 'lib/lib2.dart']);
-    expect(fix.includedRoot, equals(convertPath('/project/lib')));
-  }
-
-  test_included_multipleRelativeFilesAndDirectories() async {
+  Future<void> test_included_multipleRelativeFiles_sameDirectory() async {
     NonNullableFix fix = NonNullableFix(listener,
-        included: ['lib/lib1.dart', 'lib/src', '../project/lib/src/lib3.dart']);
-    expect(fix.includedRoot, equals(convertPath('/project/lib')));
+        included: [convertPath('lib/lib1.dart'), convertPath('lib/lib2.dart')]);
+    expect(
+        fix.includedRoot, equals(canonicalizeAndConvertPath('/project/lib')));
   }
 
-  test_included_singleAbsoluteDirectory() async {
-    NonNullableFix fix = NonNullableFix(listener, included: ['/project']);
-    expect(fix.includedRoot, equals(convertPath('/project')));
+  Future<void> test_included_multipleRelativeFilesAndDirectories() async {
+    NonNullableFix fix = NonNullableFix(listener, included: [
+      convertPath('lib/lib1.dart'),
+      convertPath('lib/src'),
+      convertPath('../project/lib/src/lib3.dart')
+    ]);
+    expect(
+        fix.includedRoot, equals(canonicalizeAndConvertPath('/project/lib')));
   }
 
-  test_included_singleAbsoluteFile() async {
+  Future<void> test_included_singleAbsoluteDirectory() async {
     NonNullableFix fix =
-        NonNullableFix(listener, included: ['/project/bin/bin.dart']);
-    expect(fix.includedRoot, equals(convertPath('/project/bin')));
+        NonNullableFix(listener, included: [convertPath('/project')]);
+    expect(fix.includedRoot, equals(canonicalizeAndConvertPath('/project')));
   }
 
-  test_included_singleRelativeDirectory() async {
+  Future<void> test_included_singleAbsoluteFile() async {
+    NonNullableFix fix = NonNullableFix(listener,
+        included: [convertPath('/project/bin/bin.dart')]);
+    expect(
+        fix.includedRoot, equals(canonicalizeAndConvertPath('/project/bin')));
+  }
+
+  Future<void> test_included_singleRelativeDirectory() async {
     NonNullableFix fix = NonNullableFix(listener, included: ['.']);
-    expect(fix.includedRoot, equals(convertPath('/project')));
+    expect(fix.includedRoot, equals(canonicalizeAndConvertPath('/project')));
   }
 }
diff --git a/pkg/analysis_server/test/src/edit/fix/test_all.dart b/pkg/analysis_server/test/src/edit/fix/test_all.dart
index 1bf972c..3d33c83 100644
--- a/pkg/analysis_server/test/src/edit/fix/test_all.dart
+++ b/pkg/analysis_server/test/src/edit/fix/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'non_nullable_fix_test.dart' as non_nullable_fix;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     non_nullable_fix.main();
   }, name: 'fix');
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart
index 79735da..8883e30 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart
@@ -13,7 +13,7 @@
 import '../../../analysis_abstract.dart';
 import 'nnbd_migration_test_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(BuildEnclosingMemberDescriptionTest);
     defineReflectiveTests(InfoBuilderTest);
@@ -31,7 +31,7 @@
         .getResolvedUnit(testFile);
   }
 
-  test_classConstructor_named() async {
+  Future<void> test_classConstructor_named() async {
     addTestFile(r'''
 class C {
   C.aaa();
@@ -44,7 +44,7 @@
         equals("the constructor 'C.aaa'"));
   }
 
-  test_classConstructor_unnamed() async {
+  Future<void> test_classConstructor_unnamed() async {
     addTestFile(r'''
 class C {
   C();
@@ -57,7 +57,7 @@
         equals("the default constructor of 'C'"));
   }
 
-  test_classGetter() async {
+  Future<void> test_classGetter() async {
     addTestFile(r'''
 class C {
   int get aaa => 7;
@@ -70,7 +70,7 @@
         equals("the getter 'C.aaa'"));
   }
 
-  test_classMethod() async {
+  Future<void> test_classMethod() async {
     addTestFile(r'''
 class C {
   int aaa() => 7;
@@ -83,7 +83,7 @@
         equals("the method 'C.aaa'"));
   }
 
-  test_classOperator() async {
+  Future<void> test_classOperator() async {
     addTestFile(r'''
 class C {
   bool operator ==(Object other) => false;
@@ -96,7 +96,7 @@
         equals("the operator 'C.=='"));
   }
 
-  test_classSetter() async {
+  Future<void> test_classSetter() async {
     addTestFile(r'''
 class C {
   void set aaa(value) {}
@@ -109,7 +109,7 @@
         equals("the setter 'C.aaa='"));
   }
 
-  test_extensionMethod() async {
+  Future<void> test_extensionMethod() async {
     addTestFile(r'''
 extension E on List {
   int aaa() => 7;
@@ -122,7 +122,7 @@
         equals("the method 'E.aaa'"));
   }
 
-  test_extensionMethod_unnamed() async {
+  Future<void> test_extensionMethod_unnamed() async {
     addTestFile(r'''
 extension on List {
   int aaa() => 7;
@@ -135,7 +135,7 @@
         equals("the method 'aaa' in unnamed extension on List<dynamic>"));
   }
 
-  test_mixinMethod() async {
+  Future<void> test_mixinMethod() async {
     addTestFile(r'''
 mixin C {
   int aaa() => 7;
@@ -148,7 +148,7 @@
         equals("the method 'C.aaa'"));
   }
 
-  test_topLevelFunction() async {
+  Future<void> test_topLevelFunction() async {
     addTestFile(r'''
 void aaa(value) {}
 ''');
@@ -158,7 +158,7 @@
         equals("the function 'aaa'"));
   }
 
-  test_topLevelGetter() async {
+  Future<void> test_topLevelGetter() async {
     addTestFile(r'''
 int get aaa => 7;
 ''');
@@ -168,7 +168,7 @@
         equals("the getter 'aaa'"));
   }
 
-  test_topLevelSetter() async {
+  Future<void> test_topLevelSetter() async {
     addTestFile(r'''
 void set aaa(value) {}
 ''');
@@ -237,7 +237,7 @@
     }
   }
 
-  test_asExpression() async {
+  Future<void> test_asExpression() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f([num a]) {
   int b = a as int;
@@ -260,7 +260,7 @@
         details: ['The value of the expression is nullable']);
   }
 
-  test_asExpression_insideReturn() async {
+  Future<void> test_asExpression_insideReturn() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 int f([num a]) {
   return a as int;
@@ -280,7 +280,7 @@
         details: ['The value of the expression is nullable']);
   }
 
-  test_discardCondition() async {
+  Future<void> test_discardCondition() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void g(int i) {
   print(i.isEven);
@@ -298,7 +298,7 @@
     assertRegion(region: regions[1], offset: 55, length: 3);
   }
 
-  test_discardElse() async {
+  Future<void> test_discardElse() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void g(int i) {
   print(i.isEven);
@@ -320,7 +320,7 @@
     assertRegion(region: regions[3], offset: 101, length: 3);
   }
 
-  test_dynamicValueIsUsed() async {
+  Future<void> test_dynamicValueIsUsed() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 bool f(int i) {
   if (i == null) return true;
@@ -352,7 +352,7 @@
     assertEdit(edit: edits[1], offset: 10, replacement: '/*?*/');
   }
 
-  test_exactNullable() async {
+  Future<void> test_exactNullable() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(List<int> list) {
   list[0] = null;
@@ -382,7 +382,7 @@
         details: ['This is later required to accept null.']);
   }
 
-  test_exactNullable_exactNullable() async {
+  Future<void> test_exactNullable_exactNullable() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void g(List<int> list1, List<int> list2) {
   list1[0] = null;
@@ -409,7 +409,7 @@
         details: ["A nullable value is assigned in the function 'g'"]);
   }
 
-  test_expressionFunctionReturnTarget() async {
+  Future<void> test_expressionFunctionReturnTarget() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 String g() => 1 == 2 ? "Hello" : null;
 ''', migratedContent: '''
@@ -426,7 +426,7 @@
     assertDetail(detail: regions[0].details[0], offset: 11, length: 2);
   }
 
-  test_field_fieldFormalInitializer_optional() async {
+  Future<void> test_field_fieldFormalInitializer_optional() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int _f;
@@ -446,7 +446,7 @@
     ]);
   }
 
-  test_field_fieldFormalInitializer_optional_defaultNull() async {
+  Future<void> test_field_fieldFormalInitializer_optional_defaultNull() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int _f;
@@ -466,7 +466,7 @@
     ]);
   }
 
-  test_field_fieldFormalInitializer_required() async {
+  Future<void> test_field_fieldFormalInitializer_required() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int _f;
@@ -494,7 +494,7 @@
     ]);
   }
 
-  test_field_initializer() async {
+  Future<void> test_field_initializer() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int _f = null;
@@ -518,7 +518,7 @@
         details: ['This field is initialized to a nullable value']);
   }
 
-  test_fieldLaterAssignedNullable() async {
+  Future<void> test_fieldLaterAssignedNullable() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class Foo {
   int value = 7;
@@ -544,7 +544,179 @@
     assertDetail(detail: region.details[0], offset: 56, length: 4);
   }
 
-  test_insertedRequired_fieldFormal() async {
+  Future<void> test_functionType_nullable_asArgument() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+class C {
+  f(void Function(int) cb1) {}
+  g(void Function(int) cb2) {
+    f(cb2);
+  }
+  h() => f(null);
+}
+''', migratedContent: '''
+class C {
+  f(void Function(int)? cb1) {}
+  g(void Function(int) cb2) {
+    f(cb2);
+  }
+  h() => f(null);
+}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(1));
+    assertRegion(
+        region: regions[0],
+        offset: 32,
+        details: ["An explicit 'null' is passed as an argument"]);
+    assertDetail(detail: regions[0].details[0], offset: 98, length: 4);
+  }
+
+  Future<void> test_functionType_nullableParameter_asArgument() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+class C {
+  f(void Function(int) cb1) {
+    cb1(null);
+  }
+  g(void Function(int) cb2) {
+    f(cb2);
+  }
+}
+''', migratedContent: '''
+class C {
+  f(void Function(int?) cb1) {
+    cb1(null);
+  }
+  g(void Function(int?) cb2) {
+    f(cb2);
+  }
+}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(2));
+    assertRegion(
+        region: regions[0],
+        offset: 31,
+        details: ["An explicit 'null' is passed as an argument"]);
+    assertRegion(region: regions[1], offset: 81, details: [
+      'The function-typed element in which this parameter is declared is '
+          'assigned to a function whose matching parameter is nullable'
+    ]);
+    assertDetail(detail: regions[1].details[0], offset: 95, length: 3);
+  }
+
+  Future<void> test_functionType_nullableParameter_assignment() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+class C {
+  void Function(int) _cb = (x) {};
+  f(void Function(int) cb) {
+    _cb = cb;
+  }
+  g() => _cb(null);
+}
+''', migratedContent: '''
+class C {
+  void Function(int?) _cb = (x) {};
+  f(void Function(int?) cb) {
+    _cb = cb;
+  }
+  g() => _cb(null);
+}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(2));
+    // regions[0] is `void Function(int?) _cb`.
+    assertRegion(region: regions[1], offset: 67, details: [
+      'The function-typed element in which this parameter is declared is '
+          'assigned to a function whose matching parameter is nullable'
+    ]);
+    assertDetail(detail: regions[1].details[0], offset: 84, length: 2);
+  }
+
+  Future<void> test_functionType_nullableParameter_fieldInitializer() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+class C {
+  void Function(int) _cb;
+  C(void Function(int) cb): _cb = cb;
+  f() => _cb(null);
+}
+''', migratedContent: '''
+class C {
+  void Function(int?) _cb;
+  C(void Function(int?) cb): _cb = cb;
+  f() => _cb(null);
+}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(2));
+    assertRegion(
+        region: regions[0],
+        offset: 29,
+        details: ["An explicit 'null' is passed as an argument"]);
+    assertRegion(region: regions[1], offset: 58, details: [
+      'The function-typed element in which this parameter is declared is '
+          'assigned to a function whose matching parameter is nullable'
+    ]);
+    assertDetail(detail: regions[1].details[0], offset: 70, length: 2);
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/40034')
+  Future<void> test_functionType_nullableParameter_typedef() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+typedef Cb = void Function(int);
+class C {
+  Cb _cb;
+  C(void Function(int) cb): _cb = cb;
+  f() => _cb(null);
+}
+''', migratedContent: '''
+typedef Cb = void Function(int?);
+class C {
+  Cb _cb;
+  C(void Function(int?) cb): _cb = cb;
+  f() => _cb(null);
+}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(2));
+    // regions[0] is `typedef Cb = void Function(int?);`.
+    assertRegion(region: regions[1], offset: 75, details: [
+      'The function-typed element in which this parameter is declared is '
+          'assigned to a function whose matching parameter is nullable'
+    ]);
+    assertDetail(detail: regions[1].details[0], offset: 70, length: 2);
+  }
+
+  Future<void> test_functionType_nullableReturn() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+class C {
+  int Function() _cb = () => 7;
+  f(int Function() cb) {
+    _cb = cb;
+  }
+  g() {
+    f(() => null);
+  }
+}
+''', migratedContent: '''
+class C {
+  int? Function() _cb = () => 7;
+  f(int? Function() cb) {
+    _cb = cb;
+  }
+  g() {
+    f(() => null);
+  }
+}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(2));
+    assertRegion(region: regions[0], offset: 15, details: [
+      'A function-typed value with a nullable return type is assigned'
+    ]);
+    assertDetail(detail: regions[0].details[0], offset: 77, length: 2);
+  }
+
+  Future<void> test_insertedRequired_fieldFormal() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class C {
   int level;
@@ -570,7 +742,7 @@
         edit: edits[0], offset: 42, length: 0, replacement: '@required ');
   }
 
-  test_insertedRequired_parameter() async {
+  Future<void> test_insertedRequired_parameter() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class C {
   int level;
@@ -596,7 +768,7 @@
     // regions[2] is the `level!` fix.
   }
 
-  test_insertParens() async {
+  Future<void> test_insertParens() async {
     var originalContent = '''
 class C {
   C operator+(C c) => null;
@@ -625,7 +797,7 @@
         details: ['This value must be null-checked before use here.']);
   }
 
-  test_listAndSetLiteralTypeArgument() async {
+  Future<void> test_listAndSetLiteralTypeArgument() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   String s = null;
@@ -654,7 +826,7 @@
     assertDetail(detail: regions[2].details[0], offset: 90, length: 1);
   }
 
-  test_listConstructor_length() async {
+  Future<void> test_listConstructor_length() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   List<int> list = List<int>(10);
@@ -668,13 +840,13 @@
     expect(regions, hasLength(2));
     // regions[0] is `num? a`.
     assertRegion(region: regions[1], offset: 39, details: [
-      'List value type must be nullable because a length is specified,'
-          ' and the list items are initialized as null.'
+      'A length is specified in the "List()" constructor and the list items '
+          'are initialized to null'
     ]);
   }
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/40064')
-  test_listConstructor_length_implicitType() async {
+  Future<void> test_listConstructor_length_implicitType() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   List<int> list = List(10);
@@ -693,7 +865,7 @@
     ]);
   }
 
-  test_listLiteralTypeArgument_collectionIf() async {
+  Future<void> test_listLiteralTypeArgument_collectionIf() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   String s = null;
@@ -721,7 +893,7 @@
     assertDetail(detail: regions[1].details[0], offset: 79, length: 1);
   }
 
-  test_localVariable() async {
+  Future<void> test_localVariable() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   int v1 = null;
@@ -745,7 +917,7 @@
         details: ['This variable is initialized to a nullable value']);
   }
 
-  test_mapLiteralTypeArgument() async {
+  Future<void> test_mapLiteralTypeArgument() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   String s = null;
@@ -774,7 +946,7 @@
     assertDetail(detail: regions[2].details[0], offset: 128, length: 1);
   }
 
-  test_namedParameterWithDefault_fromOverridden_explicit() async {
+  Future<void> test_namedParameterWithDefault_fromOverridden_explicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   void m({int p = 0}) {}
@@ -805,7 +977,7 @@
     assertDetail(detail: regions[1].details[0], offset: 20, length: 3);
   }
 
-  test_nonNullableType_assert() async {
+  Future<void> test_nonNullableType_assert() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(String s) {
   assert(s != null);
@@ -824,7 +996,7 @@
         details: ['This value is asserted to be non-null']);
   }
 
-  test_nonNullableType_exclamationComment() async {
+  Future<void> test_nonNullableType_exclamationComment() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(String /*!*/ s) {}
 ''', migratedContent: '''
@@ -837,7 +1009,7 @@
     ]);
   }
 
-  test_nonNullableType_unconditionalFieldAccess() async {
+  Future<void> test_nonNullableType_unconditionalFieldAccess() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(String s) {
   print(s.length);
@@ -854,7 +1026,7 @@
     ]);
   }
 
-  test_nullCheck_onMemberAccess() async {
+  Future<void> test_nullCheck_onMemberAccess() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class C {
   int value;
@@ -883,7 +1055,7 @@
     assertEdit(edit: edits[0], offset: 64, length: 0, replacement: '/*!*/');
   }
 
-  test_nullCheck_onMethodCall() async {
+  Future<void> test_nullCheck_onMethodCall() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class C {
   int value;
@@ -909,7 +1081,7 @@
     ]);
   }
 
-  test_parameter_fromInvocation_explicit() async {
+  Future<void> test_parameter_fromInvocation_explicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(String s) {}
 void g() {
@@ -929,7 +1101,7 @@
         details: ["An explicit 'null' is passed as an argument"]);
   }
 
-  test_parameter_fromInvocation_implicit() async {
+  Future<void> test_parameter_fromInvocation_implicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(String s) {}
 void g(p) {
@@ -950,7 +1122,7 @@
     ]);
   }
 
-  test_parameter_fromMultipleOverridden_explicit() async {
+  Future<void> test_parameter_fromMultipleOverridden_explicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   void m(int p) {}
@@ -991,7 +1163,7 @@
     assertDetail(detail: regions[2].details[0], offset: 60, length: 3);
   }
 
-  test_parameter_fromMultipleOverridden_implicit() async {
+  Future<void> test_parameter_fromMultipleOverridden_implicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   void m(int p) {}
@@ -1028,7 +1200,7 @@
   }
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/39378')
-  test_parameter_fromOverridden_implicit() async {
+  Future<void> test_parameter_fromOverridden_implicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   void m(p) {}
@@ -1054,7 +1226,7 @@
         details: ['A nullable value is assigned']);
   }
 
-  test_parameter_fromOverriddenField_explicit() async {
+  Future<void> test_parameter_fromOverriddenField_explicit() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int m;
@@ -1087,7 +1259,7 @@
     assertDetail(detail: regions[1].details[0], offset: 12, length: 3);
   }
 
-  test_parameter_named_omittedInCall() async {
+  Future<void> test_parameter_named_omittedInCall() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() { g(); }
 
@@ -1100,13 +1272,35 @@
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(1));
     assertRegion(region: regions[0], offset: 30, details: [
-      'This named parameter was omitted in a call to this function',
+      'This named parameter is omitted in a call to this function',
       "This parameter has an implicit default value of 'null'",
     ]);
     assertDetail(detail: regions[0].details[0], offset: 11, length: 3);
   }
 
-  test_parameter_optional_explicitDefault_null() async {
+  Future<void> test_parameter_named_omittedInCall_inArgumentList() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('''
+int f({int compare}) => 7
+void g() {
+  h(f());
+}
+void h(int x) {}
+''', migratedContent: '''
+int f({int? compare}) => 7
+void g() {
+  h(f());
+}
+void h(int x) {}
+''');
+    List<RegionInfo> regions = unit.fixRegions;
+    expect(regions, hasLength(1));
+    assertRegion(region: regions[0], offset: 10, details: [
+      "This parameter has an implicit default value of 'null'",
+      'This named parameter is omitted in a call to this function'
+    ]);
+  }
+
+  Future<void> test_parameter_optional_explicitDefault_null() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f({String s = null}) {}
 ''', migratedContent: '''
@@ -1120,7 +1314,7 @@
         details: ["This parameter has an explicit default value of 'null'"]);
   }
 
-  test_parameter_optional_explicitDefault_nullable() async {
+  Future<void> test_parameter_optional_explicitDefault_nullable() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 String sd = null;
 void f({String s = sd}) {}
@@ -1136,7 +1330,7 @@
         details: ['This parameter has a nullable default value']);
   }
 
-  test_parameter_optional_implicitDefault_named() async {
+  Future<void> test_parameter_optional_implicitDefault_named() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f({String s}) {}
 ''', migratedContent: '''
@@ -1150,7 +1344,7 @@
         details: ["This parameter has an implicit default value of 'null'"]);
   }
 
-  test_parameter_optional_implicitDefault_positional() async {
+  Future<void> test_parameter_optional_implicitDefault_positional() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f([String s]) {}
 ''', migratedContent: '''
@@ -1164,7 +1358,7 @@
         details: ["This parameter has an implicit default value of 'null'"]);
   }
 
-  test_removal_handles_offsets_correctly() async {
+  Future<void> test_removal_handles_offsets_correctly() async {
     var originalContent = '''
 void f(num n, int/*?*/ i) {
   if (n is! int) return;
@@ -1184,9 +1378,8 @@
     UnitInfo unit = await buildInfoForSingleTestFile(originalContent,
         migratedContent: migratedContent, removeViaComments: false);
     List<RegionInfo> regions = unit.regions;
-    expect(regions, hasLength(4));
+    expect(regions, hasLength(3));
     // regions[0] is the addition of `?` to the type of `i`.
-    // TODO(paulberry): why does the discarded downcast appear twice?
     assertRegion(
         region: regions[1],
         offset: migratedContent.indexOf(' as int'),
@@ -1194,16 +1387,11 @@
         details: []);
     assertRegion(
         region: regions[2],
-        offset: migratedContent.indexOf(' as int'),
-        length: 0,
-        details: []);
-    assertRegion(
-        region: regions[3],
         offset: migratedContent.indexOf('! + 1'),
         details: ['node with no info (never)']);
   }
 
-  test_return_fromOverriden() async {
+  Future<void> test_return_fromOverriden() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 abstract class A {
   String m();
@@ -1228,7 +1416,7 @@
     assertDetail(detail: regions[0].details[0], offset: 60, length: 6);
   }
 
-  test_return_multipleReturns() async {
+  Future<void> test_return_multipleReturns() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 String g() {
   int x = 1;
@@ -1251,7 +1439,7 @@
     assertInTargets(targets: unit.targets, offset: 40, length: 6); // "return"
   }
 
-  test_returnDetailTarget() async {
+  Future<void> test_returnDetailTarget() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 String g() {
   return 1 == 2 ? "Hello" : null;
@@ -1272,7 +1460,7 @@
     assertDetail(detail: regions[0].details[0], offset: 15, length: 6);
   }
 
-  test_returnType_function_expression() async {
+  Future<void> test_returnType_function_expression() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 int _f = null;
 int f() => _f;
@@ -1292,7 +1480,7 @@
         details: ['This function returns a nullable value on line 2']);
   }
 
-  test_returnType_getter_block() async {
+  Future<void> test_returnType_getter_block() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int _f = null;
@@ -1320,7 +1508,7 @@
         details: ['This getter returns a nullable value on line 4']);
   }
 
-  test_returnType_getter_expression() async {
+  Future<void> test_returnType_getter_expression() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   int _f = null;
@@ -1344,7 +1532,7 @@
         details: ['This getter returns a nullable value on line 3']);
   }
 
-  test_setLiteralTypeArgument_nestedList() async {
+  Future<void> test_setLiteralTypeArgument_nestedList() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   String s = null;
@@ -1374,7 +1562,7 @@
     assertDetail(detail: regions[1].details[0], offset: 87, length: 3);
   }
 
-  test_topLevelVariable() async {
+  Future<void> test_topLevelVariable() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 int _f = null;
 int _f2 = _f;
@@ -1394,7 +1582,7 @@
         details: ['This variable is initialized to a nullable value']);
   }
 
-  test_uninitializedField() async {
+  Future<void> test_uninitializedField() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class C {
   int value;
@@ -1431,7 +1619,7 @@
     assertDetail(detail: region.details[2], offset: 70, length: 3);
   }
 
-  test_uninitializedVariable_notLate_uninitializedUse() async {
+  Future<void> test_uninitializedVariable_notLate_uninitializedUse() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f() {
   int v1;
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/instrumentation_renderer_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/instrumentation_renderer_test.dart
index c273850..dbc0e4a 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/instrumentation_renderer_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/instrumentation_renderer_test.dart
@@ -10,7 +10,7 @@
 
 import 'nnbd_migration_test_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InstrumentationRendererTest);
   });
@@ -29,116 +29,10 @@
     return instrumentationRenderer.render();
   }
 
-  test_navigation_containsRoot() async {
+  Future<void> test_navigation_containsRoot() async {
     var renderedView = await renderViewForTestFiles(
         {convertPath('/project/lib/a.dart'): 'int a = null;'});
     var expectedPath = convertPath('/project');
     expect(renderedView, contains('<p class="root">$expectedPath</p>'));
   }
-
-  test_navigation_containsMultipleLinks_multipleRoots() async {
-    var renderedView = await renderViewForTestFiles({
-      convertPath('/project/bin/bin.dart'): 'int c = null;',
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/src/b.dart'): 'int b = null;',
-      convertPath('/project/test/test.dart'): 'int d = null;',
-    });
-    renderedView = _stripAttributes(renderedView);
-    expect(renderedView, contains('''
-<ul>
-  <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;bin
-    <ul>
-      <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">bin.dart</a> (1 modification)</li>
-    </ul>
-  </li>
-  <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;lib
-    <ul>
-      <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;src
-        <ul>
-          <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">b.dart</a> (1 modification)</li>
-        </ul>
-      </li>
-      <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">a.dart</a> (1 modification)</li>
-    </ul>
-  </li>
-  <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;test
-    <ul>
-      <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">test.dart</a> (1 modification)</li>
-    </ul>
-  </li>
-</ul>'''));
-  }
-
-  test_navigation_containsMultipleLinks_multipleDepths() async {
-    var renderedView = await renderViewForTestFiles({
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/src/b.dart'): 'int b = null;',
-      convertPath('/project/tool.dart'): 'int c = null;'
-    });
-    renderedView = _stripAttributes(renderedView);
-    expect(renderedView, contains('''
-<ul>
-  <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;lib
-    <ul>
-      <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;src
-        <ul>
-          <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">b.dart</a> (1 modification)</li>
-        </ul>
-      </li>
-      <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">a.dart</a> (1 modification)</li>
-    </ul>
-  </li>
-  <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">tool.dart</a> (1 modification)</li>
-</ul>'''));
-  }
-
-  test_navigation_containsMultipleLinks_sameDepth() async {
-    var renderedView = await renderViewForTestFiles({
-      convertPath('/project/lib/a.dart'): 'int a = null;',
-      convertPath('/project/lib/b.dart'): 'int b = null;'
-    });
-    renderedView = _stripAttributes(renderedView);
-    expect(renderedView, contains('''
-<ul>
-  <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;lib
-    <ul>
-      <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">a.dart</a> (1 modification)</li>
-      <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">b.dart</a> (1 modification)</li>
-    </ul>
-  </li>
-</ul>'''));
-  }
-
-  test_navigation_containsSingleLink_deep() async {
-    var renderedView = await renderViewForTestFiles(
-        {convertPath('/project/lib/src/a.dart'): 'int a = null;'});
-    renderedView = _stripAttributes(renderedView);
-    expect(renderedView, contains('''
-<ul>
-  <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;lib
-    <ul>
-      <li class="dir"><span class="arrow">&#x25BC;</span>&#x1F4C1;src
-        <ul>
-          <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">a.dart</a> (1 modification)</li>
-        </ul>
-      </li>
-    </ul>
-  </li>
-</ul>'''));
-  }
-
-  test_navigation_containsSingleLink_shallow() async {
-    var renderedView = await renderViewForTestFiles(
-        {convertPath('/project/a.dart'): 'int a = null;'});
-    renderedView = _stripAttributes(renderedView);
-    expect(renderedView, contains('''
-<ul>
-  <li>&#x1F4C4;<a href="..." class="nav-link" data-name="...">a.dart</a> (1 modification)</li>
-</ul>'''));
-  }
-
-  /// Strips out attributes which are not being tested.
-  String _stripAttributes(String html) => html
-      .replaceAll(RegExp('href=".*?"'), 'href="..."')
-      .replaceAll(RegExp('data-name=".*?"'), 'data-name="..."');
 }
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/navigation_tree_renderer_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/navigation_tree_renderer_test.dart
new file mode 100644
index 0000000..10a1557
--- /dev/null
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/navigation_tree_renderer_test.dart
@@ -0,0 +1,297 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert' show jsonDecode;
+
+import 'package:analysis_server/src/edit/nnbd_migration/migration_info.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/navigation_tree_renderer.dart';
+import 'package:analysis_server/src/edit/nnbd_migration/path_mapper.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'nnbd_migration_test_base.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(JsonMapTypeMatcherTest);
+    defineReflectiveTests(NavigationTreeRendererTest);
+  });
+}
+
+const isJsonMap = TypeMatcher<Map<String, dynamic>>();
+
+@reflectiveTest
+class JsonMapTypeMatcherTest {
+  void test_containing_doesNotMatch_invalidMatchers() {
+    expect(
+        isJsonMap.containing({'a': isJsonMap}).matches({
+          'a': [1, 2, 3]
+        }, {}),
+        isFalse);
+  }
+
+  void test_containing_doesNotMatch_invalidMatchers_list() {
+    expect(
+        isJsonMap.containing({
+          'a': isJsonMap.containing({
+            'b': [1, 2, 3]
+          })
+        }).matches({
+          'a': {
+            'b': [1, 2, 3, 4]
+          }
+        }, {}),
+        isFalse);
+  }
+
+  void test_containing_doesNotMatch_invalidValues() {
+    expect(isJsonMap.containing({'a': 1}).matches({'a': 2}, {}), isFalse);
+  }
+
+  void test_containing_matches_validMatchers() {
+    expect(
+        isJsonMap.containing({'a': isJsonMap}).matches(
+            {'a': <String, dynamic>{}}, {}),
+        isTrue);
+  }
+
+  void test_containing_matches_validMatchers_list() {
+    expect(
+        isJsonMap.containing({
+          'a': isJsonMap.containing({
+            'b': [1, 2, 3]
+          })
+        }).matches({
+          'a': {
+            'b': [1, 2, 3]
+          }
+        }, {}),
+        isTrue);
+  }
+
+  void test_containing_matches_validValues() {
+    expect(isJsonMap.containing({'a': 1}).matches({'a': 1}, {}), isTrue);
+  }
+
+  void test_isJsonMap_doesNotMatch_nonMaps() {
+    expect(isJsonMap.matches([], {}), isFalse);
+  }
+
+  void test_isJsonMap_doesNotMatch_nonStringKeyedMaps() {
+    expect(isJsonMap.matches(<int, int>{}, {}), isFalse);
+  }
+
+  void test_isJsonMap_matchesStringKeyedMaps() {
+    expect(isJsonMap.matches(<String, dynamic>{}, {}), isTrue);
+  }
+}
+
+@reflectiveTest
+class NavigationTreeRendererTest extends NnbdMigrationTestBase {
+  /// Render the navigation tree view for [files].
+  Future<String> renderNavigationTree(Map<String, String> files) async {
+    var packageRoot = convertPath('/project');
+    await buildInfoForTestFiles(files, includedRoot: packageRoot);
+    MigrationInfo migrationInfo =
+        MigrationInfo(infos, {}, resourceProvider.pathContext, packageRoot);
+    return NavigationTreeRenderer(migrationInfo, PathMapper(resourceProvider))
+        .render();
+  }
+
+  Future<void> test_containsEditCounts() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/lib/a.dart'): 'int a = 1;',
+      convertPath('/project/lib/b.dart'): 'int b = null;',
+      convertPath('/project/lib/c.dart'): 'int c = null;\nint d = null;',
+    }));
+
+    var libNode = response[0];
+    expect(
+        libNode,
+        isJsonMap.containing({
+          'subtree': [
+            isJsonMap.containing({'editCount': 0}),
+            isJsonMap.containing({'editCount': 1}),
+            isJsonMap.containing({'editCount': 2})
+          ]
+        }));
+  }
+
+  Future<void> test_containsHrefs() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/lib/a.dart'): 'int a = null;',
+      convertPath('/project/lib/src/b.dart'): 'int b = null;',
+      convertPath('/project/tool.dart'): 'int c = null;',
+    }));
+
+    var libNode = response[0];
+    expect(
+        libNode,
+        isJsonMap.containing({
+          'name': 'lib',
+          'subtree': [
+            isJsonMap.containing({
+              'name': 'src',
+              'subtree': [
+                isJsonMap.containing(
+                    {'href': convertPath('/project/lib/src/b.dart')})
+              ]
+            }),
+            isJsonMap.containing({'href': convertPath('/project/lib/a.dart')})
+          ]
+        }));
+
+    var toolNode = response[1];
+    expect(toolNode['href'], convertPath('/project/tool.dart'));
+  }
+
+  Future<void> test_containsMultipleLinks_multipleDepths() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/lib/a.dart'): 'int a = null;',
+      convertPath('/project/lib/src/b.dart'): 'int b = null;',
+      convertPath('/project/tool.dart'): 'int c = null;',
+    }));
+    expect(response, hasLength(2));
+
+    var libNode = response[0];
+    expect(
+        libNode,
+        isJsonMap.containing({
+          'name': 'lib',
+          'subtree': [
+            isJsonMap.containing({
+              'name': 'src',
+              'subtree': [
+                isJsonMap.containing({'name': 'b.dart'})
+              ]
+            }),
+            isJsonMap.containing({'name': 'a.dart'})
+          ]
+        }));
+
+    var toolNode = response[1];
+    expect(toolNode['name'], 'tool.dart');
+  }
+
+  Future<void> test_containsMultipleLinks_multipleRoots() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/bin/bin.dart'): 'int c = null;',
+      convertPath('/project/lib/a.dart'): 'int a = null;',
+    }));
+    expect(response, hasLength(2));
+
+    var binNode = response[0];
+    expect(binNode['type'], equals('directory'));
+    expect(binNode['name'], equals('bin'));
+    expect(binNode['subtree'], hasLength(1));
+
+    var libNode = response[1];
+    expect(libNode['type'], equals('directory'));
+    expect(libNode['name'], equals('lib'));
+    expect(libNode['subtree'], hasLength(1));
+  }
+
+  Future<void> test_containsMultipleLinks_sameDepth() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/lib/a.dart'): 'int a = null;',
+      convertPath('/project/lib/b.dart'): 'int b = null;',
+    }));
+    expect(response, hasLength(1));
+
+    var libNode = response[0];
+    expect(
+        libNode,
+        isJsonMap.containing({
+          'name': 'lib',
+          'subtree': [
+            isJsonMap.containing({
+              'name': 'a.dart',
+              'path': convertPath('lib/a.dart'),
+              'href': convertPath('/project/lib/a.dart')
+            }),
+            isJsonMap.containing({
+              'name': 'b.dart',
+              'path': convertPath('lib/b.dart'),
+              'href': convertPath('/project/lib/b.dart')
+            })
+          ]
+        }));
+  }
+
+  Future<void> test_containsPaths() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/lib/a.dart'): 'int a = null;',
+      convertPath('/project/lib/src/b.dart'): 'int b = null;',
+      convertPath('/project/tool.dart'): 'int c = null;',
+    }));
+
+    var libNode = response[0];
+    expect(
+        libNode,
+        isJsonMap.containing({
+          'name': 'lib',
+          'subtree': [
+            isJsonMap.containing({
+              'name': 'src',
+              'subtree': [
+                isJsonMap.containing({'path': convertPath('lib/src/b.dart')})
+              ]
+            }),
+            isJsonMap.containing({'path': convertPath('lib/a.dart')})
+          ]
+        }));
+
+    var toolNode = response[1];
+    expect(toolNode['path'], 'tool.dart');
+  }
+
+  Future<void> test_containsSingleLink_deep() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/lib/src/a.dart'): 'int a = null;',
+    }));
+    expect(response, hasLength(1));
+
+    var libNode = response[0];
+    expect(
+        libNode,
+        isJsonMap.containing({
+          'name': 'lib',
+          'subtree': [
+            isJsonMap.containing({
+              'name': 'src',
+              'subtree': [
+                isJsonMap.containing({
+                  'name': 'a.dart',
+                  'path': convertPath('lib/src/a.dart'),
+                  'href': convertPath('/project/lib/src/a.dart')
+                })
+              ]
+            })
+          ]
+        }));
+  }
+
+  Future<void> test_containsSingleLink_shallow() async {
+    var response = jsonDecode(await renderNavigationTree({
+      convertPath('/project/a.dart'): 'int a = null;',
+    }));
+    expect(response, hasLength(1));
+
+    var aNode = response[0];
+    expect(aNode['name'], 'a.dart');
+    expect(aNode['path'], 'a.dart');
+    expect(aNode['href'], convertPath('/project/a.dart'));
+  }
+}
+
+extension _E<T, U> on TypeMatcher<Map<T, U>> {
+  TypeMatcher<Map<T, U>> containing(Map<T, dynamic> matchers) {
+    var result = this;
+    for (var entry in matchers.entries) {
+      result = result.having(
+          (map) => map[entry.key], entry.key.toString(), entry.value);
+    }
+    return result;
+  }
+}
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/offset_mapper_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/offset_mapper_test.dart
index 4697e18..a8302c4 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/offset_mapper_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/offset_mapper_test.dart
@@ -9,7 +9,7 @@
 
 import '../../../analysis_abstract.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OffsetMapperTest);
   });
@@ -17,14 +17,14 @@
 
 @reflectiveTest
 class OffsetMapperTest extends AbstractAnalysisTest {
-  test_identity() {
+  void test_identity() {
     OffsetMapper mapper = OffsetMapper.identity;
     expect(mapper.map(0), 0);
     expect(mapper.map(20), 20);
     expect(mapper.map(0xFFFFFF), 0xFFFFFF);
   }
 
-  test_multipleEdits() {
+  void test_multipleEdits() {
     OffsetMapper mapper = OffsetMapper.forEdits([
       SourceEdit(13, 0, '?'),
       SourceEdit(21, 0, '!'),
@@ -40,7 +40,7 @@
     expect(mapper.map(55), 58);
   }
 
-  test_singleEdit() {
+  void test_singleEdit() {
     OffsetMapper mapper = OffsetMapper.forEdits([
       SourceEdit(13, 0, '?'),
     ]);
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart
index 093578e..fe76e3d 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart
@@ -12,7 +12,7 @@
 
 import 'nnbd_migration_test_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RegionRendererTest);
   });
@@ -20,8 +20,8 @@
 
 @reflectiveTest
 class RegionRendererTest extends NnbdMigrationTestBase {
-  /// Render [libraryInfo], using a [MigrationInfo] which knows only about this
-  /// library.
+  /// Render the region at [offset], using a [MigrationInfo] which knows only
+  /// about the library at `infos.single`.
   String renderRegion(int offset) {
     String packageRoot = convertPath('/package');
     MigrationInfo migrationInfo =
@@ -33,7 +33,7 @@
         .render();
   }
 
-  test_modifiedOutput_containsDetail() async {
+  Future<void> test_modifiedOutput_containsDetail() async {
     await buildInfoForSingleTestFile('int a = null;',
         migratedContent: 'int? a = null;');
     var response = jsonDecode(renderRegion(3));
@@ -45,7 +45,7 @@
     expect(detail['link']['href'], equals('test.dart?offset=8&line=1'));
   }
 
-  test_modifiedOutput_containsExplanation() async {
+  Future<void> test_modifiedOutput_containsExplanation() async {
     await buildInfoForSingleTestFile('int a = null;',
         migratedContent: 'int? a = null;');
     var response = jsonDecode(renderRegion(3));
@@ -53,7 +53,7 @@
         response['explanation'], equals("Changed type 'int' to be nullable"));
   }
 
-  test_modifiedOutput_containsPath() async {
+  Future<void> test_modifiedOutput_containsPath() async {
     await buildInfoForSingleTestFile('int a = null;',
         migratedContent: 'int? a = null;');
     var response = jsonDecode(renderRegion(3));
@@ -61,7 +61,7 @@
     expect(response['line'], equals(1));
   }
 
-  test_unmodifiedOutput_containsDetail() async {
+  Future<void> test_unmodifiedOutput_containsDetail() async {
     await buildInfoForSingleTestFile('f(int a) => a.isEven;',
         migratedContent: 'f(int a) => a.isEven;');
     var response = jsonDecode(renderRegion(2));
@@ -75,7 +75,7 @@
     expect(detail['link']['href'], equals('test.dart?offset=12&line=1'));
   }
 
-  test_unmodifiedOutput_containsExplanation() async {
+  Future<void> test_unmodifiedOutput_containsExplanation() async {
     await buildInfoForSingleTestFile('f(int a) => a.isEven;',
         migratedContent: 'f(int a) => a.isEven;');
     var response = jsonDecode(renderRegion(2));
@@ -85,7 +85,7 @@
             'This type is not changed; it is determined to be non-nullable'));
   }
 
-  test_unmodifiedOutput_containsPath() async {
+  Future<void> test_unmodifiedOutput_containsPath() async {
     await buildInfoForSingleTestFile('f(int a) => a.isEven;',
         migratedContent: 'f(int a) => a.isEven;');
     var response = jsonDecode(renderRegion(2));
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/test_all.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/test_all.dart
index 632278c..f2277ef 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/test_all.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/test_all.dart
@@ -6,14 +6,16 @@
 
 import 'info_builder_test.dart' as info_builder;
 import 'instrumentation_renderer_test.dart' as instrumentation_renderer;
+import 'navigation_tree_renderer_test.dart' as navigation_tree_renderer;
 import 'offset_mapper_test.dart' as offset_mapper;
 import 'region_renderer_test.dart' as region_renderer;
 import 'unit_renderer_test.dart' as unit_renderer;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     info_builder.main();
     instrumentation_renderer.main();
+    navigation_tree_renderer.main();
     offset_mapper.main();
     region_renderer.main();
     unit_renderer.main();
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart
index 5f5105b..20283a7 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart
@@ -12,7 +12,7 @@
 
 import 'nnbd_migration_test_base.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UnitRendererTest);
   });
@@ -36,31 +36,7 @@
     return contents;
   }
 
-  test_editList_containsEdit() async {
-    await buildInfoForSingleTestFile('int a = null;',
-        migratedContent: 'int? a = null;');
-    var outputJson = renderUnits()[0];
-    var output = jsonDecode(outputJson);
-    var editList = output['editList'];
-    expect(
-        editList,
-        contains('<p class="edit">'
-            '<input type="checkbox" title="Click to mark reviewed" '
-            'disabled="disabled">'
-            " line 1: Changed type 'int' to be nullable.</p>"));
-  }
-
-  test_editList_containsEdit_htmlEscaped() async {
-    await buildInfoForSingleTestFile('List<String> a = null;',
-        migratedContent: 'List<String>? a = null;');
-    var outputJson = renderUnits()[0];
-    var output = jsonDecode(outputJson);
-    var editList = output['editList'];
-    expect(editList,
-        contains("line 1: Changed type 'List&lt;String&gt;' to be nullable."));
-  }
-
-  test_editList_containsEdit_twoEdits() async {
+  Future<void> test_editList_containsCount() async {
     await buildInfoForSingleTestFile('''
 int a = null;
 bool b = a.isEven;
@@ -71,22 +47,10 @@
     var outputJson = renderUnits()[0];
     var output = jsonDecode(outputJson);
     var editList = output['editList'];
-    expect(editList, contains("line 1: Changed type 'int' to be nullable."));
-    expect(editList,
-        contains('line 2: Added a non-null assertion to nullable expression.'));
+    expect(editList['editCount'], equals(2));
   }
 
-  test_editList_containsSummary() async {
-    await buildInfoForSingleTestFile('int a = null;',
-        migratedContent: 'int? a = null;');
-    var outputJson = renderUnits()[0];
-    var output = jsonDecode(outputJson);
-    var editList = output['editList'];
-    expect(editList,
-        contains('<p><strong>1</strong> edit was made to this file.'));
-  }
-
-  test_editList_containsSummary_twoEdits() async {
+  Future<void> test_editList_containsEdits() async {
     await buildInfoForSingleTestFile('''
 int a = null;
 bool b = a.isEven;
@@ -97,11 +61,18 @@
     var outputJson = renderUnits()[0];
     var output = jsonDecode(outputJson);
     var editList = output['editList'];
-    expect(editList,
-        contains('<p><strong>2</strong> edits were made to this file.'));
+    expect(editList['edits'], hasLength(2));
+    expect(editList['edits'][0]['line'], equals(1));
+    expect(editList['edits'][0]['offset'], equals(3));
+    expect(editList['edits'][0]['explanation'],
+        equals("Changed type 'int' to be nullable"));
+    expect(editList['edits'][1]['line'], equals(2));
+    expect(editList['edits'][1]['offset'], equals(25));
+    expect(editList['edits'][1]['explanation'],
+        equals('Added a non-null assertion to nullable expression'));
   }
 
-  test_navContentContainsEscapedHtml() async {
+  Future<void> test_navContentContainsEscapedHtml() async {
     await buildInfoForSingleTestFile('List<String> a = null;',
         migratedContent: 'List<String>? a = null;');
     var outputJson = renderUnits()[0];
@@ -117,17 +88,17 @@
             r'<span id="o13">a</span> = <span id="o17">null</span>;'));
   }
 
-  test_outputContainsModifiedAndUnmodifiedRegions() async {
+  Future<void> test_outputContainsModifiedAndUnmodifiedRegions() async {
     await buildInfoForSingleTestFile('int a = null;',
         migratedContent: 'int? a = null;');
     var outputJson = renderUnits()[0];
     var output = jsonDecode(outputJson);
     var regions = _stripDataAttributes(output['regions']);
     expect(regions,
-        contains('int<span class="region fix-region">?</span> a = null;'));
+        contains('int<span class="region added-region">?</span> a = null;'));
   }
 
-  test_regionsContainsEscapedHtml_ampersand() async {
+  Future<void> test_regionsContainsEscapedHtml_ampersand() async {
     await buildInfoForSingleTestFile('bool a = true && false;',
         migratedContent: 'bool a = true && false;');
     var outputJson = renderUnits()[0];
@@ -135,7 +106,7 @@
     expect(output['regions'], contains('bool a = true &amp;&amp; false;'));
   }
 
-  test_regionsContainsEscapedHtml_betweenRegions() async {
+  Future<void> test_regionsContainsEscapedHtml_betweenRegions() async {
     await buildInfoForSingleTestFile('List<String> a = null;',
         migratedContent: 'List<String>? a = null;');
     var outputJson = renderUnits()[0];
@@ -144,10 +115,10 @@
     expect(
         regions,
         contains('List&lt;String&gt;'
-            '<span class="region fix-region">?</span> a = null;'));
+            '<span class="region added-region">?</span> a = null;'));
   }
 
-  test_regionsContainsEscapedHtml_region() async {
+  Future<void> test_regionsContainsEscapedHtml_region() async {
     await buildInfoForSingleTestFile('f(List<String> a) => a.join(",");',
         migratedContent: 'f(List<String> a) => a.join(",");');
     var outputJson = renderUnits()[0];
@@ -155,8 +126,8 @@
     var regions = _stripDataAttributes(output['regions']);
     expect(
         regions,
-        contains('<span class="region non-nullable-type-region">'
-            'List&lt;String&gt;</span>'));
+        contains(
+            '<span class="region unchanged-region">List&lt;String&gt;</span>'));
   }
 
   UnitInfo unit(String path, String content, {List<RegionInfo> regions}) {
diff --git a/pkg/analysis_server/test/src/edit/test_all.dart b/pkg/analysis_server/test/src/edit/test_all.dart
index 9e41ed2..b36abbb 100644
--- a/pkg/analysis_server/test/src/edit/test_all.dart
+++ b/pkg/analysis_server/test/src/edit/test_all.dart
@@ -7,7 +7,7 @@
 import 'fix/test_all.dart' as fix;
 import 'nnbd_migration/test_all.dart' as nnbd_migration;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     fix.main();
     nnbd_migration.main();
diff --git a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
index 43a7967..96a9bcc 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
@@ -8,7 +8,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterCorrectionTest);
   });
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index f4172fd..9950666 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -12,7 +12,7 @@
 
 import '../../abstract_context.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterOutlineComputerTest);
   });
@@ -32,7 +32,7 @@
     addFlutterPackage();
   }
 
-  test_attribute_namedExpression() async {
+  Future<void> test_attribute_namedExpression() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
@@ -57,59 +57,63 @@
     _assertLocation(attribute.valueLocation, 82, 2);
   }
 
-  test_attributes_bool() async {
+  Future<void> test_attributes_bool() async {
     var attribute = await _getAttribute('test', 'true');
     expect(attribute.label, 'true');
     expect(attribute.literalValueBoolean, true);
   }
 
-  test_attributes_functionExpression_hasParameters_blockExpression() async {
+  Future<void>
+      test_attributes_functionExpression_hasParameters_blockExpression() async {
     var attribute = await _getAttribute('test', '(a) {}');
     expect(attribute.label, '(…) { … }');
   }
 
-  test_attributes_functionExpression_hasParameters_bodyExpression() async {
+  Future<void>
+      test_attributes_functionExpression_hasParameters_bodyExpression() async {
     var attribute = await _getAttribute('test', '(a) => 1');
     expect(attribute.label, '(…) => …');
   }
 
-  test_attributes_functionExpression_noParameters_blockExpression() async {
+  Future<void>
+      test_attributes_functionExpression_noParameters_blockExpression() async {
     var attribute = await _getAttribute('test', '() {}');
     expect(attribute.label, '() { … }');
   }
 
-  test_attributes_functionExpression_noParameters_bodyExpression() async {
+  Future<void>
+      test_attributes_functionExpression_noParameters_bodyExpression() async {
     var attribute = await _getAttribute('test', '() => 1');
     expect(attribute.label, '() => …');
   }
 
-  test_attributes_int() async {
+  Future<void> test_attributes_int() async {
     var attribute = await _getAttribute('test', '42');
     expect(attribute.label, '42');
     expect(attribute.literalValueInteger, 42);
   }
 
-  test_attributes_listLiteral() async {
+  Future<void> test_attributes_listLiteral() async {
     var attribute = await _getAttribute('test', '[1, 2, 3]');
     expect(attribute.label, '[…]');
   }
 
-  test_attributes_mapLiteral() async {
+  Future<void> test_attributes_mapLiteral() async {
     var attribute = await _getAttribute('test', '{1: 10, 2: 20}');
     expect(attribute.label, '{…}');
   }
 
-  test_attributes_multiLine() async {
+  Future<void> test_attributes_multiLine() async {
     var attribute = await _getAttribute('test', '1 +\n 2');
     expect(attribute.label, '…');
   }
 
-  test_attributes_setLiteral() async {
+  Future<void> test_attributes_setLiteral() async {
     var attribute = await _getAttribute('test', '{1, 2}');
     expect(attribute.label, '{…}');
   }
 
-  test_attributes_string_interpolation() async {
+  Future<void> test_attributes_string_interpolation() async {
     FlutterOutline unitOutline = await _computeOutline(r'''
 import 'package:flutter/widgets.dart';
 
@@ -133,13 +137,13 @@
     expect(attribute.literalValueString, isNull);
   }
 
-  test_attributes_string_literal() async {
+  Future<void> test_attributes_string_literal() async {
     var attribute = await _getAttribute('test', "'my text'");
     expect(attribute.label, "'my text'");
     expect(attribute.literalValueString, 'my text');
   }
 
-  test_attributes_unresolved() async {
+  Future<void> test_attributes_unresolved() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
@@ -157,7 +161,7 @@
     expect(rowOutline.attributes, isEmpty);
   }
 
-  test_children() async {
+  Future<void> test_children() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
@@ -207,7 +211,7 @@
     }
   }
 
-  test_children_closure_blockBody() async {
+  Future<void> test_children_closure_blockBody() async {
     newFile('/home/test/lib/a.dart', content: r'''
 import 'package:flutter/widgets.dart';
 
@@ -243,7 +247,7 @@
 ''');
   }
 
-  test_children_closure_expressionBody() async {
+  Future<void> test_children_closure_expressionBody() async {
     newFile('/home/test/lib/a.dart', content: r'''
 import 'package:flutter/widgets.dart';
 
@@ -274,7 +278,7 @@
 ''');
   }
 
-  test_children_withCollectionElements() async {
+  Future<void> test_children_withCollectionElements() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
@@ -301,7 +305,7 @@
 ''');
   }
 
-  test_codeOffsetLength() async {
+  Future<void> test_codeOffsetLength() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
@@ -332,7 +336,7 @@
     expect(container.codeLength, 15);
   }
 
-  test_genericLabel_invocation() async {
+  Future<void> test_genericLabel_invocation() async {
     FlutterOutline unitOutline = await _computeOutline(r'''
 import 'package:flutter/widgets.dart';
 
@@ -388,7 +392,7 @@
     }
   }
 
-  test_parentAssociationLabel() async {
+  Future<void> test_parentAssociationLabel() async {
     newFile('/home/test/lib/a.dart', content: r'''
 import 'package:flutter/widgets.dart';
 
@@ -422,7 +426,7 @@
 ''');
   }
 
-  test_variableName() async {
+  Future<void> test_variableName() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
 
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
index 250cb06..a9c7518 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -15,7 +15,7 @@
 import '../../analysis_abstract.dart';
 import '../utilities/mock_packages.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterNotificationOutlineTest);
   });
diff --git a/pkg/analysis_server/test/src/flutter/test_all.dart b/pkg/analysis_server/test/src/flutter/test_all.dart
index 09ef471..66e99d6 100644
--- a/pkg/analysis_server/test/src/flutter/test_all.dart
+++ b/pkg/analysis_server/test/src/flutter/test_all.dart
@@ -8,7 +8,7 @@
 import 'flutter_outline_computer_test.dart' as outline_computer;
 import 'flutter_outline_notification_test.dart' as outline_notification;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     flutter_correction.main();
     outline_computer.main();
diff --git a/pkg/analysis_server/test/src/lsp/lsp_packet_transformer_test.dart b/pkg/analysis_server/test/src/lsp/lsp_packet_transformer_test.dart
index ee603c7..a119979 100644
--- a/pkg/analysis_server/test/src/lsp/lsp_packet_transformer_test.dart
+++ b/pkg/analysis_server/test/src/lsp/lsp_packet_transformer_test.dart
@@ -7,7 +7,7 @@
 import 'package:analysis_server/src/lsp/lsp_packet_transformer.dart';
 import 'package:test/test.dart';
 
-main() {
+void main() {
   group('lsp_packet_transformer', () {
     test('transforms data received as individual bytes', () async {
       final payload = '{ json payload }';
diff --git a/pkg/analysis_server/test/src/lsp/test_all.dart b/pkg/analysis_server/test/src/lsp/test_all.dart
index fa29bbd..5f61e61 100644
--- a/pkg/analysis_server/test/src/lsp/test_all.dart
+++ b/pkg/analysis_server/test/src/lsp/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'lsp_packet_transformer_test.dart' as lsp_packet_transformer;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     lsp_packet_transformer.main();
   }, name: 'lsp');
diff --git a/pkg/analysis_server/test/src/plugin/notification_manager_test.dart b/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
index 5dfe529..8ffa2bf 100644
--- a/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
@@ -16,7 +16,7 @@
 
 import 'protocol_test_utilities.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NotificationManagerTest);
   });
diff --git a/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart b/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
index c9f8259..6066b93 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
@@ -7,7 +7,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PluginLocatorTest);
   });
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index 93f39d8..83f72aa 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -22,7 +22,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:watcher/watcher.dart' as watcher;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(BuiltInPluginInfoTest);
     defineReflectiveTests(DiscoveredPluginInfoTest);
@@ -48,7 +48,7 @@
         InstrumentationService.NULL_SERVICE);
   }
 
-  test_addContextRoot() {
+  void test_addContextRoot() {
     ContextRoot contextRoot1 = _newContextRoot('/pkg1');
     plugin.addContextRoot(contextRoot1);
     expect(plugin.contextRoots, [contextRoot1]);
@@ -56,14 +56,14 @@
     expect(plugin.contextRoots, [contextRoot1]);
   }
 
-  test_creation() {
+  void test_creation() {
     expect(plugin.pluginId, 'test plugin');
     expect(plugin.notificationManager, notificationManager);
     expect(plugin.contextRoots, isEmpty);
     expect(plugin.currentSession, isNull);
   }
 
-  test_removeContextRoot() {
+  void test_removeContextRoot() {
     ContextRoot contextRoot1 = _newContextRoot('/pkg1');
     ContextRoot contextRoot2 = _newContextRoot('/pkg2');
     plugin.addContextRoot(contextRoot1);
@@ -77,11 +77,11 @@
   }
 
   @failingTest
-  test_start_notRunning() {
+  Future<void> test_start_notRunning() {
     fail('Not tested');
   }
 
-  test_start_running() async {
+  Future<void> test_start_running() async {
     plugin.currentSession = PluginSession(plugin);
     try {
       await plugin.start('', '');
@@ -91,11 +91,11 @@
     }
   }
 
-  test_stop_notRunning() {
+  void test_stop_notRunning() {
     expect(() => plugin.stop(), throwsStateError);
   }
 
-  test_stop_running() async {
+  Future<void> test_stop_running() async {
     PluginSession session = PluginSession(plugin);
     TestServerCommunicationChannel channel =
         TestServerCommunicationChannel(session);
@@ -121,7 +121,7 @@
         notificationManager, InstrumentationService.NULL_SERVICE);
   }
 
-  test_addContextRoot() {
+  void test_addContextRoot() {
     String optionsFilePath = '/pkg1/analysis_options.yaml';
     ContextRoot contextRoot1 = _newContextRoot('/pkg1');
     contextRoot1.optionsFilePath = optionsFilePath;
@@ -139,7 +139,7 @@
     expect(roots[0]['optionsFile'], optionsFilePath);
   }
 
-  test_creation() {
+  void test_creation() {
     expect(plugin.path, pluginPath);
     expect(plugin.executionPath, executionPath);
     expect(plugin.notificationManager, notificationManager);
@@ -147,7 +147,7 @@
     expect(plugin.currentSession, isNull);
   }
 
-  test_removeContextRoot() {
+  void test_removeContextRoot() {
     ContextRoot contextRoot1 = _newContextRoot('/pkg1');
     ContextRoot contextRoot2 = _newContextRoot('/pkg2');
     plugin.addContextRoot(contextRoot1);
@@ -161,11 +161,11 @@
   }
 
   @failingTest
-  test_start_notRunning() {
+  Future<void> test_start_notRunning() {
     fail('Not tested');
   }
 
-  test_start_running() async {
+  Future<void> test_start_running() async {
     plugin.currentSession = PluginSession(plugin);
     try {
       await plugin.start('', '');
@@ -175,11 +175,11 @@
     }
   }
 
-  test_stop_notRunning() {
+  void test_stop_notRunning() {
     expect(() => plugin.stop(), throwsStateError);
   }
 
-  test_stop_running() async {
+  Future<void> test_stop_running() async {
     PluginSession session = PluginSession(plugin);
     TestServerCommunicationChannel channel =
         TestServerCommunicationChannel(session);
@@ -206,7 +206,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_addPluginToContextRoot() async {
+  Future<void> test_addPluginToContextRoot() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(test: (String pluginPath) async {
@@ -218,7 +218,7 @@
   }
 
   @failingTest
-  test_addPluginToContextRoot_pubspec() async {
+  Future<void> test_addPluginToContextRoot_pubspec() async {
     // We can't successfully run pub until after the analyzer_plugin package has
     // been published.
     fail('Cannot run pub');
@@ -240,7 +240,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_broadcastRequest_many() async {
+  Future<void> test_broadcastRequest_many() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(
@@ -269,7 +269,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_broadcastRequest_many_noContextRoot() async {
+  Future<void> test_broadcastRequest_many_noContextRoot() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(
@@ -296,7 +296,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_broadcastRequest_noCurrentSession() async {
+  Future<void> test_broadcastRequest_noCurrentSession() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(
@@ -320,7 +320,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_broadcastWatchEvent() async {
+  Future<void> test_broadcastWatchEvent() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(
@@ -346,7 +346,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_pluginsForContextRoot_multiple() async {
+  Future<void> test_pluginsForContextRoot_multiple() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(
@@ -376,7 +376,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_pluginsForContextRoot_one() async {
+  Future<void> test_pluginsForContextRoot_one() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(test: (String pluginPath) async {
@@ -395,7 +395,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_removedContextRoot() async {
+  Future<void> test_removedContextRoot() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(test: (String pluginPath) async {
@@ -413,7 +413,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_restartPlugins() async {
+  Future<void> test_restartPlugins() async {
     io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     String pkg1Path = pkg1Dir.resolveSymbolicLinksSync();
     io.Directory pkg2Dir = io.Directory.systemTemp.createTempSync('pkg2');
@@ -565,7 +565,7 @@
   @SkippedTest(
       reason: 'flaky timeouts',
       issue: 'https://github.com/dart-lang/sdk/issues/38629')
-  test_start_notRunning() async {
+  Future<void> test_start_notRunning() async {
     await withPlugin(test: (String pluginPath) async {
       String packagesPath = path.join(pluginPath, '.packages');
       String mainPath = path.join(pluginPath, 'bin', 'plugin.dart');
@@ -629,7 +629,7 @@
     fail('The method handleOnError is not implemented');
   }
 
-  test_handleResponse() async {
+  Future<void> test_handleResponse() async {
     TestServerCommunicationChannel(session);
     Response response = PluginVersionCheckResult(
             true, 'name', 'version', <String>[],
@@ -658,13 +658,13 @@
     expect(channel.sentRequests[0].method, 'plugin.versionCheck');
   }
 
-  test_start_notCompatible() async {
+  Future<void> test_start_notCompatible() async {
     session.isCompatible = false;
     expect(await session.start(path.join(pluginPath, 'byteStore'), sdkPath),
         isFalse);
   }
 
-  test_start_running() async {
+  Future<void> test_start_running() async {
     TestServerCommunicationChannel(session);
     try {
       await session.start(null, '');
@@ -674,11 +674,11 @@
     }
   }
 
-  test_stop_notRunning() {
+  void test_stop_notRunning() {
     expect(() => session.stop(), throwsStateError);
   }
 
-  test_stop_running() async {
+  Future<void> test_stop_running() async {
     TestServerCommunicationChannel channel =
         TestServerCommunicationChannel(session);
     await session.stop();
@@ -923,7 +923,7 @@
   }
 
   @override
-  noSuchMethod(Invocation invocation) {
+  dynamic noSuchMethod(Invocation invocation) {
     fail('Unexpected invocation of ${invocation.memberName}');
   }
 
diff --git a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
index c7eb179..8ae4f30 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
@@ -22,7 +22,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PluginWatcherTest);
   });
@@ -38,7 +38,7 @@
     watcher = PluginWatcher(resourceProvider, manager);
   }
 
-  test_addedDriver() async {
+  Future<void> test_addedDriver() async {
     String pkg1Path = newFolder('/pkg1').path;
     newFile('/pkg1/lib/test1.dart');
     newFile('/pkg2/lib/pkg2.dart');
@@ -72,7 +72,7 @@
     expect(manager.addedContextRoots, hasLength(1));
   }
 
-  test_addedDriver_missingPackage() async {
+  Future<void> test_addedDriver_missingPackage() async {
     String pkg1Path = newFolder('/pkg1').path;
     newFile('/pkg1/lib/test1.dart');
 
@@ -96,7 +96,7 @@
     expect(watcher.manager, manager);
   }
 
-  test_removedDriver() {
+  void test_removedDriver() {
     String pkg1Path = newFolder('/pkg1').path;
     ContextRoot contextRoot =
         ContextRoot(pkg1Path, [], pathContext: resourceProvider.pathContext);
@@ -141,7 +141,7 @@
   Stream<ResolvedUnitResult> get results => _resultController.stream;
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 
 class TestPluginManager implements PluginManager {
@@ -157,7 +157,7 @@
   }
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 
   @override
   void recordPluginFailure(String hostPackageName, String message) {}
diff --git a/pkg/analysis_server/test/src/plugin/request_converter_test.dart b/pkg/analysis_server/test/src/plugin/request_converter_test.dart
index de83776..954b63b 100644
--- a/pkg/analysis_server/test/src/plugin/request_converter_test.dart
+++ b/pkg/analysis_server/test/src/plugin/request_converter_test.dart
@@ -12,7 +12,7 @@
 
 import 'protocol_test_utilities.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RequestConverterTest);
   });
diff --git a/pkg/analysis_server/test/src/plugin/result_collector_test.dart b/pkg/analysis_server/test/src/plugin/result_collector_test.dart
index f8f25c0..ad8e954 100644
--- a/pkg/analysis_server/test/src/plugin/result_collector_test.dart
+++ b/pkg/analysis_server/test/src/plugin/result_collector_test.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ResultCollectorTest);
   });
diff --git a/pkg/analysis_server/test/src/plugin/result_converter_test.dart b/pkg/analysis_server/test/src/plugin/result_converter_test.dart
index 99fb20c..b782420 100644
--- a/pkg/analysis_server/test/src/plugin/result_converter_test.dart
+++ b/pkg/analysis_server/test/src/plugin/result_converter_test.dart
@@ -12,7 +12,7 @@
 
 import 'protocol_test_utilities.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ResultConverterTest);
   });
diff --git a/pkg/analysis_server/test/src/plugin/result_merger_test.dart b/pkg/analysis_server/test/src/plugin/result_merger_test.dart
index 46289ea..2bb41bc 100644
--- a/pkg/analysis_server/test/src/plugin/result_merger_test.dart
+++ b/pkg/analysis_server/test/src/plugin/result_merger_test.dart
@@ -9,7 +9,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ResultMergerTest);
   });
diff --git a/pkg/analysis_server/test/src/plugin/test_all.dart b/pkg/analysis_server/test/src/plugin/test_all.dart
index 48883d7..9240a5d 100644
--- a/pkg/analysis_server/test/src/plugin/test_all.dart
+++ b/pkg/analysis_server/test/src/plugin/test_all.dart
@@ -13,7 +13,7 @@
 import 'result_converter_test.dart' as result_converter_test;
 import 'result_merger_test.dart' as result_merger_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     notification_manager_test.main();
     plugin_locator_test.main();
diff --git a/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart b/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart
index 9a533a0..b763bed 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddDiagnosticPropertyReferenceTest);
   });
@@ -20,7 +20,7 @@
   AssistKind get kind => DartAssistKind.ADD_DIAGNOSTIC_PROPERTY_REFERENCE;
 
   /// Full coverage in fix/add_diagnostic_property_reference_test.dart
-  test_boolField_debugFillProperties() async {
+  Future<void> test_boolField_debugFillProperties() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 class W extends Widget {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/add_not_null_assert.dart b/pkg/analysis_server/test/src/services/correction/assist/add_not_null_assert.dart
index e39942c..bd8122e 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/add_not_null_assert.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/add_not_null_assert.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddNotNullAssert);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.ADD_NOT_NULL_ASSERT;
 
-  test_function_expressionBody_noAssert() async {
+  Future<void> test_function_expressionBody_noAssert() async {
     await resolveTestUnit('''
 int double(int x) => x * 2;
 ''');
@@ -27,7 +27,7 @@
     await assertNoAssistAt('x');
   }
 
-  test_function_noAssert() async {
+  Future<void> test_function_noAssert() async {
     await resolveTestUnit('''
 foo(int x) {
 }
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_function_withAssert() async {
+  Future<void> test_function_withAssert() async {
     await resolveTestUnit('''
 foo(int x) {
   assert(x != null);
@@ -48,7 +48,7 @@
     await assertNoAssistAt('x');
   }
 
-  test_function_withAssert2() async {
+  Future<void> test_function_withAssert2() async {
     await resolveTestUnit('''
 foo(int x) {
   print('foo');
@@ -58,7 +58,7 @@
     await assertNoAssistAt('x');
   }
 
-  test_method_noAssert() async {
+  Future<void> test_method_noAssert() async {
     await resolveTestUnit('''
 class A {
   foo(int x) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/add_return_type_test.dart b/pkg/analysis_server/test/src/services/correction/assist/add_return_type_test.dart
index 1024343..7f9bc17 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/add_return_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/add_return_type_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddTypeAnnotationTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.ADD_RETURN_TYPE;
 
-  test_localFunction_block() async {
+  Future<void> test_localFunction_block() async {
     await resolveTestUnit('''
 class A {
   void m() {
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_localFunction_expression() async {
+  Future<void> test_localFunction_expression() async {
     await resolveTestUnit('''
 class A {
   void m() {
@@ -58,7 +58,7 @@
 ''');
   }
 
-  test_method_block_noReturn() async {
+  Future<void> test_method_block_noReturn() async {
     await resolveTestUnit('''
 class A {
   /*caret*/m() {
@@ -68,7 +68,7 @@
     await assertNoAssist();
   }
 
-  test_method_block_returnDynamic() async {
+  Future<void> test_method_block_returnDynamic() async {
     await resolveTestUnit('''
 class A {
   /*caret*/m(p) {
@@ -79,7 +79,7 @@
     await assertNoAssist();
   }
 
-  test_method_block_returnNoValue() async {
+  Future<void> test_method_block_returnNoValue() async {
     await resolveTestUnit('''
 class A {
   /*caret*/m() {
@@ -96,7 +96,7 @@
 ''');
   }
 
-  test_method_block_singleReturn() async {
+  Future<void> test_method_block_singleReturn() async {
     await resolveTestUnit('''
 class A {
   /*caret*/m() {
@@ -113,7 +113,7 @@
 ''');
   }
 
-  test_method_expression() async {
+  Future<void> test_method_expression() async {
     await resolveTestUnit('''
 class A {
   /*caret*/m() => '';
@@ -126,7 +126,7 @@
 ''');
   }
 
-  test_topLevelFunction_block() async {
+  Future<void> test_topLevelFunction_block() async {
     await resolveTestUnit('''
 /*caret*/f() {
   return '';
@@ -139,7 +139,7 @@
 ''');
   }
 
-  test_topLevelFunction_expression() async {
+  Future<void> test_topLevelFunction_expression() async {
     await resolveTestUnit('''
 /*caret*/f() => '';
 ''');
@@ -148,7 +148,7 @@
 ''');
   }
 
-  test_topLevelFunction_expression_noAssistWithLint() async {
+  Future<void> test_topLevelFunction_expression_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.always_declare_return_types]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
diff --git a/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart
index 736d455..78926b0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/add_type_annotation_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddTypeAnnotationTest);
   });
@@ -20,18 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.ADD_TYPE_ANNOTATION;
 
-  test_classField_final_noAssistWithLint() async {
-    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
-    verifyNoTestUnitErrors = false;
-    await resolveTestUnit('''
-class A {
-  /*caret*/final f = 0;
-}
-''');
-    await assertNoAssist();
-  }
-
-  test_classField_final() async {
+  Future<void> test_classField_final() async {
     await resolveTestUnit('''
 class A {
   final f = 0;
@@ -44,7 +33,18 @@
 ''');
   }
 
-  test_classField_int() async {
+  Future<void> test_classField_final_noAssistWithLint() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    verifyNoTestUnitErrors = false;
+    await resolveTestUnit('''
+class A {
+  /*caret*/final f = 0;
+}
+''');
+    await assertNoAssist();
+  }
+
+  Future<void> test_classField_int() async {
     await resolveTestUnit('''
 class A {
   var f = 0;
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_declaredIdentifier() async {
+  Future<void> test_declaredIdentifier() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (var item in items) {
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_declaredIdentifier_addImport_dartUri() async {
+  Future<void> test_declaredIdentifier_addImport_dartUri() async {
     addSource('/home/test/lib/my_lib.dart', r'''
 import 'dart:collection';
 List<HashMap<String, int>> getMap() => null;
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_declaredIdentifier_final() async {
+  Future<void> test_declaredIdentifier_final() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (final item in items) {
@@ -118,7 +118,7 @@
 ''');
   }
 
-  test_declaredIdentifier_generic() async {
+  Future<void> test_declaredIdentifier_generic() async {
     await resolveTestUnit('''
 class A<T> {
   main(List<List<T>> items) {
@@ -137,7 +137,7 @@
 ''');
   }
 
-  test_declaredIdentifier_hasTypeAnnotation() async {
+  Future<void> test_declaredIdentifier_hasTypeAnnotation() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
@@ -147,7 +147,7 @@
     await assertNoAssistAt('item in');
   }
 
-  test_declaredIdentifier_inForEachBody() async {
+  Future<void> test_declaredIdentifier_inForEachBody() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (var item in items) {
@@ -158,7 +158,7 @@
     await assertNoAssistAt('42;');
   }
 
-  test_declaredIdentifier_unknownType() async {
+  Future<void> test_declaredIdentifier_unknownType() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main() {
@@ -169,7 +169,7 @@
     await assertNoAssistAt('item in');
   }
 
-  test_local_addImport_dartUri() async {
+  Future<void> test_local_addImport_dartUri() async {
     addSource('/home/test/lib/my_lib.dart', r'''
 import 'dart:collection';
 HashMap<String, int> getMap() => null;
@@ -190,7 +190,7 @@
 ''');
   }
 
-  test_local_addImport_notLibraryUnit() async {
+  Future<void> test_local_addImport_notLibraryUnit() async {
     addSource('/home/test/lib/my_lib.dart', r'''
 import 'dart:collection';
 HashMap<String, int> getMap() => null;
@@ -232,7 +232,7 @@
     });
   }
 
-  test_local_addImport_relUri() async {
+  Future<void> test_local_addImport_relUri() async {
     testFile = convertPath('/home/test/bin/test.dart');
     addSource('/home/test/bin/aa/bbb/lib_a.dart', r'''
 class MyClass {}
@@ -256,7 +256,7 @@
 ''');
   }
 
-  test_local_bottom() async {
+  Future<void> test_local_bottom() async {
     await resolveTestUnit('''
 main() {
   var v = throw 42;
@@ -265,7 +265,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_local_Function() async {
+  Future<void> test_local_Function() async {
     await resolveTestUnit('''
 main() {
   var v = () => 1;
@@ -278,7 +278,7 @@
 ''');
   }
 
-  test_local_generic_literal() async {
+  Future<void> test_local_generic_literal() async {
     await resolveTestUnit('''
 class A {
   main(List<int> items) {
@@ -295,7 +295,7 @@
 ''');
   }
 
-  test_local_generic_local() async {
+  Future<void> test_local_generic_local() async {
     await resolveTestUnit('''
 class A<T> {
   main(List<T> items) {
@@ -312,7 +312,7 @@
 ''');
   }
 
-  test_local_hasTypeAnnotation() async {
+  Future<void> test_local_hasTypeAnnotation() async {
     await resolveTestUnit('''
 main() {
   int v = 42;
@@ -321,7 +321,7 @@
     await assertNoAssistAt(' = 42');
   }
 
-  test_local_int() async {
+  Future<void> test_local_int() async {
     await resolveTestUnit('''
 main() {
   var v = 0;
@@ -334,7 +334,7 @@
 ''');
   }
 
-  test_local_List() async {
+  Future<void> test_local_List() async {
     await resolveTestUnit('''
 main() {
   var v = <String>[];
@@ -347,7 +347,7 @@
 ''');
   }
 
-  test_local_localType() async {
+  Future<void> test_local_localType() async {
     await resolveTestUnit('''
 class C {}
 C f() => null;
@@ -364,7 +364,7 @@
 ''');
   }
 
-  test_local_multiple() async {
+  Future<void> test_local_multiple() async {
     await resolveTestUnit('''
 main() {
   var a = 1, b = '';
@@ -373,7 +373,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_local_noValue() async {
+  Future<void> test_local_noValue() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main() {
@@ -383,7 +383,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_local_null() async {
+  Future<void> test_local_null() async {
     await resolveTestUnit('''
 main() {
   var v = null;
@@ -392,7 +392,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_local_onInitializer() async {
+  Future<void> test_local_onInitializer() async {
     await resolveTestUnit('''
 main() {
   var abc = 0;
@@ -401,7 +401,7 @@
     await assertNoAssistAt('0;');
   }
 
-  test_local_onName() async {
+  Future<void> test_local_onName() async {
     await resolveTestUnit('''
 main() {
   var abc = 0;
@@ -414,7 +414,7 @@
 ''');
   }
 
-  test_local_onVar() async {
+  Future<void> test_local_onVar() async {
     await resolveTestUnit('''
 main() {
   var v = 0;
@@ -427,7 +427,7 @@
 ''');
   }
 
-  test_local_unknown() async {
+  Future<void> test_local_unknown() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main() {
@@ -437,7 +437,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_parameter() async {
+  Future<void> test_parameter() async {
     await resolveTestUnit('''
 foo(f(int p)) {}
 main() {
@@ -452,7 +452,7 @@
 ''');
   }
 
-  test_parameter_hasExplicitType() async {
+  Future<void> test_parameter_hasExplicitType() async {
     await resolveTestUnit('''
 foo(f(int p)) {}
 main() {
@@ -462,7 +462,7 @@
     await assertNoAssistAt('test');
   }
 
-  test_parameter_noPropagatedType() async {
+  Future<void> test_parameter_noPropagatedType() async {
     await resolveTestUnit('''
 foo(f(p)) {}
 main() {
@@ -472,7 +472,7 @@
     await assertNoAssistAt('test');
   }
 
-  test_privateType_closureParameter() async {
+  Future<void> test_privateType_closureParameter() async {
     addSource('/home/test/lib/my_lib.dart', '''
 library my_lib;
 class A {}
@@ -488,7 +488,7 @@
     await assertNoAssistAt('test)');
   }
 
-  test_privateType_declaredIdentifier() async {
+  Future<void> test_privateType_declaredIdentifier() async {
     addSource('/home/test/lib/my_lib.dart', '''
 library my_lib;
 class A {}
@@ -507,7 +507,7 @@
     await assertNoAssistAt('var item');
   }
 
-  test_privateType_list() async {
+  Future<void> test_privateType_list() async {
     // This is now failing because we're suggesting "List" rather than nothing.
     // Is it really better to produce nothing?
     addSource('/home/test/lib/my_lib.dart', '''
@@ -530,7 +530,7 @@
 ''');
   }
 
-  test_privateType_sameLibrary() async {
+  Future<void> test_privateType_sameLibrary() async {
     await resolveTestUnit('''
 class _A {}
 _A getValue() => _A();
@@ -547,7 +547,7 @@
 ''');
   }
 
-  test_privateType_variable() async {
+  Future<void> test_privateType_variable() async {
     addSource('/home/test/lib/my_lib.dart', '''
 library my_lib;
 class A {}
@@ -563,7 +563,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_topLevelField_int() async {
+  Future<void> test_topLevelField_int() async {
     await resolveTestUnit('''
 var V = 0;
 ''');
@@ -572,14 +572,14 @@
 ''');
   }
 
-  test_topLevelField_multiple() async {
+  Future<void> test_topLevelField_multiple() async {
     await resolveTestUnit('''
 var A = 1, V = '';
 ''');
     await assertNoAssistAt('var ');
   }
 
-  test_topLevelField_noValue() async {
+  Future<void> test_topLevelField_noValue() async {
     await resolveTestUnit('''
 var V;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
index 1668ea4..b117de0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssignToLocalVariableTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.ASSIGN_TO_LOCAL_VARIABLE;
 
-  test_alreadyAssignment() async {
+  Future<void> test_alreadyAssignment() async {
     await resolveTestUnit('''
 main() {
   var vvv;
@@ -30,7 +30,7 @@
     await assertNoAssistAt('vvv =');
   }
 
-  test_inClosure() async {
+  Future<void> test_inClosure() async {
     await resolveTestUnit(r'''
 main() {
   print(() {
@@ -47,7 +47,7 @@
 ''');
   }
 
-  test_invocation() async {
+  Future<void> test_invocation() async {
     await resolveTestUnit('''
 main() {
   List<int> bytes;
@@ -69,7 +69,7 @@
             ['list', 'bytes2', 'readBytes']));
   }
 
-  test_invocationArgument() async {
+  Future<void> test_invocationArgument() async {
     await resolveTestUnit(r'''
 main() {
   f(12345);
@@ -79,7 +79,7 @@
     await assertNoAssistAt('345');
   }
 
-  test_throw() async {
+  Future<void> test_throw() async {
     await resolveTestUnit('''
 main() {
   throw 42;
@@ -88,7 +88,7 @@
     await assertNoAssistAt('throw ');
   }
 
-  test_void() async {
+  Future<void> test_void() async {
     await resolveTestUnit('''
 main() {
   f();
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_mixin_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_mixin_test.dart
index d2dd242..14d3271 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_mixin_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_mixin_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertClassToMixinTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_CLASS_TO_MIXIN;
 
-  test_abstract() async {
+  Future<void> test_abstract() async {
     await resolveTestUnit('''
 abstract class A {}
 ''');
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_extends_noSuper() async {
+  Future<void> test_extends_noSuper() async {
     await resolveTestUnit('''
 class A {}
 class B extends A {}
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_extends_super() async {
+  Future<void> test_extends_super() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -62,7 +62,7 @@
 ''');
   }
 
-  test_extends_superSuper() async {
+  Future<void> test_extends_superSuper() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -87,7 +87,7 @@
 ''');
   }
 
-  test_extendsImplements_noSuper() async {
+  Future<void> test_extendsImplements_noSuper() async {
     await resolveTestUnit('''
 class A {}
 class B {}
@@ -100,7 +100,7 @@
 ''');
   }
 
-  test_extendsImplements_super_extends() async {
+  Future<void> test_extendsImplements_super_extends() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -125,7 +125,7 @@
 ''');
   }
 
-  test_extendsWith_noSuper() async {
+  Future<void> test_extendsWith_noSuper() async {
     await resolveTestUnit('''
 class A {}
 class B {}
@@ -138,7 +138,7 @@
 ''');
   }
 
-  test_extendsWith_super_both() async {
+  Future<void> test_extendsWith_super_both() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -169,7 +169,7 @@
 ''');
   }
 
-  test_extendsWith_super_extends() async {
+  Future<void> test_extendsWith_super_extends() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -198,7 +198,7 @@
 ''');
   }
 
-  test_extendsWith_super_with() async {
+  Future<void> test_extendsWith_super_with() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -227,7 +227,7 @@
 ''');
   }
 
-  test_extendsWithImplements_noSuper() async {
+  Future<void> test_extendsWithImplements_noSuper() async {
     await resolveTestUnit('''
 class A {}
 class B {}
@@ -242,7 +242,7 @@
 ''');
   }
 
-  test_extendsWithImplements_super_both() async {
+  Future<void> test_extendsWithImplements_super_both() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -275,7 +275,7 @@
 ''');
   }
 
-  test_extendsWithImplements_super_extends() async {
+  Future<void> test_extendsWithImplements_super_extends() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -306,7 +306,7 @@
 ''');
   }
 
-  test_extendsWithImplements_super_with() async {
+  Future<void> test_extendsWithImplements_super_with() async {
     await resolveTestUnit('''
 class A {
   a() {}
@@ -337,7 +337,7 @@
 ''');
   }
 
-  test_implements() async {
+  Future<void> test_implements() async {
     await resolveTestUnit('''
 class A {}
 class B implements A {}
@@ -348,14 +348,14 @@
 ''');
   }
 
-  test_noClauses_invalidSelection() async {
+  Future<void> test_noClauses_invalidSelection() async {
     await resolveTestUnit('''
 class A {}
 ''');
     await assertNoAssistAt('{}');
   }
 
-  test_noClauses_selectKeyword() async {
+  Future<void> test_noClauses_selectKeyword() async {
     await resolveTestUnit('''
 class A {}
 ''');
@@ -364,7 +364,7 @@
 ''');
   }
 
-  test_noClauses_selectName() async {
+  Future<void> test_noClauses_selectName() async {
     await resolveTestUnit('''
 class A {}
 ''');
@@ -373,7 +373,7 @@
 ''');
   }
 
-  test_typeParameters() async {
+  Future<void> test_typeParameters() async {
     await resolveTestUnit('''
 class A<T> {}
 ''');
@@ -382,7 +382,7 @@
 ''');
   }
 
-  test_with_noSuper() async {
+  Future<void> test_with_noSuper() async {
     await resolveTestUnit('''
 class A {}
 class B with A {}
@@ -393,7 +393,7 @@
 ''');
   }
 
-  test_with_super() async {
+  Future<void> test_with_super() async {
     await resolveTestUnit('''
 class A {
   a() {}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_block_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_block_test.dart
index 895f645..a253255 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_block_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_block_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertDocumentationIntoBlockTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_DOCUMENTATION_INTO_BLOCK;
 
-  test_alreadyBlock() async {
+  Future<void> test_alreadyBlock() async {
     await resolveTestUnit('''
 /**
  * AAAAAAA
@@ -29,7 +29,7 @@
     await assertNoAssistAt('AAA');
   }
 
-  test_noSpaceBeforeText() async {
+  Future<void> test_noSpaceBeforeText() async {
     await resolveTestUnit('''
 class A {
   /// AAAAA
@@ -52,7 +52,7 @@
 ''');
   }
 
-  test_notDocumentation() async {
+  Future<void> test_notDocumentation() async {
     await resolveTestUnit('''
 // AAAA
 class A {}
@@ -60,7 +60,7 @@
     await assertNoAssistAt('AAA');
   }
 
-  test_onReference() async {
+  Future<void> test_onReference() async {
     await resolveTestUnit('''
 /// AAAAAAA [int] AAAAAAA
 class A {}
@@ -73,7 +73,7 @@
 ''');
   }
 
-  test_onText() async {
+  Future<void> test_onText() async {
     await resolveTestUnit('''
 class A {
   /// AAAAAAA [int] AAAAAAA
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_line_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_line_test.dart
index eb40c88..29c820b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_line_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_documentation_into_line_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertDocumentationIntoLineTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_DOCUMENTATION_INTO_LINE;
 
-  test_alreadyLine() async {
+  Future<void> test_alreadyLine() async {
     await resolveTestUnit('''
 /// AAAAAAA
 class A {}
@@ -28,7 +28,7 @@
     await assertNoAssistAt('AAA');
   }
 
-  test_hasEmptyLine() async {
+  Future<void> test_hasEmptyLine() async {
     await resolveTestUnit('''
 class A {
   /**
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_notDocumentation() async {
+  Future<void> test_notDocumentation() async {
     await resolveTestUnit('''
 /* AAAA */
 class A {}
@@ -57,7 +57,7 @@
     await assertNoAssistAt('AAA');
   }
 
-  test_onReference() async {
+  Future<void> test_onReference() async {
     await resolveTestUnit('''
 /**
  * AAAAAAA [int] AAAAAAA
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_onText() async {
+  Future<void> test_onText() async {
     await resolveTestUnit('''
 class A {
   /**
@@ -91,23 +91,7 @@
 ''');
   }
 
-  test_onText_noAssistWithLint() async {
-    createAnalysisOptionsFile(lints: [LintNames.slash_for_doc_comments]);
-    verifyNoTestUnitErrors = false;
-    await resolveTestUnit('''
-class A {
-  /**
-   * AAAAAAA [int] AAAAAAA
-   * BBBBBBBB BBBB BBBB
-   * CCC [A] CCCCCCCCCCC
-   */
-  mmm() {}
-}
-''');
-    await assertNoAssist();
-  }
-
-  test_onText_hasFirstLine() async {
+  Future<void> test_onText_hasFirstLine() async {
     await resolveTestUnit('''
 class A {
   /** AAAAAAA [int] AAAAAAA
@@ -127,7 +111,23 @@
 ''');
   }
 
-  test_preserveIndentation() async {
+  Future<void> test_onText_noAssistWithLint() async {
+    createAnalysisOptionsFile(lints: [LintNames.slash_for_doc_comments]);
+    verifyNoTestUnitErrors = false;
+    await resolveTestUnit('''
+class A {
+  /**
+   * AAAAAAA [int] AAAAAAA
+   * BBBBBBBB BBBB BBBB
+   * CCC [A] CCCCCCCCCCC
+   */
+  mmm() {}
+}
+''');
+    await assertNoAssist();
+  }
+
+  Future<void> test_preserveIndentation() async {
     await resolveTestUnit('''
 class A {
   /**
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
index 5e430f9..117edae 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoAsyncBodyTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_ASYNC_BODY;
 
-  test_async() async {
+  Future<void> test_async() async {
     await resolveTestUnit('''
 import 'dart:async';
 Future<String> f() async => '';
@@ -27,7 +27,7 @@
     await assertNoAssistAt('=>');
   }
 
-  test_asyncStar() async {
+  Future<void> test_asyncStar() async {
     await resolveTestUnit('''
 import 'dart:async';
 Stream<String> f() async* {}
@@ -35,7 +35,7 @@
     await assertNoAssistAt('{}');
   }
 
-  test_closure() async {
+  Future<void> test_closure() async {
     await resolveTestUnit('''
 main() {
   f(() => 123);
@@ -50,7 +50,7 @@
 ''');
   }
 
-  test_constructor() async {
+  Future<void> test_constructor() async {
     await resolveTestUnit('''
 class C {
   C() {}
@@ -59,7 +59,7 @@
     await assertNoAssistAt('{}');
   }
 
-  test_function() async {
+  Future<void> test_function() async {
     await resolveTestUnit('''
 String f() => '';
 ''');
@@ -68,7 +68,7 @@
 ''');
   }
 
-  test_getter_expression_noSpace() async {
+  Future<void> test_getter_expression_noSpace() async {
     await resolveTestUnit('''
 class C {
   int get g=>0;
@@ -81,7 +81,7 @@
 ''');
   }
 
-  test_inBody_block() async {
+  Future<void> test_inBody_block() async {
     await resolveTestUnit('''
 class C {
   void foo() {
@@ -92,7 +92,7 @@
     await assertNoAssistAt('print');
   }
 
-  test_inBody_expression() async {
+  Future<void> test_inBody_expression() async {
     await resolveTestUnit('''
 class C {
   void foo() => print(42);
@@ -101,7 +101,7 @@
     await assertNoAssistAt('print');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 class C {
   int m() { return 0; }
@@ -114,7 +114,7 @@
 ''');
   }
 
-  test_method_abstract() async {
+  Future<void> test_method_abstract() async {
     await resolveTestUnit('''
 abstract class C {
   int m();
@@ -123,7 +123,7 @@
     await assertNoAssist();
   }
 
-  test_method_noReturnType() async {
+  Future<void> test_method_noReturnType() async {
     await resolveTestUnit('''
 class C {
   m() { return 0; }
@@ -136,7 +136,7 @@
 ''');
   }
 
-  test_syncStar() async {
+  Future<void> test_syncStar() async {
     await resolveTestUnit('''
 Iterable<String> f() sync* {}
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
index 4d3fa9c..cffee7e 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoBlockBodyTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_BLOCK_BODY;
 
-  test_async() async {
+  Future<void> test_async() async {
     await resolveTestUnit('''
 class A {
   mmm() async => 123;
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_closure() async {
+  Future<void> test_closure() async {
     await resolveTestUnit('''
 setup(x) {}
 main() {
@@ -52,7 +52,7 @@
     assertExitPosition(after: '42;');
   }
 
-  test_closure_voidExpression() async {
+  Future<void> test_closure_voidExpression() async {
     await resolveTestUnit('''
 setup(x) {}
 main() {
@@ -70,7 +70,7 @@
     assertExitPosition(after: "');");
   }
 
-  test_constructor() async {
+  Future<void> test_constructor() async {
     await resolveTestUnit('''
 class A {
   factory A() => null;
@@ -85,14 +85,14 @@
 ''');
   }
 
-  test_inExpression() async {
+  Future<void> test_inExpression() async {
     await resolveTestUnit('''
 main() => 123;
 ''');
     await assertNoAssistAt('123;');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 class A {
   mmm() => 123;
@@ -107,14 +107,14 @@
 ''');
   }
 
-  test_noEnclosingFunction() async {
+  Future<void> test_noEnclosingFunction() async {
     await resolveTestUnit('''
 var v = 123;
 ''');
     await assertNoAssistAt('v =');
   }
 
-  test_notExpressionBlock() async {
+  Future<void> test_notExpressionBlock() async {
     await resolveTestUnit('''
 fff() {
   return 123;
@@ -123,7 +123,7 @@
     await assertNoAssistAt('fff() {');
   }
 
-  test_onArrow() async {
+  Future<void> test_onArrow() async {
     await resolveTestUnit('''
 fff() => 123;
 ''');
@@ -134,7 +134,7 @@
 ''');
   }
 
-  test_onName() async {
+  Future<void> test_onName() async {
     await resolveTestUnit('''
 fff() => 123;
 ''');
@@ -145,7 +145,7 @@
 ''');
   }
 
-  test_throw() async {
+  Future<void> test_throw() async {
     await resolveTestUnit('''
 class A {
   mmm() => throw 'error';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart
index c5cb328..20b2a68 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoExpressionBodyTest);
   });
@@ -20,14 +20,14 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_EXPRESSION_BODY;
 
-  test_already() async {
+  Future<void> test_already() async {
     await resolveTestUnit('''
 fff() => 42;
 ''');
     await assertNoAssistAt('fff()');
   }
 
-  test_async() async {
+  Future<void> test_async() async {
     await resolveTestUnit('''
 class A {
   mmm() async {
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_async_noAssistWithLint() async {
+  Future<void> test_async_noAssistWithLint() async {
     createAnalysisOptionsFile(
         lints: [LintNames.prefer_expression_function_bodies]);
     verifyNoTestUnitErrors = false;
@@ -56,7 +56,7 @@
     await assertNoAssist();
   }
 
-  test_closure() async {
+  Future<void> test_closure() async {
     await resolveTestUnit('''
 setup(x) {}
 main() {
@@ -73,7 +73,7 @@
 ''');
   }
 
-  test_closure_voidExpression() async {
+  Future<void> test_closure_voidExpression() async {
     await resolveTestUnit('''
 setup(x) {}
 main() {
@@ -90,7 +90,7 @@
 ''');
   }
 
-  test_constructor() async {
+  Future<void> test_constructor() async {
     await resolveTestUnit('''
 class A {
   factory A() {
@@ -105,7 +105,7 @@
 ''');
   }
 
-  test_function_onBlock() async {
+  Future<void> test_function_onBlock() async {
     await resolveTestUnit('''
 fff() {
   return 42;
@@ -116,7 +116,7 @@
 ''');
   }
 
-  test_function_onName() async {
+  Future<void> test_function_onName() async {
     await resolveTestUnit('''
 fff() {
   return 42;
@@ -127,7 +127,7 @@
 ''');
   }
 
-  test_inExpression() async {
+  Future<void> test_inExpression() async {
     await resolveTestUnit('''
 main() {
   return 42;
@@ -136,7 +136,7 @@
     await assertNoAssistAt('42;');
   }
 
-  test_method_onBlock() async {
+  Future<void> test_method_onBlock() async {
     await resolveTestUnit('''
 class A {
   m() { // marker
@@ -151,7 +151,7 @@
 ''');
   }
 
-  test_moreThanOneStatement() async {
+  Future<void> test_moreThanOneStatement() async {
     await resolveTestUnit('''
 fff() {
   var v = 42;
@@ -161,14 +161,14 @@
     await assertNoAssistAt('fff()');
   }
 
-  test_noEnclosingFunction() async {
+  Future<void> test_noEnclosingFunction() async {
     await resolveTestUnit('''
 var V = 42;
 ''');
     await assertNoAssistAt('V = ');
   }
 
-  test_noReturn() async {
+  Future<void> test_noReturn() async {
     await resolveTestUnit('''
 fff() {
   var v = 42;
@@ -177,7 +177,7 @@
     await assertNoAssistAt('fff()');
   }
 
-  test_noReturnValue() async {
+  Future<void> test_noReturnValue() async {
     await resolveTestUnit('''
 fff() {
   return;
@@ -186,7 +186,7 @@
     await assertNoAssistAt('fff()');
   }
 
-  test_topFunction_onReturnStatement() async {
+  Future<void> test_topFunction_onReturnStatement() async {
     await resolveTestUnit('''
 fff() {
   return 42;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_final_field_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_final_field_test.dart
index 4fa51fa..b81362d 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_final_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_final_field_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoFinalFieldTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_FINAL_FIELD;
 
-  test_blockBody_onlyReturnStatement() async {
+  Future<void> test_blockBody_onlyReturnStatement() async {
     await resolveTestUnit('''
 class A {
   int get foo {
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_hasOverride() async {
+  Future<void> test_hasOverride() async {
     await resolveTestUnit('''
 const myAnnotation = const Object();
 class A {
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_hasSetter_inSuper() async {
+  Future<void> test_hasSetter_inSuper() async {
     await resolveTestUnit('''
 class A {
   void set foo(_) {}
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_hasSetter_inThisClass() async {
+  Future<void> test_hasSetter_inThisClass() async {
     await resolveTestUnit('''
 class A {
   int get foo => null;
@@ -80,7 +80,7 @@
     await assertNoAssistAt('get foo');
   }
 
-  test_noReturnType() async {
+  Future<void> test_noReturnType() async {
     await resolveTestUnit('''
 class A {
   get foo => 42;
@@ -93,7 +93,7 @@
 ''');
   }
 
-  test_noReturnType_static() async {
+  Future<void> test_noReturnType_static() async {
     await resolveTestUnit('''
 class A {
   static get foo => 42;
@@ -106,7 +106,7 @@
 ''');
   }
 
-  test_notExpressionBody() async {
+  Future<void> test_notExpressionBody() async {
     await resolveTestUnit('''
 class A {
   int get foo {
@@ -118,7 +118,7 @@
     await assertNoAssistAt('get foo');
   }
 
-  test_notGetter() async {
+  Future<void> test_notGetter() async {
     await resolveTestUnit('''
 class A {
   int foo() => 42;
@@ -127,7 +127,7 @@
     await assertNoAssistAt('foo');
   }
 
-  test_notNull() async {
+  Future<void> test_notNull() async {
     await resolveTestUnit('''
 class A {
   int get foo => 1 + 2;
@@ -140,7 +140,7 @@
 ''');
   }
 
-  test_null() async {
+  Future<void> test_null() async {
     await resolveTestUnit('''
 class A {
   int get foo => null;
@@ -153,7 +153,7 @@
 ''');
   }
 
-  test_onName() async {
+  Future<void> test_onName() async {
     await resolveTestUnit('''
 class A {
   int get foo => 42;
@@ -166,7 +166,7 @@
 ''');
   }
 
-  test_onReturnType_parameterized() async {
+  Future<void> test_onReturnType_parameterized() async {
     await resolveTestUnit('''
 class A {
   List<int> get foo => null;
@@ -179,7 +179,7 @@
 ''');
   }
 
-  test_onReturnType_simple() async {
+  Future<void> test_onReturnType_simple() async {
     await resolveTestUnit('''
 class A {
   int get foo => 42;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_for_index_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_for_index_test.dart
index 5816d3a..dc0a9e3 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_for_index_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_for_index_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoForIndexTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_FOR_INDEX;
 
-  test_bodyNotBlock() async {
+  Future<void> test_bodyNotBlock() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) print(item);
@@ -28,7 +28,7 @@
     await assertNoAssistAt('for (String');
   }
 
-  test_doesNotDeclareVariable() async {
+  Future<void> test_doesNotDeclareVariable() async {
     await resolveTestUnit('''
 main(List<String> items) {
   String item;
@@ -40,7 +40,7 @@
     await assertNoAssistAt('for (item');
   }
 
-  test_iterableIsNotVariable() async {
+  Future<void> test_iterableIsNotVariable() async {
     await resolveTestUnit('''
 main() {
   for (String item in ['a', 'b', 'c']) {
@@ -51,7 +51,7 @@
     await assertNoAssistAt('for (String');
   }
 
-  test_iterableNotList() async {
+  Future<void> test_iterableNotList() async {
     await resolveTestUnit('''
 main(Iterable<String> items) {
   for (String item in items) {
@@ -62,7 +62,7 @@
     await assertNoAssistAt('for (String');
   }
 
-  test_onDeclaredIdentifier_name() async {
+  Future<void> test_onDeclaredIdentifier_name() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_onDeclaredIdentifier_type() async {
+  Future<void> test_onDeclaredIdentifier_type() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
@@ -98,7 +98,7 @@
 ''');
   }
 
-  test_onFor() async {
+  Future<void> test_onFor() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
@@ -116,7 +116,7 @@
 ''');
   }
 
-  test_usesI() async {
+  Future<void> test_usesI() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
@@ -134,7 +134,7 @@
 ''');
   }
 
-  test_usesIJ() async {
+  Future<void> test_usesIJ() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
@@ -154,7 +154,7 @@
 ''');
   }
 
-  test_usesIJK() async {
+  Future<void> test_usesIJK() async {
     await resolveTestUnit('''
 main(List<String> items) {
   for (String item in items) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_generic_function_syntax_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_generic_function_syntax_test.dart
index e9b034e..8ae79a7 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_generic_function_syntax_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_generic_function_syntax_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoGenericFunctionSyntaxTest);
   });
@@ -19,21 +19,21 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_GENERIC_FUNCTION_SYNTAX;
 
-  test_functionTypeAlias_insideParameterList() async {
+  Future<void> test_functionTypeAlias_insideParameterList() async {
     await resolveTestUnit('''
 typedef String F(int x, int y);
 ''');
     await assertNoAssistAt('x,');
   }
 
-  test_functionTypeAlias_noParameterTypes() async {
+  Future<void> test_functionTypeAlias_noParameterTypes() async {
     await resolveTestUnit('''
 typedef String F(x);
 ''');
     await assertNoAssistAt('def');
   }
 
-  test_functionTypeAlias_noReturnType_noTypeParameters() async {
+  Future<void> test_functionTypeAlias_noReturnType_noTypeParameters() async {
     await resolveTestUnit('''
 typedef String F(int x);
 ''');
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_functionTypeAlias_noReturnType_typeParameters() async {
+  Future<void> test_functionTypeAlias_noReturnType_typeParameters() async {
     await resolveTestUnit('''
 typedef F<P, R>(P x);
 ''');
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_functionTypeAlias_returnType_noTypeParameters() async {
+  Future<void> test_functionTypeAlias_returnType_noTypeParameters() async {
     await resolveTestUnit('''
 typedef String F(int x);
 ''');
@@ -60,7 +60,7 @@
 ''');
   }
 
-  test_functionTypeAlias_returnType_typeParameters() async {
+  Future<void> test_functionTypeAlias_returnType_typeParameters() async {
     await resolveTestUnit('''
 typedef R F<P, R>(P x);
 ''');
@@ -69,21 +69,22 @@
 ''');
   }
 
-  test_functionTypedParameter_insideParameterList() async {
+  Future<void> test_functionTypedParameter_insideParameterList() async {
     await resolveTestUnit('''
 g(String f(int x, int y)) {}
 ''');
     await assertNoAssistAt('x,');
   }
 
-  test_functionTypedParameter_noParameterTypes() async {
+  Future<void> test_functionTypedParameter_noParameterTypes() async {
     await resolveTestUnit('''
 g(String f(x)) {}
 ''');
     await assertNoAssistAt('f(');
   }
 
-  test_functionTypedParameter_noReturnType_noTypeParameters() async {
+  Future<void>
+      test_functionTypedParameter_noReturnType_noTypeParameters() async {
     await resolveTestUnit('''
 g(f(int x)) {}
 ''');
@@ -92,7 +93,7 @@
 ''');
   }
 
-  test_functionTypedParameter_returnType() async {
+  Future<void> test_functionTypedParameter_returnType() async {
     await resolveTestUnit('''
 g(String f(int x)) {}
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_getter_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_getter_test.dart
index f3348c2..48f5200 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_getter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_getter_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoGetterTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_GETTER;
 
-  test_noInitializer() async {
+  Future<void> test_noInitializer() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 class A {
@@ -29,7 +29,7 @@
     await assertNoAssistAt('foo');
   }
 
-  test_notFinal() async {
+  Future<void> test_notFinal() async {
     await resolveTestUnit('''
 class A {
   int foo = 1;
@@ -38,7 +38,7 @@
     await assertNoAssistAt('foo');
   }
 
-  test_notSingleField() async {
+  Future<void> test_notSingleField() async {
     await resolveTestUnit('''
 class A {
   final int foo = 1, bar = 2;
@@ -47,7 +47,7 @@
     await assertNoAssistAt('foo');
   }
 
-  test_noType() async {
+  Future<void> test_noType() async {
     await resolveTestUnit('''
 class A {
   final foo = 42;
@@ -60,7 +60,7 @@
 ''');
   }
 
-  test_type() async {
+  Future<void> test_type() async {
     await resolveTestUnit('''
 const myAnnotation = const Object();
 class A {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_empty_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_empty_test.dart
index cd522a7..18b1e53 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_empty_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_empty_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoIsNotEmptyTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_IS_NOT_EMPTY;
 
-  test_noBang() async {
+  Future<void> test_noBang() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main(String str) {
@@ -29,7 +29,7 @@
     await assertNoAssistAt('isEmpty;');
   }
 
-  test_noIsNotEmpty() async {
+  Future<void> test_noIsNotEmpty() async {
     await resolveTestUnit('''
 class A {
   bool get isEmpty => false;
@@ -41,7 +41,7 @@
     await assertNoAssistAt('isEmpty;');
   }
 
-  test_notInPrefixExpression() async {
+  Future<void> test_notInPrefixExpression() async {
     await resolveTestUnit('''
 main(String str) {
   str.isEmpty;
@@ -50,7 +50,7 @@
     await assertNoAssistAt('isEmpty;');
   }
 
-  test_notIsEmpty() async {
+  Future<void> test_notIsEmpty() async {
     await resolveTestUnit('''
 main(int p) {
   !p.isEven;
@@ -59,7 +59,7 @@
     await assertNoAssistAt('isEven;');
   }
 
-  test_on_isEmpty() async {
+  Future<void> test_on_isEmpty() async {
     await resolveTestUnit('''
 main(String str) {
   !str.isEmpty;
@@ -72,7 +72,7 @@
 ''');
   }
 
-  test_on_str() async {
+  Future<void> test_on_str() async {
     await resolveTestUnit('''
 main(String str) {
   !str.isEmpty;
@@ -85,7 +85,7 @@
 ''');
   }
 
-  test_propertyAccess() async {
+  Future<void> test_propertyAccess() async {
     await resolveTestUnit('''
 main(String str) {
   !'text'.isEmpty;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_test.dart
index f7e1ae1..a729944 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_is_not_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoIsNotTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_INTO_IS_NOT;
 
-  test_childOfIs_left() async {
+  Future<void> test_childOfIs_left() async {
     await resolveTestUnit('''
 main(p) {
   !(p is String);
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_childOfIs_right() async {
+  Future<void> test_childOfIs_right() async {
     await resolveTestUnit('''
 main(p) {
   !(p is String);
@@ -45,7 +45,7 @@
 ''');
   }
 
-  test_is() async {
+  Future<void> test_is() async {
     await resolveTestUnit('''
 main(p) {
   !(p is String);
@@ -58,7 +58,7 @@
 ''');
   }
 
-  test_is_alreadyIsNot() async {
+  Future<void> test_is_alreadyIsNot() async {
     await resolveTestUnit('''
 main(p) {
   p is! String;
@@ -67,7 +67,7 @@
     await assertNoAssistAt('is!');
   }
 
-  test_is_higherPrecedencePrefix() async {
+  Future<void> test_is_higherPrecedencePrefix() async {
     await resolveTestUnit('''
 main(p) {
   !!(p is String);
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_is_noEnclosingParenthesis() async {
+  Future<void> test_is_noEnclosingParenthesis() async {
     await resolveTestUnit('''
 main(p) {
   p is String;
@@ -89,7 +89,7 @@
     await assertNoAssistAt('is String');
   }
 
-  test_is_noPrefix() async {
+  Future<void> test_is_noPrefix() async {
     await resolveTestUnit('''
 main(p) {
   (p is String);
@@ -98,7 +98,7 @@
     await assertNoAssistAt('is String');
   }
 
-  test_is_not_higherPrecedencePrefix() async {
+  Future<void> test_is_not_higherPrecedencePrefix() async {
     await resolveTestUnit('''
 main(p) {
   !!(p is String);
@@ -111,7 +111,7 @@
 ''');
   }
 
-  test_is_notIsExpression() async {
+  Future<void> test_is_notIsExpression() async {
     await resolveTestUnit('''
 main(p) {
   123 + 456;
@@ -120,7 +120,7 @@
     await assertNoAssistAt('123 +');
   }
 
-  test_is_notTheNotOperator() async {
+  Future<void> test_is_notTheNotOperator() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main(p) {
@@ -130,7 +130,7 @@
     await assertNoAssistAt('is String');
   }
 
-  test_not() async {
+  Future<void> test_not() async {
     await resolveTestUnit('''
 main(p) {
   !(p is String);
@@ -143,7 +143,7 @@
 ''');
   }
 
-  test_not_alreadyIsNot() async {
+  Future<void> test_not_alreadyIsNot() async {
     await resolveTestUnit('''
 main(p) {
   !(p is! String);
@@ -152,7 +152,7 @@
     await assertNoAssistAt('!(p');
   }
 
-  test_not_noEnclosingParenthesis() async {
+  Future<void> test_not_noEnclosingParenthesis() async {
     await resolveTestUnit('''
 main(p) {
   !p;
@@ -161,7 +161,7 @@
     await assertNoAssistAt('!p');
   }
 
-  test_not_notIsExpression() async {
+  Future<void> test_not_notIsExpression() async {
     await resolveTestUnit('''
 main(p) {
   !(p == null);
@@ -170,7 +170,7 @@
     await assertNoAssistAt('!(p');
   }
 
-  test_not_notTheNotOperator() async {
+  Future<void> test_not_notTheNotOperator() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main(p) {
@@ -180,7 +180,7 @@
     await assertNoAssistAt('++(');
   }
 
-  test_parentheses() async {
+  Future<void> test_parentheses() async {
     await resolveTestUnit('''
 main(p) {
   !(p is String);
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart
index 0dc747a..b09a195 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertPartOfToUriTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_PART_OF_TO_URI;
 
-  test_nonSibling() async {
+  Future<void> test_nonSibling() async {
     addSource('/home/test/lib/foo.dart', '''
 library foo;
 part 'src/bar.dart';
@@ -33,7 +33,7 @@
 ''');
   }
 
-  test_sibling() async {
+  Future<void> test_sibling() async {
     addSource('/home/test/lib/foo.dart', '''
 library foo;
 part 'bar.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_double_quoted_string_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_double_quoted_string_test.dart
index 5711b07..f031a25 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_double_quoted_string_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_double_quoted_string_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToDoubleQuotedStringTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING;
 
-  test_one_embeddedTarget() async {
+  Future<void> test_one_embeddedTarget() async {
     await resolveTestUnit('''
 main() {
   print('a"b"c');
@@ -28,7 +28,7 @@
     await assertNoAssistAt("'a");
   }
 
-  test_one_enclosingTarget() async {
+  Future<void> test_one_enclosingTarget() async {
     await resolveTestUnit('''
 main() {
   print("abc");
@@ -37,7 +37,7 @@
     await assertNoAssistAt('"ab');
   }
 
-  test_one_interpolation() async {
+  Future<void> test_one_interpolation() async {
     await resolveTestUnit(r'''
 main() {
   var b = 'b';
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_one_raw() async {
+  Future<void> test_one_raw() async {
     await resolveTestUnit('''
 main() {
   print(r'abc');
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_one_simple() async {
+  Future<void> test_one_simple() async {
     await resolveTestUnit('''
 main() {
   print('abc');
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_three_embeddedTarget() async {
+  Future<void> test_three_embeddedTarget() async {
     await resolveTestUnit("""
 main() {
   print('''a""\"c''');
@@ -89,7 +89,7 @@
     await assertNoAssistAt("'a");
   }
 
-  test_three_enclosingTarget() async {
+  Future<void> test_three_enclosingTarget() async {
     await resolveTestUnit('''
 main() {
   print("""abc""");
@@ -98,7 +98,7 @@
     await assertNoAssistAt('"ab');
   }
 
-  test_three_interpolation() async {
+  Future<void> test_three_interpolation() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -115,7 +115,7 @@
 ''');
   }
 
-  test_three_raw() async {
+  Future<void> test_three_raw() async {
     await resolveTestUnit("""
 main() {
   print(r'''abc''');
@@ -128,7 +128,7 @@
 ''');
   }
 
-  test_three_simple() async {
+  Future<void> test_three_simple() async {
     await resolveTestUnit("""
 main() {
   print('''abc''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_field_parameter_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_field_parameter_test.dart
index 2cf9958..8ff735a 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_field_parameter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_field_parameter_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToFieldParameterTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_FIELD_PARAMETER;
 
-  test_additionalUse() async {
+  Future<void> test_additionalUse() async {
     await resolveTestUnit('''
 class A {
   int aaa2;
@@ -30,7 +30,7 @@
     await assertNoAssistAt('aaa)');
   }
 
-  test_firstInitializer() async {
+  Future<void> test_firstInitializer() async {
     await resolveTestUnit('''
 class A {
   int aaa2;
@@ -47,7 +47,7 @@
 ''');
   }
 
-  test_notPureAssignment() async {
+  Future<void> test_notPureAssignment() async {
     await resolveTestUnit('''
 class A {
   int aaa2;
@@ -57,7 +57,7 @@
     await assertNoAssistAt('aaa)');
   }
 
-  test_onParameterName_inInitializer() async {
+  Future<void> test_onParameterName_inInitializer() async {
     await resolveTestUnit('''
 class A {
   int test2;
@@ -74,7 +74,7 @@
 ''');
   }
 
-  test_onParameterName_inParameters() async {
+  Future<void> test_onParameterName_inParameters() async {
     await resolveTestUnit('''
 class A {
   int test;
@@ -91,7 +91,7 @@
 ''');
   }
 
-  test_secondInitializer() async {
+  Future<void> test_secondInitializer() async {
     await resolveTestUnit('''
 class A {
   int aaa2;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_for_element_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_for_element_test.dart
index 001ae73..3dfe23e 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_for_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_for_element_test.dart
@@ -10,7 +10,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToIfElementTest);
   });
@@ -28,7 +28,7 @@
     super.setUp();
   }
 
-  test_mapFromIterable_complexKey() async {
+  Future<void> test_mapFromIterable_complexKey() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, key: (e) {
@@ -40,7 +40,7 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_complexValue() async {
+  Future<void> test_mapFromIterable_complexValue() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, key: (e) => e * 2, value: (e) {
@@ -52,7 +52,8 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_differentParameterNames_usedInKey_conflictInValue() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInKey_conflictInValue() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   var k = 3;
@@ -67,7 +68,8 @@
 ''');
   }
 
-  test_mapFromIterable_differentParameterNames_usedInKey_conflictInValue_noAssistWithLint() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInKey_conflictInValue_noAssistWithLint() async {
     createAnalysisOptionsFile(
         lints: [LintNames.prefer_for_elements_to_map_fromIterable]);
     verifyNoTestUnitErrors = false;
@@ -80,7 +82,8 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_differentParameterNames_usedInKey_noConflictInValue() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInKey_noConflictInValue() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, key: (k) => k * 2, value: (v) => 0);
@@ -93,7 +96,8 @@
 ''');
   }
 
-  test_mapFromIterable_differentParameterNames_usedInKeyAndValue_conflictWithDefault() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInKeyAndValue_conflictWithDefault() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   var e = 2;
@@ -108,7 +112,8 @@
 ''');
   }
 
-  test_mapFromIterable_differentParameterNames_usedInKeyAndValue_noConflictWithDefault() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInKeyAndValue_noConflictWithDefault() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, key: (k) => k * 2, value: (v) => v + 3);
@@ -121,7 +126,8 @@
 ''');
   }
 
-  test_mapFromIterable_differentParameterNames_usedInValue_conflictInKey() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInValue_conflictInKey() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   int v = 0;
@@ -136,7 +142,8 @@
 ''');
   }
 
-  test_mapFromIterable_differentParameterNames_usedInValue_noConflictInKey() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInValue_noConflictInKey() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   int index = 0;
@@ -151,7 +158,7 @@
 ''');
   }
 
-  test_mapFromIterable_missingKey() async {
+  Future<void> test_mapFromIterable_missingKey() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, value: (e) => e + 3);
@@ -160,7 +167,7 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_missingKeyAndValue() async {
+  Future<void> test_mapFromIterable_missingKeyAndValue() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i);
@@ -169,7 +176,7 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_missingValue() async {
+  Future<void> test_mapFromIterable_missingValue() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, key: (e) => e * 2);
@@ -178,7 +185,7 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_notMapFromIterable() async {
+  Future<void> test_mapFromIterable_notMapFromIterable() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return A.fromIt/*caret*/erable(i, key: (e) => e * 2, value: (e) => e + 3);
@@ -190,7 +197,7 @@
     await assertNoAssist();
   }
 
-  test_mapFromIterable_sameParameterNames() async {
+  Future<void> test_mapFromIterable_sameParameterNames() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   return Map.fromIt/*caret*/erable(i, key: (e) => e * 2, value: (e) => e + 3);
@@ -203,7 +210,7 @@
 ''');
   }
 
-  test_undefinedConstructor() async {
+  Future<void> test_undefinedConstructor() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 f() {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_if_element_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_if_element_test.dart
index 1a72f27..be17326 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_if_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_if_element_test.dart
@@ -10,7 +10,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToIfElementTest);
   });
@@ -28,7 +28,7 @@
     super.setUp();
   }
 
-  test_conditional_list() async {
+  Future<void> test_conditional_list() async {
     await resolveTestUnit('''
 f(bool b) {
   return ['a', b /*caret*/? 'c' : 'd', 'e'];
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_conditional_list_caret_at_start_of_expression() async {
+  Future<void> test_conditional_list_caret_at_start_of_expression() async {
     await resolveTestUnit('''
 f(bool b) {
   return ['a', /*caret*/b ? 'c' : 'd', 'e'];
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_conditional_list_noAssistWithLint() async {
+  Future<void> test_conditional_list_noAssistWithLint() async {
     createAnalysisOptionsFile(
         lints: [LintNames.prefer_if_elements_to_conditional_expressions]);
     verifyNoTestUnitErrors = false;
@@ -66,7 +66,7 @@
     await assertNoAssist();
   }
 
-  test_conditional_list_withParentheses() async {
+  Future<void> test_conditional_list_withParentheses() async {
     await resolveTestUnit('''
 f(bool b) {
   return ['a', (b /*caret*/? 'c' : 'd'), 'e'];
@@ -79,7 +79,7 @@
 ''');
   }
 
-  test_conditional_map() async {
+  Future<void> test_conditional_map() async {
     await resolveTestUnit('''
 f(bool b) {
   return {'a' : 1, b /*caret*/? 'c' : 'd' : 2, 'e' : 3};
@@ -88,7 +88,7 @@
     await assertNoAssist();
   }
 
-  test_conditional_notConditional() async {
+  Future<void> test_conditional_notConditional() async {
     await resolveTestUnit('''
 f(bool b) {
   return {'/*caret*/a', b ? 'c' : 'd', 'e'};
@@ -97,7 +97,7 @@
     await assertNoAssist();
   }
 
-  test_conditional_notInLiteral() async {
+  Future<void> test_conditional_notInLiteral() async {
     await resolveTestUnit('''
 f(bool b) {
   return b /*caret*/? 'c' : 'd';
@@ -106,7 +106,7 @@
     await assertNoAssist();
   }
 
-  test_conditional_set() async {
+  Future<void> test_conditional_set() async {
     await resolveTestUnit('''
 f(bool b) {
   return {'a', b /*caret*/? 'c' : 'd', 'e'};
@@ -119,7 +119,7 @@
 ''');
   }
 
-  test_conditional_set_withParentheses() async {
+  Future<void> test_conditional_set_withParentheses() async {
     await resolveTestUnit('''
 f(bool b) {
   return {'a', ((b /*caret*/? 'c' : 'd')), 'e'};
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_int_literal_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_int_literal_test.dart
index b1137ac..ae6bb6c 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_int_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_int_literal_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToIntLiteralTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_INT_LITERAL;
 
-  test_decimal() async {
+  Future<void> test_decimal() async {
     await resolveTestUnit('''
 const double myDouble = /*caret*/42.0;
 ''');
@@ -29,7 +29,7 @@
 ''');
   }
 
-  test_decimal_noAssistWithLint() async {
+  Future<void> test_decimal_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_int_literals]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -38,14 +38,14 @@
     await assertNoAssist();
   }
 
-  test_notDouble() async {
+  Future<void> test_notDouble() async {
     await resolveTestUnit('''
 const double myDouble = /*caret*/42;
 ''');
     await assertNoAssist();
   }
 
-  test_scientific() async {
+  Future<void> test_scientific() async {
     await resolveTestUnit('''
 const double myDouble = /*caret*/4.2e1;
 ''');
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_tooBig() async {
+  Future<void> test_tooBig() async {
     await resolveTestUnit('''
 const double myDouble = /*caret*/4.2e99999;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_list_literal_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_list_literal_test.dart
index a9b106e..71a49aa 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_list_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_list_literal_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToListLiteralTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_LIST_LITERAL;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 List l = Li/*caret*/st();
 ''');
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_default_minimal() async {
+  Future<void> test_default_minimal() async {
     await resolveTestUnit('''
 var l = Li/*caret*/st();
 ''');
@@ -37,7 +37,7 @@
 ''');
   }
 
-  test_default_newKeyword() async {
+  Future<void> test_default_newKeyword() async {
     await resolveTestUnit('''
 var l = new Li/*caret*/st();
 ''');
@@ -46,14 +46,14 @@
 ''');
   }
 
-  test_default_tooManyArguments() async {
+  Future<void> test_default_tooManyArguments() async {
     await resolveTestUnit('''
 var l = Li/*caret*/st(5);
 ''');
     await assertNoAssist();
   }
 
-  test_default_typeArg() async {
+  Future<void> test_default_typeArg() async {
     await resolveTestUnit('''
 var l = Li/*caret*/st<int>();
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_map_literal_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_map_literal_test.dart
index 150b545..22549b0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_map_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_map_literal_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToMapLiteralTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_MAP_LITERAL;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 Map m = Ma/*caret*/p();
 ''');
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_default_linkedHashMap() async {
+  Future<void> test_default_linkedHashMap() async {
     await resolveTestUnit('''
 import 'dart:collection';
 var m = LinkedHashMa/*caret*/p();
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_default_minimal() async {
+  Future<void> test_default_minimal() async {
     await resolveTestUnit('''
 var m = Ma/*caret*/p();
 ''');
@@ -48,7 +48,7 @@
 ''');
   }
 
-  test_default_newKeyword() async {
+  Future<void> test_default_newKeyword() async {
     await resolveTestUnit('''
 var m = new Ma/*caret*/p();
 ''');
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_default_typeArg() async {
+  Future<void> test_default_typeArg() async {
     await resolveTestUnit('''
 var m = Ma/*caret*/p<String, int>();
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_multiline_string_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_multiline_string_test.dart
index 1410b85..66fd199 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_multiline_string_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_multiline_string_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToMultilineStringTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_MULTILINE_STRING;
 
-  test_doubleQuoted() async {
+  Future<void> test_doubleQuoted() async {
     await resolveTestUnit('''
 main() {
   print("abc");
@@ -33,7 +33,7 @@
 ''');
   }
 
-  test_doubleQuoted_alreadyMultiline() async {
+  Future<void> test_doubleQuoted_alreadyMultiline() async {
     await resolveTestUnit('''
 main() {
   print("""abc""");
@@ -42,7 +42,7 @@
     await assertNoAssistAt('abc');
   }
 
-  test_doubleQuoted_interpolation_expressionElement() async {
+  Future<void> test_doubleQuoted_interpolation_expressionElement() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -53,7 +53,7 @@
     await assertNoAssistAt(r'c}');
   }
 
-  test_doubleQuoted_interpolation_stringElement_begin() async {
+  Future<void> test_doubleQuoted_interpolation_stringElement_begin() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -71,7 +71,7 @@
 ''');
   }
 
-  test_doubleQuoted_interpolation_stringElement_middle() async {
+  Future<void> test_doubleQuoted_interpolation_stringElement_middle() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_doubleQuoted_raw() async {
+  Future<void> test_doubleQuoted_raw() async {
     await resolveTestUnit('''
 main() {
   print(r"abc");
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_singleQuoted() async {
+  Future<void> test_singleQuoted() async {
     await resolveTestUnit('''
 main() {
   print('abc');
@@ -117,7 +117,7 @@
 """);
   }
 
-  test_singleQuoted_interpolation_expressionElement() async {
+  Future<void> test_singleQuoted_interpolation_expressionElement() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -128,7 +128,7 @@
     await assertNoAssistAt(r'c}');
   }
 
-  test_singleQuoted_interpolation_stringElement_begin() async {
+  Future<void> test_singleQuoted_interpolation_stringElement_begin() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -146,7 +146,7 @@
 """);
   }
 
-  test_singleQuoted_interpolation_stringElement_middle() async {
+  Future<void> test_singleQuoted_interpolation_stringElement_middle() async {
     await resolveTestUnit(r"""
 main() {
   var b = 'b';
@@ -164,7 +164,7 @@
 """);
   }
 
-  test_singleQuoted_raw() async {
+  Future<void> test_singleQuoted_raw() async {
     await resolveTestUnit('''
 main() {
   print(r'abc');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_normal_parameter_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_normal_parameter_test.dart
index f5ddc23..cdbf63e 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_normal_parameter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_normal_parameter_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToNormalParameterTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_NORMAL_PARAMETER;
 
-  test_dynamic() async {
+  Future<void> test_dynamic() async {
     await resolveTestUnit('''
 class A {
   var test;
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_firstInitializer() async {
+  Future<void> test_firstInitializer() async {
     await resolveTestUnit('''
 class A {
   int test;
@@ -53,7 +53,7 @@
 ''');
   }
 
-  test_secondInitializer() async {
+  Future<void> test_secondInitializer() async {
     await resolveTestUnit('''
 class A {
   double aaa;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_null_aware_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_null_aware_test.dart
index dfe8b4e..47027ee 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_null_aware_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_null_aware_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToNormalParameterTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_NULL_AWARE;
 
-  test_equal_differentTarget() async {
+  Future<void> test_equal_differentTarget() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -30,7 +30,7 @@
     await assertNoAssistAt('?');
   }
 
-  test_equal_notComparedToNull() async {
+  Future<void> test_equal_notComparedToNull() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -40,7 +40,7 @@
     await assertNoAssistAt('?');
   }
 
-  test_equal_notIdentifier() async {
+  Future<void> test_equal_notIdentifier() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -50,7 +50,7 @@
     await assertNoAssistAt('?');
   }
 
-  test_equal_notInvocation() async {
+  Future<void> test_equal_notInvocation() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -61,7 +61,7 @@
     await assertNoAssistAt('?');
   }
 
-  test_equal_notNullPreserving() async {
+  Future<void> test_equal_notNullPreserving() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -71,7 +71,7 @@
     await assertNoAssistAt('?');
   }
 
-  test_equal_notPeriod() async {
+  Future<void> test_equal_notPeriod() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -81,7 +81,7 @@
     await assertNoAssistAt('? ');
   }
 
-  test_equal_nullOnLeft() async {
+  Future<void> test_equal_nullOnLeft() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -96,7 +96,7 @@
 ''');
   }
 
-  test_equal_nullOnLeft_noAssistWithLint() async {
+  Future<void> test_equal_nullOnLeft_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_null_aware_operators]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -108,7 +108,7 @@
     await assertNoAssist();
   }
 
-  test_equal_nullOnRight() async {
+  Future<void> test_equal_nullOnRight() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -123,7 +123,7 @@
 ''');
   }
 
-  test_equal_prefixedIdentifier() async {
+  Future<void> test_equal_prefixedIdentifier() async {
     await resolveTestUnit('''
 class A {
   int p;
@@ -138,7 +138,7 @@
 ''');
   }
 
-  test_notEqual_notNullPreserving() async {
+  Future<void> test_notEqual_notNullPreserving() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -148,7 +148,7 @@
     await assertNoAssistAt('?');
   }
 
-  test_notEqual_nullOnLeft() async {
+  Future<void> test_notEqual_nullOnLeft() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
@@ -163,7 +163,7 @@
 ''');
   }
 
-  test_notEqual_nullOnRight() async {
+  Future<void> test_notEqual_nullOnRight() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_package_import_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_package_import_test.dart
index 9da35b6..db35739 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_package_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_package_import_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToPackageImportTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_PACKAGE_IMPORT;
 
-  test_fileName_onImport() async {
+  Future<void> test_fileName_onImport() async {
     addSource('/home/test/lib/foo.dart', '');
 
     await resolveTestUnit('''
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_fileName_onUri() async {
+  Future<void> test_fileName_onUri() async {
     addSource('/home/test/lib/foo.dart', '');
 
     await resolveTestUnit('''
@@ -43,7 +43,7 @@
 ''');
   }
 
-  test_invalidUri() async {
+  Future<void> test_invalidUri() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 import ':[invalidUri]';
@@ -51,7 +51,7 @@
     await assertNoAssistAt('invalid');
   }
 
-  test_nonPackage_Uri() async {
+  Future<void> test_nonPackage_Uri() async {
     addSource('/home/test/lib/foo.dart', '');
     testFile = convertPath('/home/test/lib/src/test.dart');
     await resolveTestUnit('''
@@ -62,7 +62,7 @@
     await assertNoAssistAt('import');
   }
 
-  test_packageUri() async {
+  Future<void> test_packageUri() async {
     addSource('/home/test/lib/foo.dart', '');
 
     await resolveTestUnit('''
@@ -72,7 +72,7 @@
     await assertNoAssistAt('import');
   }
 
-  test_path() async {
+  Future<void> test_path() async {
     addSource('/home/test/lib/foo/bar.dart', '');
 
     testFile = convertPath('/home/test/lib/src/test.dart');
@@ -85,7 +85,7 @@
 ''');
   }
 
-  test_relativeImport_noAssistWithLint() async {
+  Future<void> test_relativeImport_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.avoid_relative_lib_imports]);
     verifyNoTestUnitErrors = false;
     addSource('/home/test/lib/foo.dart', '');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_set_literal_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_set_literal_test.dart
index 053bba7..1480548 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_set_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_set_literal_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSetLiteralTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_SET_LITERAL;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 Set s = S/*caret*/et();
 ''');
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_default_minimal() async {
+  Future<void> test_default_minimal() async {
     await resolveTestUnit('''
 var s = S/*caret*/et();
 ''');
@@ -37,7 +37,7 @@
 ''');
   }
 
-  test_default_newKeyword() async {
+  Future<void> test_default_newKeyword() async {
     await resolveTestUnit('''
 var s = new S/*caret*/et();
 ''');
@@ -46,7 +46,7 @@
 ''');
   }
 
-  test_default_typeArg() async {
+  Future<void> test_default_typeArg() async {
     await resolveTestUnit('''
 var s = S/*caret*/et<int>();
 ''');
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_from_empty() async {
+  Future<void> test_from_empty() async {
     await resolveTestUnit('''
 var s = S/*caret*/et.from([]);
 ''');
@@ -64,7 +64,7 @@
 ''');
   }
 
-  test_from_newKeyword() async {
+  Future<void> test_from_newKeyword() async {
     await resolveTestUnit('''
 var s = new S/*caret*/et.from([2, 3]);
 ''');
@@ -73,7 +73,7 @@
 ''');
   }
 
-  test_from_noKeyword_declaredType() async {
+  Future<void> test_from_noKeyword_declaredType() async {
     await resolveTestUnit('''
 Set s = S/*caret*/et.from([2, 3]);
 ''');
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_from_noKeyword_typeArg_onConstructor() async {
+  Future<void> test_from_noKeyword_typeArg_onConstructor() async {
     await resolveTestUnit('''
 var s = S/*caret*/et<int>.from([2, 3]);
 ''');
@@ -91,7 +91,7 @@
 ''');
   }
 
-  test_from_noKeyword_typeArg_onConstructorAndLiteral() async {
+  Future<void> test_from_noKeyword_typeArg_onConstructorAndLiteral() async {
     await resolveTestUnit('''
 var s = S/*caret*/et<int>.from(<num>[2, 3]);
 ''');
@@ -100,7 +100,7 @@
 ''');
   }
 
-  test_from_noKeyword_typeArg_onLiteral() async {
+  Future<void> test_from_noKeyword_typeArg_onLiteral() async {
     await resolveTestUnit('''
 var s = S/*caret*/et.from(<int>[2, 3]);
 ''');
@@ -109,7 +109,7 @@
 ''');
   }
 
-  test_from_nonEmpty() async {
+  Future<void> test_from_nonEmpty() async {
     await resolveTestUnit('''
 var s = S/*caret*/et.from([2, 3]);
 ''');
@@ -118,7 +118,7 @@
 ''');
   }
 
-  test_from_notALiteral() async {
+  Future<void> test_from_notALiteral() async {
     await resolveTestUnit('''
 var l = [1];
 Set s = new S/*caret*/et.from(l);
@@ -126,7 +126,7 @@
     await assertNoAssist();
   }
 
-  test_from_trailingComma() async {
+  Future<void> test_from_trailingComma() async {
     await resolveTestUnit('''
 var s = S/*caret*/et.from([2, 3,]);
 ''');
@@ -135,7 +135,7 @@
 ''');
   }
 
-  test_toSet_empty() async {
+  Future<void> test_toSet_empty() async {
     await resolveTestUnit('''
 var s = [].to/*caret*/Set();
 ''');
@@ -144,7 +144,7 @@
 ''');
   }
 
-  test_toSet_empty_typeArg() async {
+  Future<void> test_toSet_empty_typeArg() async {
     await resolveTestUnit('''
 var s = <int>[].to/*caret*/Set();
 ''');
@@ -153,7 +153,7 @@
 ''');
   }
 
-  test_toSet_nonEmpty() async {
+  Future<void> test_toSet_nonEmpty() async {
     await resolveTestUnit('''
 var s = [2, 3].to/*caret*/Set();
 ''');
@@ -162,7 +162,7 @@
 ''');
   }
 
-  test_toSet_nonEmpty_typeArg() async {
+  Future<void> test_toSet_nonEmpty_typeArg() async {
     await resolveTestUnit('''
 var s = <int>[2, 3].to/*caret*/Set();
 ''');
@@ -171,7 +171,7 @@
 ''');
   }
 
-  test_toSet_notALiteral() async {
+  Future<void> test_toSet_notALiteral() async {
     await resolveTestUnit('''
 var l = [];
 var s = l.to/*caret*/Set();
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_single_quoted_string_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_single_quoted_string_test.dart
index 6c34598..35bb812 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_single_quoted_string_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_single_quoted_string_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSingleQuotedStringTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.CONVERT_TO_SINGLE_QUOTED_STRING;
 
-  test_one_embeddedTarget() async {
+  Future<void> test_one_embeddedTarget() async {
     await resolveTestUnit('''
 main() {
   print("a'b'c");
@@ -29,7 +29,7 @@
     await assertNoAssistAt('"a');
   }
 
-  test_one_enclosingTarget() async {
+  Future<void> test_one_enclosingTarget() async {
     await resolveTestUnit('''
 main() {
   print('abc');
@@ -38,7 +38,7 @@
     await assertNoAssistAt("'ab");
   }
 
-  test_one_interpolation() async {
+  Future<void> test_one_interpolation() async {
     await resolveTestUnit(r'''
 main() {
   var b = 'b';
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_one_raw() async {
+  Future<void> test_one_raw() async {
     await resolveTestUnit('''
 main() {
   print(r"abc");
@@ -68,7 +68,7 @@
 ''');
   }
 
-  test_one_simple() async {
+  Future<void> test_one_simple() async {
     await resolveTestUnit('''
 main() {
   print("abc");
@@ -81,7 +81,7 @@
 ''');
   }
 
-  test_one_simple_noAssistWithLint() async {
+  Future<void> test_one_simple_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_single_quotes]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -92,7 +92,7 @@
     await assertNoAssist();
   }
 
-  test_three_embeddedTarget() async {
+  Future<void> test_three_embeddedTarget() async {
     await resolveTestUnit('''
 main() {
   print("""a''\'bc""");
@@ -101,7 +101,7 @@
     await assertNoAssistAt('"a');
   }
 
-  test_three_enclosingTarget() async {
+  Future<void> test_three_enclosingTarget() async {
     await resolveTestUnit("""
 main() {
   print('''abc''');
@@ -110,7 +110,7 @@
     await assertNoAssistAt("'ab");
   }
 
-  test_three_interpolation() async {
+  Future<void> test_three_interpolation() async {
     await resolveTestUnit(r'''
 main() {
   var b = 'b';
@@ -127,7 +127,7 @@
 """);
   }
 
-  test_three_raw() async {
+  Future<void> test_three_raw() async {
     await resolveTestUnit('''
 main() {
   print(r"""abc""");
@@ -140,7 +140,7 @@
 """);
   }
 
-  test_three_simple() async {
+  Future<void> test_three_simple() async {
     await resolveTestUnit('''
 main() {
   print("""abc""");
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_spread_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_spread_test.dart
index 31c242a..7a8b12d 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_spread_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_spread_test.dart
@@ -10,7 +10,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSpreadTest);
     defineReflectiveTests(ConvertToSpreadWithControlFlowTest);
@@ -28,7 +28,7 @@
     super.setUp();
   }
 
-  test_addAll_expression() async {
+  Future<void> test_addAll_expression() async {
     await resolveTestUnit('''
 f() {
   var ints = [1, 2, 3];
@@ -43,7 +43,7 @@
 ''');
   }
 
-  test_addAll_expression_noAssistWithLint() async {
+  Future<void> test_addAll_expression_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_spread_collections]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -55,7 +55,7 @@
     await assertNoAssist();
   }
 
-  test_addAll_expression_toEmptyList() async {
+  Future<void> test_addAll_expression_toEmptyList() async {
     await resolveTestUnit('''
 f() {
   var ints = [1, 2, 3];
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_addAll_literal() async {
+  Future<void> test_addAll_literal() async {
     // This case is covered by the INLINE_INVOCATION assist.
     await resolveTestUnit('''
 var l = ['a']..add/*caret*/All(['b'])..addAll(['c']);
@@ -78,7 +78,7 @@
     await assertNoAssist();
   }
 
-  test_addAll_nonLiteralTarget() async {
+  Future<void> test_addAll_nonLiteralTarget() async {
     await resolveTestUnit('''
 var l1 = [];
 var l2 = l1..addAl/*caret*/l(['b'])..addAll(['c']);
@@ -86,14 +86,14 @@
     await assertNoAssist();
   }
 
-  test_addAll_notFirst() async {
+  Future<void> test_addAll_notFirst() async {
     await resolveTestUnit('''
 var l = ['a']..addAll(['b'])../*caret*/addAll(['c']);
 ''');
     await assertNoAssist();
   }
 
-  test_addAll_nullAware_const() async {
+  Future<void> test_addAll_nullAware_const() async {
     await resolveTestUnit('''
 var things;
 var l = ['a']..add/*caret*/All(things ?? const []);
@@ -104,7 +104,7 @@
 ''');
   }
 
-  test_addAll_nullAware_nonConst() async {
+  Future<void> test_addAll_nullAware_nonConst() async {
     await resolveTestUnit('''
 var things;
 var l = ['a']..add/*caret*/All(things ?? []);
@@ -130,7 +130,7 @@
     super.setUp();
   }
 
-  test_addAll_condition_const() async {
+  Future<void> test_addAll_condition_const() async {
     await resolveTestUnit('''
 bool condition;
 var things;
@@ -143,7 +143,7 @@
 ''');
   }
 
-  test_addAll_condition_nonConst() async {
+  Future<void> test_addAll_condition_nonConst() async {
     await resolveTestUnit('''
 bool condition;
 var things;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart b/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart
index 98e3baf..55e1bcb 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EncapsulateFieldTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.ENCAPSULATE_FIELD;
 
-  test_alreadyPrivate() async {
+  Future<void> test_alreadyPrivate() async {
     await resolveTestUnit('''
 class A {
   int _test = 42;
@@ -31,7 +31,7 @@
     await assertNoAssistAt('_test =');
   }
 
-  test_documentation() async {
+  Future<void> test_documentation() async {
     await resolveTestUnit('''
 class A {
   /// AAA
@@ -58,7 +58,7 @@
 ''');
   }
 
-  test_final() async {
+  Future<void> test_final() async {
     await resolveTestUnit('''
 class A {
   final int test = 42;
@@ -67,7 +67,7 @@
     await assertNoAssistAt('test =');
   }
 
-  test_hasType() async {
+  Future<void> test_hasType() async {
     await resolveTestUnit('''
 class A {
   int test = 42;
@@ -94,7 +94,7 @@
 ''');
   }
 
-  test_multipleFields() async {
+  Future<void> test_multipleFields() async {
     await resolveTestUnit('''
 class A {
   int aaa, bbb, ccc;
@@ -106,7 +106,7 @@
     await assertNoAssistAt('bbb, ');
   }
 
-  test_notOnName() async {
+  Future<void> test_notOnName() async {
     await resolveTestUnit('''
 class A {
   int test = 1 + 2 + 3;
@@ -115,7 +115,7 @@
     await assertNoAssistAt('+ 2');
   }
 
-  test_noType() async {
+  Future<void> test_noType() async {
     await resolveTestUnit('''
 class A {
   var test = 42;
@@ -140,7 +140,7 @@
 ''');
   }
 
-  test_parseError() async {
+  Future<void> test_parseError() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 class A {
@@ -153,7 +153,7 @@
     await assertNoAssistAt('; // marker');
   }
 
-  test_static() async {
+  Future<void> test_static() async {
     await resolveTestUnit('''
 class A {
   static int test = 42;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/exchange_operands_test.dart b/pkg/analysis_server/test/src/services/correction/assist/exchange_operands_test.dart
index f61f674..21b3f96 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/exchange_operands_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/exchange_operands_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExchangeOperandsTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.EXCHANGE_OPERANDS;
 
-  test_compare() async {
+  Future<void> test_compare() async {
     const initialOperators = ['<', '<=', '>', '>='];
     const resultOperators = ['>', '>=', '<', '<='];
     for (int i = 0; i <= 0; i++) {
@@ -38,7 +38,7 @@
     }
   }
 
-  test_extended_mixOperator_1() async {
+  Future<void> test_extended_mixOperator_1() async {
     await resolveTestUnit('''
 main() {
   1 * 2 * 3 + 4;
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_extended_mixOperator_2() async {
+  Future<void> test_extended_mixOperator_2() async {
     await resolveTestUnit('''
 main() {
   1 + 2 - 3 + 4;
@@ -64,7 +64,7 @@
 ''');
   }
 
-  test_extended_sameOperator_afterFirst() async {
+  Future<void> test_extended_sameOperator_afterFirst() async {
     await resolveTestUnit('''
 main() {
   1 + 2 + 3;
@@ -77,7 +77,7 @@
 ''');
   }
 
-  test_extended_sameOperator_afterSecond() async {
+  Future<void> test_extended_sameOperator_afterSecond() async {
     await resolveTestUnit('''
 main() {
   1 + 2 + 3;
@@ -90,7 +90,7 @@
 ''');
   }
 
-  test_extraLength() async {
+  Future<void> test_extraLength() async {
     await resolveTestUnit('''
 main() {
   111 + 222;
@@ -99,7 +99,7 @@
     await assertNoAssistAt('+ 222', length: 3);
   }
 
-  test_onOperand() async {
+  Future<void> test_onOperand() async {
     await resolveTestUnit('''
 main() {
   111 + 222;
@@ -108,7 +108,7 @@
     await assertNoAssistAt('11 +', length: 3);
   }
 
-  test_selectionWithBinary() async {
+  Future<void> test_selectionWithBinary() async {
     await resolveTestUnit('''
 main() {
   1 + 2 + 3;
@@ -117,7 +117,7 @@
     await assertNoAssistAt('1 + 2 + 3', length: '1 + 2 + 3'.length);
   }
 
-  test_simple_afterOperator() async {
+  Future<void> test_simple_afterOperator() async {
     await resolveTestUnit('''
 main() {
   1 + 2;
@@ -130,7 +130,7 @@
 ''');
   }
 
-  test_simple_beforeOperator() async {
+  Future<void> test_simple_beforeOperator() async {
     await resolveTestUnit('''
 main() {
   1 + 2;
@@ -143,7 +143,7 @@
 ''');
   }
 
-  test_simple_fullSelection() async {
+  Future<void> test_simple_fullSelection() async {
     await resolveTestUnit('''
 main() {
   1 + 2;
@@ -159,7 +159,7 @@
         length: '1 + 2'.length);
   }
 
-  test_simple_withLength() async {
+  Future<void> test_simple_withLength() async {
     await resolveTestUnit('''
 main() {
   1 + 2;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_children_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_children_test.dart
index 00e8383..b34b23d 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_children_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_children_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterConvertToChildrenTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_CONVERT_TO_CHILDREN;
 
-  test_childUnresolved() async {
+  Future<void> test_childUnresolved() async {
     addFlutterPackage();
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -33,7 +33,7 @@
     await assertNoAssist();
   }
 
-  test_multiLine() async {
+  Future<void> test_multiLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -54,7 +54,7 @@
 build() {
   return Scaffold(
     body: Center(
-      children: <Widget>[
+      children: [
         Container(
           width: 200.0,
           height: 300.0,
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_newlineChild() async {
+  Future<void> test_newlineChild() async {
     // This case could occur with deeply nested constructors, common in Flutter.
     addFlutterPackage();
     await resolveTestUnit('''
@@ -90,7 +90,7 @@
 build() {
   return Scaffold(
     body: Center(
-      children: <Widget>[
+      children: [
         Container(
           width: 200.0,
           height: 300.0,
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_notOnChild() async {
+  Future<void> test_notOnChild() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -118,7 +118,7 @@
     await assertNoAssist();
   }
 
-  test_singleLine() async {
+  Future<void> test_singleLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -136,7 +136,7 @@
 build() {
   return Scaffold(
     body: Center(
-      children: <Widget>[GestureDetector()],
+      children: [GestureDetector()],
       key: null,
     ),
   );
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_stateful_widget_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_stateful_widget_test.dart
index bb90063..d239e4b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_stateful_widget_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_convert_to_stateful_widget_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterConvertToStatefulWidgetTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_CONVERT_TO_STATEFUL_WIDGET;
 
-  test_empty() async {
+  Future<void> test_empty() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -48,7 +48,7 @@
 ''');
   }
 
-  test_empty_typeParam() async {
+  Future<void> test_empty_typeParam() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -77,7 +77,7 @@
 ''');
   }
 
-  test_fields() async {
+  Future<void> test_fields() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -158,7 +158,7 @@
 ''');
   }
 
-  test_getters() async {
+  Future<void> test_getters() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -217,7 +217,7 @@
 ''');
   }
 
-  test_methods() async {
+  Future<void> test_methods() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -307,7 +307,7 @@
 ''');
   }
 
-  test_notClass() async {
+  Future<void> test_notClass() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -316,7 +316,7 @@
     await assertNoAssist();
   }
 
-  test_notStatelessWidget() async {
+  Future<void> test_notStatelessWidget() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -327,7 +327,7 @@
     await assertNoAssist();
   }
 
-  test_notWidget() async {
+  Future<void> test_notWidget() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -336,7 +336,7 @@
     await assertNoAssist();
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
@@ -389,7 +389,7 @@
 ''');
   }
 
-  test_tail() async {
+  Future<void> test_tail() async {
     addFlutterPackage();
     await resolveTestUnit(r'''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_move_down_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_move_down_test.dart
index 27069f0..ee427b0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_move_down_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_move_down_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterMoveDownTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_MOVE_DOWN;
 
-  test_first() async {
+  Future<void> test_first() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -48,7 +48,7 @@
     assertExitPosition(before: "Text('bbbbbb')");
   }
 
-  test_last() async {
+  Future<void> test_last() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -65,7 +65,7 @@
     await assertNoAssist();
   }
 
-  test_notInList() async {
+  Future<void> test_notInList() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_move_up_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_move_up_test.dart
index a6b58b6..a88b498 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_move_up_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_move_up_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterMoveUpTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_MOVE_UP;
 
-  test_first() async {
+  Future<void> test_first() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -36,7 +36,7 @@
     await assertNoAssist();
   }
 
-  test_last() async {
+  Future<void> test_last() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -65,7 +65,7 @@
     assertExitPosition(before: "Text('bbbbbb')");
   }
 
-  test_notInList() async {
+  Future<void> test_notInList() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
index 03f1287..fb81386 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterRemoveWidgetTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_REMOVE_WIDGET;
 
-  test_childIntoChild_multiLine() async {
+  Future<void> test_childIntoChild_multiLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -56,7 +56,7 @@
 ''');
   }
 
-  test_childIntoChild_singleLine() async {
+  Future<void> test_childIntoChild_singleLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -81,7 +81,7 @@
 ''');
   }
 
-  test_childIntoChildren() async {
+  Future<void> test_childIntoChildren() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -118,7 +118,7 @@
 ''');
   }
 
-  test_childrenMultipleIntoChild() async {
+  Future<void> test_childrenMultipleIntoChild() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -136,7 +136,7 @@
     await assertNoAssist();
   }
 
-  test_childrenOneIntoChild() async {
+  Future<void> test_childrenOneIntoChild() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -160,7 +160,7 @@
 ''');
   }
 
-  test_childrenOneIntoReturn() async {
+  Future<void> test_childrenOneIntoReturn() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -180,7 +180,7 @@
 ''');
   }
 
-  test_intoChildren() async {
+  Future<void> test_intoChildren() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_surround_with_set_state_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_surround_with_set_state_test.dart
index 16d8754..35dac67 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_surround_with_set_state_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_surround_with_set_state_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterSurroundWithSetStateTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_SET_STATE;
 
-  test_outsideState() async {
+  Future<void> test_outsideState() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -39,7 +39,7 @@
     await assertNoAssist();
   }
 
-  test_stateSubclass() async {
+  Future<void> test_stateSubclass() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_child_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_child_test.dart
index 7ec4246..0228ef0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_child_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_child_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterSwapWithChildTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_SWAP_WITH_CHILD;
 
-  test_aroundCenter() async {
+  Future<void> test_aroundCenter() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_notFormatted() async {
+  Future<void> test_notFormatted() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_parent_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_parent_test.dart
index 13a88b7..dd3ce14 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_parent_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_swap_with_parent_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterSwapWithParentTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_SWAP_WITH_PARENT;
 
-  test_inCenter() async {
+  Future<void> test_inCenter() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_notFormatted() async {
+  Future<void> test_notFormatted() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -110,7 +110,7 @@
 }''');
   }
 
-  test_outerIsInChildren() async {
+  Future<void> test_outerIsInChildren() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_center_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_center_test.dart
index caca61e..752cc43 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_center_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_center_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapCenterTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_CENTER;
 
-  test_aroundCenter() async {
+  Future<void> test_aroundCenter() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -32,7 +32,7 @@
     await assertNoAssist();
   }
 
-  test_aroundContainer() async {
+  Future<void> test_aroundContainer() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -52,7 +52,7 @@
 ''');
   }
 
-  test_aroundNamedConstructor() async {
+  Future<void> test_aroundNamedConstructor() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_assignment() async {
+  Future<void> test_assignment() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -102,7 +102,7 @@
 ''');
   }
 
-  test_expressionFunctionBody() async {
+  Future<void> test_expressionFunctionBody() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart
index c22ea1d9..629ebde 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapColumnTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_COLUMN;
 
-  test_controlFlowCollections_if() async {
+  Future<void> test_controlFlowCollections_if() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -53,7 +53,7 @@
 ''');
   }
 
-  test_coveredByWidget() async {
+  Future<void> test_coveredByWidget() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -83,7 +83,7 @@
 ''');
   }
 
-  test_coversWidgets() async {
+  Future<void> test_coversWidgets() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_container_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_container_test.dart
index f52a92c..26e88f7 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_container_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_container_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapContainerTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_CONTAINER;
 
-  test_aroundContainer() async {
+  Future<void> test_aroundContainer() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -30,7 +30,7 @@
     await assertNoAssist();
   }
 
-  test_aroundText() async {
+  Future<void> test_aroundText() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_generic_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_generic_test.dart
index 40983c8..6905f54 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_generic_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_generic_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapGenericTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_GENERIC;
 
-  test_minimal() async {
+  Future<void> test_minimal() async {
     addFlutterPackage();
     await resolveTestUnit('''
 /*caret*/x(){}
@@ -27,7 +27,7 @@
     await assertNoAssist();
   }
 
-  test_multiLine() async {
+  Future<void> test_multiLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -63,7 +63,7 @@
 ''');
   }
 
-  test_multiLine_inListLiteral() async {
+  Future<void> test_multiLine_inListLiteral() async {
     verifyNoTestUnitErrors = false;
     addFlutterPackage();
     await resolveTestUnit('''
@@ -85,7 +85,7 @@
     await assertNoAssist();
   }
 
-  test_multiLines() async {
+  Future<void> test_multiLines() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -125,7 +125,7 @@
 ''');
   }
 
-  test_multiLines_eol2() async {
+  Future<void> test_multiLines_eol2() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -165,7 +165,7 @@
 ''');
   }
 
-  test_prefixedIdentifier_identifier() async {
+  Future<void> test_prefixedIdentifier_identifier() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -191,7 +191,7 @@
 ''');
   }
 
-  test_prefixedIdentifier_prefix() async {
+  Future<void> test_prefixedIdentifier_prefix() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -217,7 +217,7 @@
 ''');
   }
 
-  test_singleLine() async {
+  Future<void> test_singleLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -231,7 +231,7 @@
     await assertNoAssist();
   }
 
-  test_singleLine1() async {
+  Future<void> test_singleLine1() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -251,7 +251,7 @@
 ''');
   }
 
-  test_singleLine2() async {
+  Future<void> test_singleLine2() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -271,7 +271,7 @@
 ''');
   }
 
-  test_variable() async {
+  Future<void> test_variable() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_padding_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_padding_test.dart
index d715dd2..27cf35b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_padding_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_padding_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapPaddingTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_PADDING;
 
-  test_aroundContainer() async {
+  Future<void> test_aroundContainer() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_aroundPadding() async {
+  Future<void> test_aroundPadding() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_row_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_row_test.dart
index 32331c2..fe71efc 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_row_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_row_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapRowTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_ROW;
 
-  test_twoWidgets() async {
+  Future<void> test_twoWidgets() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_stream_builder_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_stream_builder_test.dart
index c924f7e..c44049f 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_stream_builder_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_stream_builder_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterWrapStreamBuilderTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.FLUTTER_WRAP_STREAM_BUILDER;
 
-  test_aroundStreamBuilder() async {
+  Future<void> test_aroundStreamBuilder() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -34,7 +34,7 @@
     await assertNoAssist();
   }
 
-  test_aroundText() async {
+  Future<void> test_aroundText() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart b/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
index 4c62dde..13c325b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportAddShowTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.IMPORT_ADD_SHOW;
 
-  test_hasShow() async {
+  Future<void> test_hasShow() async {
     await resolveTestUnit('''
 import 'dart:math' show PI;
 main() {
@@ -29,7 +29,7 @@
     await assertNoAssistAt('import ');
   }
 
-  test_hasUnresolvedIdentifier() async {
+  Future<void> test_hasUnresolvedIdentifier() async {
     await resolveTestUnit('''
 import 'dart:math';
 main(x) {
@@ -46,7 +46,7 @@
 ''');
   }
 
-  test_onDirective() async {
+  Future<void> test_onDirective() async {
     await resolveTestUnit('''
 import 'dart:math';
 main() {
@@ -65,7 +65,7 @@
 ''');
   }
 
-  test_onUri() async {
+  Future<void> test_onUri() async {
     await resolveTestUnit('''
 import 'dart:math';
 main() {
@@ -84,7 +84,7 @@
 ''');
   }
 
-  test_unresolvedUri() async {
+  Future<void> test_unresolvedUri() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 import '/no/such/lib.dart';
@@ -92,7 +92,7 @@
     await assertNoAssistAt('import ');
   }
 
-  test_unused() async {
+  Future<void> test_unused() async {
     await resolveTestUnit('''
 import 'dart:math';
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/inline_invocation_test.dart b/pkg/analysis_server/test/src/services/correction/assist/inline_invocation_test.dart
index 7967c09..d013c1e 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/inline_invocation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/inline_invocation_test.dart
@@ -10,7 +10,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InlineInvocationTest);
   });
@@ -27,7 +27,7 @@
     super.setUp();
   }
 
-  test_add_emptyTarget() async {
+  Future<void> test_add_emptyTarget() async {
     await resolveTestUnit('''
 var l = []..ad/*caret*/d('a')..add('b');
 ''');
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_add_emptyTarget_noAssistWithLint() async {
+  Future<void> test_add_emptyTarget_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_inlined_adds]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -45,7 +45,7 @@
     await assertNoAssist();
   }
 
-  test_add_nonEmptyTarget() async {
+  Future<void> test_add_nonEmptyTarget() async {
     await resolveTestUnit('''
 var l = ['a']..ad/*caret*/d('b')..add('c');
 ''');
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_add_nonLiteralArgument() async {
+  Future<void> test_add_nonLiteralArgument() async {
     await resolveTestUnit('''
 var e = 'b';
 var l = ['a']..add/*caret*/(e);
@@ -65,7 +65,7 @@
 ''');
   }
 
-  test_add_nonLiteralTarget() async {
+  Future<void> test_add_nonLiteralTarget() async {
     await resolveTestUnit('''
 var l1 = [];
 var l2 = l1..ad/*caret*/d('b')..add('c');
@@ -73,14 +73,14 @@
     await assertNoAssist();
   }
 
-  test_add_notFirst() async {
+  Future<void> test_add_notFirst() async {
     await resolveTestUnit('''
 var l = ['a']..add('b')../*caret*/add('c');
 ''');
     await assertNoAssist();
   }
 
-  test_addAll_emptyTarget() async {
+  Future<void> test_addAll_emptyTarget() async {
     await resolveTestUnit('''
 var l = []..add/*caret*/All(['a'])..addAll(['b']);
 ''');
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_addAll_emptyTarget_noAssistWithLint() async {
+  Future<void> test_addAll_emptyTarget_noAssistWithLint() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_inlined_adds]);
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
@@ -98,7 +98,7 @@
     await assertNoAssist();
   }
 
-  test_addAll_nonEmptyTarget() async {
+  Future<void> test_addAll_nonEmptyTarget() async {
     await resolveTestUnit('''
 var l = ['a']..add/*caret*/All(['b'])..addAll(['c']);
 ''');
@@ -107,7 +107,7 @@
 ''');
   }
 
-  test_addAll_nonLiteralArgument() async {
+  Future<void> test_addAll_nonLiteralArgument() async {
     await resolveTestUnit('''
 var l1 = <String>[];
 var l2 = ['a']..add/*caret*/All(l1);
@@ -115,7 +115,7 @@
     await assertNoAssist();
   }
 
-  test_addAll_nonLiteralTarget() async {
+  Future<void> test_addAll_nonLiteralTarget() async {
     await resolveTestUnit('''
 var l1 = [];
 var l2 = l1..addAl/*caret*/l(['b'])..addAll(['c']);
@@ -123,7 +123,7 @@
     await assertNoAssist();
   }
 
-  test_addAll_notFirst() async {
+  Future<void> test_addAll_notFirst() async {
     await resolveTestUnit('''
 var l = ['a']..addAll(['b'])../*caret*/addAll(['c']);
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/introduce_local_cast_type_test.dart b/pkg/analysis_server/test/src/services/correction/assist/introduce_local_cast_type_test.dart
index 2201266..1607452 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/introduce_local_cast_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/introduce_local_cast_type_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IntroduceLocalCastTypeTest);
   });
@@ -20,36 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.INTRODUCE_LOCAL_CAST_TYPE;
 
-  test_introduceLocalTestedType_notBlock() async {
-    await resolveTestUnit('''
-main(p) {
-  if (p is String)
-    print('not a block');
-}
-''');
-    await assertNoAssistAt('if (p');
-  }
-
-  test_introduceLocalTestedType_notIsExpression() async {
-    await resolveTestUnit('''
-main(p) {
-  if (p == null) {
-  }
-}
-''');
-    await assertNoAssistAt('if (p');
-  }
-
-  test_introduceLocalTestedType_notStatement() async {
-    await resolveTestUnit('''
-class C {
-  bool b;
-  C(v) : b = v is int;
-}''');
-    await assertNoAssistAt('is int');
-  }
-
-  test_introduceLocalTestedType_if_is() async {
+  Future<void> test_introduceLocalTestedType_if_is() async {
     await resolveTestUnit('''
 class MyTypeName {}
 main(p) {
@@ -77,7 +48,7 @@
     await assertHasAssistAt('if (p', expected);
   }
 
-  test_introduceLocalTestedType_if_isNot() async {
+  Future<void> test_introduceLocalTestedType_if_isNot() async {
     await resolveTestUnit('''
 class MyTypeName {}
 main(p) {
@@ -105,7 +76,36 @@
     await assertHasAssistAt('if (p', expected);
   }
 
-  test_introduceLocalTestedType_while() async {
+  Future<void> test_introduceLocalTestedType_notBlock() async {
+    await resolveTestUnit('''
+main(p) {
+  if (p is String)
+    print('not a block');
+}
+''');
+    await assertNoAssistAt('if (p');
+  }
+
+  Future<void> test_introduceLocalTestedType_notIsExpression() async {
+    await resolveTestUnit('''
+main(p) {
+  if (p == null) {
+  }
+}
+''');
+    await assertNoAssistAt('if (p');
+  }
+
+  Future<void> test_introduceLocalTestedType_notStatement() async {
+    await resolveTestUnit('''
+class C {
+  bool b;
+  C(v) : b = v is int;
+}''');
+    await assertNoAssistAt('is int');
+  }
+
+  Future<void> test_introduceLocalTestedType_while() async {
     await resolveTestUnit('''
 main(p) {
   while (p is String) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/invert_if_statement_test.dart b/pkg/analysis_server/test/src/services/correction/assist/invert_if_statement_test.dart
index 54ba0aa..81f1950 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/invert_if_statement_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/invert_if_statement_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvertIfStatementTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.INVERT_IF_STATEMENT;
 
-  test_blocks() async {
+  Future<void> test_blocks() async {
     await resolveTestUnit('''
 main() {
   if (true) {
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_statements() async {
+  Future<void> test_statements() async {
     await resolveTestUnit('''
 main() {
   if (true)
diff --git a/pkg/analysis_server/test/src/services/correction/assist/join_if_with_inner_test.dart b/pkg/analysis_server/test/src/services/correction/assist/join_if_with_inner_test.dart
index a57c603..ec1c3df 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/join_if_with_inner_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/join_if_with_inner_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(JoinInWithInnerTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.JOIN_IF_WITH_INNER;
 
-  test_conditionAndOr() async {
+  Future<void> test_conditionAndOr() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_conditionInvocation() async {
+  Future<void> test_conditionInvocation() async {
     await resolveTestUnit('''
 main() {
   if (isCheck()) {
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_conditionOrAnd() async {
+  Future<void> test_conditionOrAnd() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1 || 2 == 2) {
@@ -78,7 +78,7 @@
 ''');
   }
 
-  test_innerNotIf() async {
+  Future<void> test_innerNotIf() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -89,7 +89,7 @@
     await assertNoAssistAt('if (1 ==');
   }
 
-  test_innerWithElse() async {
+  Future<void> test_innerWithElse() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -104,7 +104,7 @@
     await assertNoAssistAt('if (1 ==');
   }
 
-  test_onCondition() async {
+  Future<void> test_onCondition() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -123,7 +123,7 @@
 ''');
   }
 
-  test_simpleConditions_block_block() async {
+  Future<void> test_simpleConditions_block_block() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -142,7 +142,7 @@
 ''');
   }
 
-  test_simpleConditions_block_single() async {
+  Future<void> test_simpleConditions_block_single() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -160,7 +160,7 @@
 ''');
   }
 
-  test_simpleConditions_single_blockMulti() async {
+  Future<void> test_simpleConditions_single_blockMulti() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -183,7 +183,7 @@
 ''');
   }
 
-  test_simpleConditions_single_blockOne() async {
+  Future<void> test_simpleConditions_single_blockOne() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1)
@@ -201,7 +201,7 @@
 ''');
   }
 
-  test_statementAfterInner() async {
+  Future<void> test_statementAfterInner() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -215,7 +215,7 @@
     await assertNoAssistAt('if (1 ==');
   }
 
-  test_statementBeforeInner() async {
+  Future<void> test_statementBeforeInner() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -229,7 +229,7 @@
     await assertNoAssistAt('if (1 ==');
   }
 
-  test_targetNotIf() async {
+  Future<void> test_targetNotIf() async {
     await resolveTestUnit('''
 main() {
   print(0);
@@ -238,7 +238,7 @@
     await assertNoAssistAt('print');
   }
 
-  test_targetWithElse() async {
+  Future<void> test_targetWithElse() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/join_if_with_outer_test.dart b/pkg/analysis_server/test/src/services/correction/assist/join_if_with_outer_test.dart
index ffbd3ab..79d87b5 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/join_if_with_outer_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/join_if_with_outer_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(JoinIfWithOuterTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.JOIN_IF_WITH_OUTER;
 
-  test_conditionAndOr() async {
+  Future<void> test_conditionAndOr() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_conditionInvocation() async {
+  Future<void> test_conditionInvocation() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_conditionOrAnd() async {
+  Future<void> test_conditionOrAnd() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1 || 2 == 2) {
@@ -78,7 +78,7 @@
 ''');
   }
 
-  test_onCondition() async {
+  Future<void> test_onCondition() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -97,7 +97,7 @@
 ''');
   }
 
-  test_outerNotIf() async {
+  Future<void> test_outerNotIf() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -108,7 +108,7 @@
     await assertNoAssistAt('if (1 == 1');
   }
 
-  test_outerWithElse() async {
+  Future<void> test_outerWithElse() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -123,7 +123,7 @@
     await assertNoAssistAt('if (2 == 2');
   }
 
-  test_simpleConditions_block_block() async {
+  Future<void> test_simpleConditions_block_block() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -142,7 +142,7 @@
 ''');
   }
 
-  test_simpleConditions_block_single() async {
+  Future<void> test_simpleConditions_block_single() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -160,7 +160,7 @@
 ''');
   }
 
-  test_simpleConditions_single_blockMulti() async {
+  Future<void> test_simpleConditions_single_blockMulti() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -183,7 +183,7 @@
 ''');
   }
 
-  test_simpleConditions_single_blockOne() async {
+  Future<void> test_simpleConditions_single_blockOne() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1)
@@ -201,7 +201,7 @@
 ''');
   }
 
-  test_statementAfterInner() async {
+  Future<void> test_statementAfterInner() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -215,7 +215,7 @@
     await assertNoAssistAt('if (2 == 2');
   }
 
-  test_statementBeforeInner() async {
+  Future<void> test_statementBeforeInner() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
@@ -229,7 +229,7 @@
     await assertNoAssistAt('if (2 == 2');
   }
 
-  test_targetNotIf() async {
+  Future<void> test_targetNotIf() async {
     await resolveTestUnit('''
 main() {
   print(0);
@@ -238,7 +238,7 @@
     await assertNoAssistAt('print');
   }
 
-  test_targetWithElse() async {
+  Future<void> test_targetWithElse() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/join_variable_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/assist/join_variable_declaration_test.dart
index 3216240..ac731da 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/join_variable_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/join_variable_declaration_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(JoinVariableDeclarationTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.JOIN_VARIABLE_DECLARATION;
 
-  test_onAssignment() async {
+  Future<void> test_onAssignment() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -33,7 +33,7 @@
 ''');
   }
 
-  test_onAssignment_hasInitializer() async {
+  Future<void> test_onAssignment_hasInitializer() async {
     await resolveTestUnit('''
 main() {
   var v = 1;
@@ -43,7 +43,7 @@
     await assertNoAssistAt('v = 2');
   }
 
-  test_onAssignment_notAdjacent() async {
+  Future<void> test_onAssignment_notAdjacent() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -54,7 +54,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_onAssignment_notAssignment() async {
+  Future<void> test_onAssignment_notAssignment() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -64,7 +64,7 @@
     await assertNoAssistAt('v += 1');
   }
 
-  test_onAssignment_notDeclaration() async {
+  Future<void> test_onAssignment_notDeclaration() async {
     await resolveTestUnit('''
 main(var v) {
   v = 1;
@@ -73,7 +73,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_onAssignment_notLeftArgument() async {
+  Future<void> test_onAssignment_notLeftArgument() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -83,7 +83,7 @@
     await assertNoAssistAt('v; // marker');
   }
 
-  test_onAssignment_notOneVariable() async {
+  Future<void> test_onAssignment_notOneVariable() async {
     await resolveTestUnit('''
 main() {
   var v, v2;
@@ -93,7 +93,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_onAssignment_notResolved() async {
+  Future<void> test_onAssignment_notResolved() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 main() {
@@ -104,7 +104,7 @@
     await assertNoAssistAt('x = 1');
   }
 
-  test_onAssignment_notSameBlock() async {
+  Future<void> test_onAssignment_notSameBlock() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -116,7 +116,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_onDeclaration_hasInitializer() async {
+  Future<void> test_onDeclaration_hasInitializer() async {
     await resolveTestUnit('''
 main() {
   var v = 1;
@@ -126,7 +126,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_onDeclaration_lastStatement() async {
+  Future<void> test_onDeclaration_lastStatement() async {
     await resolveTestUnit('''
 main() {
   if (true)
@@ -136,7 +136,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_onDeclaration_nextNotAssignmentExpression() async {
+  Future<void> test_onDeclaration_nextNotAssignmentExpression() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -146,7 +146,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_onDeclaration_nextNotExpressionStatement() async {
+  Future<void> test_onDeclaration_nextNotExpressionStatement() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -156,7 +156,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_onDeclaration_nextNotPureAssignment() async {
+  Future<void> test_onDeclaration_nextNotPureAssignment() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -166,7 +166,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_onDeclaration_notOneVariable() async {
+  Future<void> test_onDeclaration_notOneVariable() async {
     await resolveTestUnit('''
 main() {
   var v, v2;
@@ -176,7 +176,7 @@
     await assertNoAssistAt('v, ');
   }
 
-  test_onDeclaration_onName() async {
+  Future<void> test_onDeclaration_onName() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -190,7 +190,7 @@
 ''');
   }
 
-  test_onDeclaration_onType() async {
+  Future<void> test_onDeclaration_onType() async {
     await resolveTestUnit('''
 main() {
   int v;
@@ -204,7 +204,7 @@
 ''');
   }
 
-  test_onDeclaration_onVar() async {
+  Future<void> test_onDeclaration_onVar() async {
     await resolveTestUnit('''
 main() {
   var v;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/remove_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/assist/remove_type_annotation_test.dart
index 869da1a..fd84462 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/remove_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/remove_type_annotation_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveTypeAnnotationTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.REMOVE_TYPE_ANNOTATION;
 
-  test_classField() async {
+  Future<void> test_classField() async {
     await resolveTestUnit('''
 class A {
   int v = 1;
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_classField_final() async {
+  Future<void> test_classField_final() async {
     await resolveTestUnit('''
 class A {
   final int v = 1;
@@ -45,7 +45,7 @@
 ''');
   }
 
-  test_field_noInitializer() async {
+  Future<void> test_field_noInitializer() async {
     await resolveTestUnit('''
 class A {
   int v;
@@ -54,7 +54,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_localVariable() async {
+  Future<void> test_localVariable() async {
     await resolveTestUnit('''
 main() {
   int a = 1, b = 2;
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_localVariable_const() async {
+  Future<void> test_localVariable_const() async {
     await resolveTestUnit('''
 main() {
   const int v = 1;
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_localVariable_final() async {
+  Future<void> test_localVariable_final() async {
     await resolveTestUnit('''
 main() {
   final int v = 1;
@@ -93,7 +93,7 @@
 ''');
   }
 
-  test_localVariable_noInitializer() async {
+  Future<void> test_localVariable_noInitializer() async {
     await resolveTestUnit('''
 main() {
   int v;
@@ -102,7 +102,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_localVariable_onInitializer() async {
+  Future<void> test_localVariable_onInitializer() async {
     await resolveTestUnit('''
 main() {
   final int v = 1;
@@ -111,7 +111,7 @@
     await assertNoAssistAt('1;');
   }
 
-  test_loopVariable() async {
+  Future<void> test_loopVariable() async {
     await resolveTestUnit('''
 main() {
   for(int i = 0; i < 3; i++) {}
@@ -124,7 +124,7 @@
 ''');
   }
 
-  test_loopVariable_noType() async {
+  Future<void> test_loopVariable_noType() async {
     await resolveTestUnit('''
 main() {
   for(var i = 0; i < 3; i++) {}
@@ -133,7 +133,7 @@
     await assertNoAssistAt('var ');
   }
 
-  test_topLevelVariable() async {
+  Future<void> test_topLevelVariable() async {
     await resolveTestUnit('''
 int V = 1;
 ''');
@@ -142,7 +142,7 @@
 ''');
   }
 
-  test_topLevelVariable_final() async {
+  Future<void> test_topLevelVariable_final() async {
     await resolveTestUnit('''
 final int V = 1;
 ''');
@@ -151,7 +151,7 @@
 ''');
   }
 
-  test_topLevelVariable_noInitializer() async {
+  Future<void> test_topLevelVariable_noInitializer() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 int v;
@@ -159,7 +159,7 @@
     await assertNoAssistAt('v;');
   }
 
-  test_topLevelVariable_syntheticName() async {
+  Future<void> test_topLevelVariable_syntheticName() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 MyType
diff --git a/pkg/analysis_server/test/src/services/correction/assist/replace_conditional_with_if_else_test.dart b/pkg/analysis_server/test/src/services/correction/assist/replace_conditional_with_if_else_test.dart
index 4ef97dd..2085f59 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/replace_conditional_with_if_else_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/replace_conditional_with_if_else_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceConditionalWithIfElseTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE;
 
-  test_assignment() async {
+  Future<void> test_assignment() async {
     await resolveTestUnit('''
 main() {
   var v;
@@ -50,14 +50,14 @@
 ''');
   }
 
-  test_noEnclosingStatement() async {
+  Future<void> test_noEnclosingStatement() async {
     await resolveTestUnit('''
 var v = true ? 111 : 222;
 ''');
     await assertNoAssistAt('? 111');
   }
 
-  test_notConditional() async {
+  Future<void> test_notConditional() async {
     await resolveTestUnit('''
 main() {
   var v = 42;
@@ -66,7 +66,7 @@
     await assertNoAssistAt('v = 42');
   }
 
-  test_return() async {
+  Future<void> test_return() async {
     await resolveTestUnit('''
 main() {
   return true ? 111 : 222;
@@ -83,7 +83,7 @@
 ''');
   }
 
-  test_variableDeclaration() async {
+  Future<void> test_variableDeclaration() async {
     await resolveTestUnit('''
 main() {
   int a = 1, vvv = true ? 111 : 222, b = 2;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/replace_if_else_with_conditional_test.dart b/pkg/analysis_server/test/src/services/correction/assist/replace_if_else_with_conditional_test.dart
index a21af08..d6139ed 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/replace_if_else_with_conditional_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/replace_if_else_with_conditional_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceIfElseWithConditionalTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL;
 
-  test_assignment() async {
+  Future<void> test_assignment() async {
     await resolveTestUnit('''
 main() {
   int vvv;
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_expressionVsReturn() async {
+  Future<void> test_expressionVsReturn() async {
     await resolveTestUnit('''
 main() {
   if (true) {
@@ -51,7 +51,7 @@
     await assertNoAssistAt('else');
   }
 
-  test_notIfStatement() async {
+  Future<void> test_notIfStatement() async {
     await resolveTestUnit('''
 main() {
   print(0);
@@ -60,7 +60,7 @@
     await assertNoAssistAt('print');
   }
 
-  test_notSingleStatement() async {
+  Future<void> test_notSingleStatement() async {
     await resolveTestUnit('''
 main() {
   int vvv;
@@ -76,7 +76,7 @@
     await assertNoAssistAt('if (true)');
   }
 
-  test_return() async {
+  Future<void> test_return() async {
     await resolveTestUnit('''
 main() {
   if (true) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/replace_with_var_test.dart b/pkg/analysis_server/test/src/services/correction/assist/replace_with_var_test.dart
index fc19a751..19eb57a 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/replace_with_var_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/replace_with_var_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithVarTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.REPLACE_WITH_VAR;
 
-  test_for() async {
+  Future<void> test_for() async {
     await resolveTestUnit('''
 void f(List<int> list) {
   for (/*caret*/int i = 0; i < list.length; i++) {
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_forEach() async {
+  Future<void> test_forEach() async {
     await resolveTestUnit('''
 void f(List<int> list) {
   for (/*caret*/int i in list) {
@@ -53,7 +53,7 @@
 ''');
   }
 
-  test_generic_instanceCreation_withArguments() async {
+  Future<void> test_generic_instanceCreation_withArguments() async {
     await resolveTestUnit('''
 C<int> f() {
   /*caret*/C<int> c = C<int>();
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_generic_instanceCreation_withoutArguments() async {
+  Future<void> test_generic_instanceCreation_withoutArguments() async {
     await resolveTestUnit('''
 C<int> f() {
   /*caret*/C<int> c = C();
@@ -87,7 +87,7 @@
 ''');
   }
 
-  test_generic_listLiteral() async {
+  Future<void> test_generic_listLiteral() async {
     await resolveTestUnit('''
 List f() {
   /*caret*/List<int> l = [];
@@ -102,7 +102,7 @@
 ''');
   }
 
-  test_generic_mapLiteral() async {
+  Future<void> test_generic_mapLiteral() async {
     await resolveTestUnit('''
 Map f() {
   /*caret*/Map<String, int> m = {};
@@ -117,7 +117,7 @@
 ''');
   }
 
-  test_generic_setLiteral() async {
+  Future<void> test_generic_setLiteral() async {
     await resolveTestUnit('''
 Set f() {
   /*caret*/Set<int> s = {};
@@ -132,7 +132,7 @@
 ''');
   }
 
-  test_generic_setLiteral_ambiguous() async {
+  Future<void> test_generic_setLiteral_ambiguous() async {
     await resolveTestUnit('''
 Set f() {
   /*caret*/Set s = {};
@@ -142,7 +142,7 @@
     await assertNoAssist();
   }
 
-  test_moreGeneral() async {
+  Future<void> test_moreGeneral() async {
     await resolveTestUnit('''
 num f() {
   /*caret*/num n = 0;
@@ -152,7 +152,7 @@
     await assertNoAssist();
   }
 
-  test_noInitializer() async {
+  Future<void> test_noInitializer() async {
     await resolveTestUnit('''
 String f() {
   /*caret*/String s;
@@ -163,7 +163,7 @@
     await assertNoAssist();
   }
 
-  test_noType() async {
+  Future<void> test_noType() async {
     await resolveTestUnit('''
 String f() {
   /*caret*/var s = '';
@@ -173,7 +173,7 @@
     await assertNoAssist();
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 String f() {
   /*caret*/String s = '';
diff --git a/pkg/analysis_server/test/src/services/correction/assist/sort_child_property_last_test.dart b/pkg/analysis_server/test/src/services/correction/assist/sort_child_property_last_test.dart
index 43725ad..9335cd1 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/sort_child_property_last_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/sort_child_property_last_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortChildPropertyLastTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.SORT_CHILD_PROPERTY_LAST;
 
-  test_already_sorted() async {
+  Future<void> test_already_sorted() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -38,7 +38,7 @@
     await assertNoAssist();
   }
 
-  test_already_sorted_one_prop() async {
+  Future<void> test_already_sorted_one_prop() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -55,7 +55,7 @@
     await assertNoAssist();
   }
 
-  test_no_children() async {
+  Future<void> test_no_children() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -68,7 +68,7 @@
     await assertNoAssist();
   }
 
-  test_sort() async {
+  Future<void> test_sort() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -99,7 +99,7 @@
     assertExitPosition(after: '],');
   }
 
-  test_sort_noAssistWithLint() async {
+  Future<void> test_sort_noAssistWithLint() async {
     addFlutterPackage();
     createAnalysisOptionsFile(lints: [LintNames.sort_child_properties_last]);
     verifyNoTestUnitErrors = false;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/split_and_condition_test.dart b/pkg/analysis_server/test/src/services/correction/assist/split_and_condition_test.dart
index 31127f0..4371672 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/split_and_condition_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/split_and_condition_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SplitAndConditionTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SPLIT_AND_CONDITION;
 
-  test_hasElse() async {
+  Future<void> test_hasElse() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1 && 2 == 2) {
@@ -32,7 +32,7 @@
     await assertNoAssistAt('&& 2');
   }
 
-  test_innerAndExpression() async {
+  Future<void> test_innerAndExpression() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1 && 2 == 2 && 3 == 3) {
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_notAnd() async {
+  Future<void> test_notAnd() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1 || 2 == 2) {
@@ -62,7 +62,7 @@
     await assertNoAssistAt('|| 2');
   }
 
-  test_notOnOperator() async {
+  Future<void> test_notOnOperator() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1 && 2 == 2) {
@@ -74,7 +74,7 @@
     await assertNoAssistAt('main() {');
   }
 
-  test_notPartOfIf() async {
+  Future<void> test_notPartOfIf() async {
     await resolveTestUnit('''
 main() {
   print(1 == 1 && 2 == 2);
@@ -83,7 +83,7 @@
     await assertNoAssistAt('&& 2');
   }
 
-  test_notTopLevelAnd() async {
+  Future<void> test_notTopLevelAnd() async {
     await resolveTestUnit('''
 main() {
   if (true || (1 == 1 && 2 == 2)) {
@@ -98,7 +98,7 @@
     await assertNoAssistAt('&& 4');
   }
 
-  test_selectionTooLarge() async {
+  Future<void> test_selectionTooLarge() async {
     await resolveTestUnit('''
 main() {
   if (1 == 1
@@ -115,7 +115,7 @@
     await assertNoAssist();
   }
 
-  test_thenBlock() async {
+  Future<void> test_thenBlock() async {
     await resolveTestUnit('''
 main() {
   if (true && false) {
@@ -140,7 +140,7 @@
 ''');
   }
 
-  test_thenStatement() async {
+  Future<void> test_thenStatement() async {
     await resolveTestUnit('''
 main() {
   if (true && false)
diff --git a/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
index aed39c3..07d4997 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SplitVariableDeclarationTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SPLIT_VARIABLE_DECLARATION;
 
-  test_const() async {
+  Future<void> test_const() async {
     await resolveTestUnit('''
 main() {
   const v = 1;
@@ -28,7 +28,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_final() async {
+  Future<void> test_final() async {
     await resolveTestUnit('''
 main() {
   final v = 1;
@@ -37,7 +37,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_notOneVariable() async {
+  Future<void> test_notOneVariable() async {
     await resolveTestUnit('''
 main() {
   var v = 1, v2;
@@ -46,7 +46,7 @@
     await assertNoAssistAt('v = 1');
   }
 
-  test_onName() async {
+  Future<void> test_onName() async {
     await resolveTestUnit('''
 main() {
   var v = 1;
@@ -60,7 +60,23 @@
 ''');
   }
 
-  test_onType() async {
+  Future<void> test_onName_functionStatement_noType() async {
+    await resolveTestUnit('''
+f() => 1;
+main() {
+  var v = f();
+}
+''');
+    await assertHasAssistAt('v =', '''
+f() => 1;
+main() {
+  var v;
+  v = f();
+}
+''');
+  }
+
+  Future<void> test_onType() async {
     await resolveTestUnit('''
 main() {
   int v = 1;
@@ -75,7 +91,7 @@
   }
 
   @failingTest
-  test_onType_prefixedByComment() async {
+  Future<void> test_onType_prefixedByComment() async {
     await resolveTestUnit('''
 main() {
   /*comment*/int v = 1;
@@ -89,7 +105,7 @@
 ''');
   }
 
-  test_onVar() async {
+  Future<void> test_onVar() async {
     await resolveTestUnit('''
 main() {
   var v = 1;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_block_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_block_test.dart
index 365995d..3d35b43 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_block_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_block_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithBlockTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_BLOCK;
 
-  test_notStatementInBlock() async {
+  Future<void> test_notStatementInBlock() async {
     await resolveTestUnit('''
 main() {
   while (true)
@@ -31,7 +31,7 @@
     await assertNoAssist();
   }
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_do_while_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_do_while_test.dart
index 56d81c3..3a1f308 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_do_while_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_do_while_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithDoWhileTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_DO_WHILE;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_in_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_in_test.dart
index 6427730..0dd79ed 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_in_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_in_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithForInTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_FOR_IN;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_test.dart
index 095f0ed..d946e3b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_for_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithForTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_FOR;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_if_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_if_test.dart
index 5780cfa..288aae5 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_if_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_if_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithIfTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_IF;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_catch_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_catch_test.dart
index bf806e9..2b3121d 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_catch_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_catch_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithTryCatchTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_TRY_CATCH;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_finally_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_finally_test.dart
index 8527cd7..dc9a109 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_finally_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_try_finally_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithTryFinallyTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_TRY_FINALLY;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/surround_with_while_test.dart b/pkg/analysis_server/test/src/services/correction/assist/surround_with_while_test.dart
index 38f0beb..42502fe 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/surround_with_while_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/surround_with_while_test.dart
@@ -8,7 +8,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SurroundWithWhileTest);
   });
@@ -19,7 +19,7 @@
   @override
   AssistKind get kind => DartAssistKind.SURROUND_WITH_WHILE;
 
-  test_twoStatements() async {
+  Future<void> test_twoStatements() async {
     await resolveTestUnit('''
 main() {
 // start
diff --git a/pkg/analysis_server/test/src/services/correction/assist/test_all.dart b/pkg/analysis_server/test/src/services/correction/assist/test_all.dart
index 645dc53..2a1f7e2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/test_all.dart
@@ -85,7 +85,7 @@
 import 'surround_with_while_test.dart' as surround_with_while;
 import 'use_curly_braces_test.dart' as use_curly_braces;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     add_diagnostic_property.main();
     add_not_null_assert.main();
diff --git a/pkg/analysis_server/test/src/services/correction/assist/use_curly_braces_test.dart b/pkg/analysis_server/test/src/services/correction/assist/use_curly_braces_test.dart
index 650dfd0..032f5ee 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/use_curly_braces_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/use_curly_braces_test.dart
@@ -9,7 +9,7 @@
 
 import 'assist_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseCurlyBracesTest);
   });
@@ -20,7 +20,7 @@
   @override
   AssistKind get kind => DartAssistKind.USE_CURLY_BRACES;
 
-  test_do_block() async {
+  Future<void> test_do_block() async {
     await resolveTestUnit('''
 main() {
   /*caret*/do {
@@ -31,7 +31,7 @@
     await assertNoAssist();
   }
 
-  test_do_body_middle() async {
+  Future<void> test_do_body_middle() async {
     await resolveTestUnit('''
 main() {
   do print/*caret*/(0); while (true);
@@ -46,7 +46,7 @@
 ''');
   }
 
-  test_do_body_start() async {
+  Future<void> test_do_body_start() async {
     await resolveTestUnit('''
 main() {
   do /*caret*/print(0); while (true);
@@ -61,7 +61,7 @@
 ''');
   }
 
-  test_do_condition() async {
+  Future<void> test_do_condition() async {
     await resolveTestUnit('''
 main() {
   do print(0); while (/*caret*/true);
@@ -76,7 +76,7 @@
 ''');
   }
 
-  test_do_end() async {
+  Future<void> test_do_end() async {
     await resolveTestUnit('''
 main() {
   do print(0); while (true);/*caret*/
@@ -91,7 +91,7 @@
 ''');
   }
 
-  test_do_keyword_do() async {
+  Future<void> test_do_keyword_do() async {
     await resolveTestUnit('''
 main() {
   /*caret*/do print(0); while (true);
@@ -106,7 +106,7 @@
 ''');
   }
 
-  test_do_keyword_while() async {
+  Future<void> test_do_keyword_while() async {
     await resolveTestUnit('''
 main() {
   do print(0); /*caret*/while (true);
@@ -121,7 +121,7 @@
 ''');
   }
 
-  test_for_body_end() async {
+  Future<void> test_for_body_end() async {
     await resolveTestUnit('''
 main() {
   for (;;) print(0);/*caret*/
@@ -136,7 +136,7 @@
 ''');
   }
 
-  test_for_body_middle() async {
+  Future<void> test_for_body_middle() async {
     await resolveTestUnit('''
 main() {
   for (;;) print/*caret*/(0);
@@ -151,7 +151,7 @@
 ''');
   }
 
-  test_for_body_start() async {
+  Future<void> test_for_body_start() async {
     await resolveTestUnit('''
 main() {
   for (;;) /*caret*/print(0);
@@ -166,7 +166,7 @@
 ''');
   }
 
-  test_for_condition() async {
+  Future<void> test_for_condition() async {
     await resolveTestUnit('''
 main() {
   for (/*caret*/;;) print(0);
@@ -181,7 +181,7 @@
 ''');
   }
 
-  test_for_keyword() async {
+  Future<void> test_for_keyword() async {
     await resolveTestUnit('''
 main() {
   /*caret*/for (;;) print(0);
@@ -196,7 +196,7 @@
 ''');
   }
 
-  test_for_keyword_block() async {
+  Future<void> test_for_keyword_block() async {
     await resolveTestUnit('''
 main() {
   /*caret*/for (;;) {
@@ -207,7 +207,7 @@
     await assertNoAssist();
   }
 
-  test_if_else_keyword() async {
+  Future<void> test_if_else_keyword() async {
     await resolveTestUnit('''
 main(int a) {
   if (a == 0)
@@ -226,7 +226,7 @@
 ''');
   }
 
-  test_if_else_statement() async {
+  Future<void> test_if_else_statement() async {
     await resolveTestUnit('''
 main(int a) {
   if (a == 0)
@@ -245,7 +245,7 @@
 ''');
   }
 
-  test_if_keyword_blockBoth() async {
+  Future<void> test_if_keyword_blockBoth() async {
     await resolveTestUnit('''
 main(int a) {
   /*caret*/if (a == 0) {
@@ -258,7 +258,7 @@
     await assertNoAssist();
   }
 
-  test_if_keyword_blockElse() async {
+  Future<void> test_if_keyword_blockElse() async {
     await resolveTestUnit('''
 main(int a) {
   /*caret*/if (a == 0) print(0);
@@ -278,7 +278,7 @@
 ''');
   }
 
-  test_if_keyword_blockThen() async {
+  Future<void> test_if_keyword_blockThen() async {
     await resolveTestUnit('''
 main(int a) {
   /*caret*/if (a == 0) {
@@ -289,7 +289,7 @@
     await assertNoAssist();
   }
 
-  test_if_keyword_withElse() async {
+  Future<void> test_if_keyword_withElse() async {
     await resolveTestUnit('''
 main(int a) {
   /*caret*/if (a == 0)
@@ -308,7 +308,7 @@
 ''');
   }
 
-  test_if_keyword_withoutElse() async {
+  Future<void> test_if_keyword_withoutElse() async {
     await resolveTestUnit('''
 main(int a) {
   /*caret*/if (a == 0)
@@ -324,7 +324,7 @@
 ''');
   }
 
-  test_if_then_withElse() async {
+  Future<void> test_if_then_withElse() async {
     await resolveTestUnit('''
 main(int a) {
   if (a == 0)
@@ -341,7 +341,7 @@
 ''');
   }
 
-  test_if_then_withoutElse() async {
+  Future<void> test_if_then_withoutElse() async {
     await resolveTestUnit('''
 main(int a) {
   if (a == 0) /*caret*/print(0);
@@ -356,7 +356,7 @@
 ''');
   }
 
-  test_noAssistWithLint() async {
+  Future<void> test_noAssistWithLint() async {
     createAnalysisOptionsFile(
         lints: [LintNames.curly_braces_in_flow_control_structures]);
     verifyNoTestUnitErrors = false;
@@ -368,7 +368,7 @@
     await assertNoAssist();
   }
 
-  test_while_body_end() async {
+  Future<void> test_while_body_end() async {
     await resolveTestUnit('''
 main() {
   while (true) print(0);/*caret*/
@@ -383,7 +383,7 @@
 ''');
   }
 
-  test_while_body_middle() async {
+  Future<void> test_while_body_middle() async {
     await resolveTestUnit('''
 main() {
   while (true) print/*caret*/(0);
@@ -398,7 +398,7 @@
 ''');
   }
 
-  test_while_body_start() async {
+  Future<void> test_while_body_start() async {
     await resolveTestUnit('''
 main() {
   while (true) /*caret*/print(0);
@@ -413,7 +413,7 @@
 ''');
   }
 
-  test_while_condition() async {
+  Future<void> test_while_condition() async {
     await resolveTestUnit('''
 main() {
   while (/*caret*/true) print(0);
@@ -428,7 +428,7 @@
 ''');
   }
 
-  test_while_keyword() async {
+  Future<void> test_while_keyword() async {
     await resolveTestUnit('''
 main() {
   /*caret*/while (true) print(0);
@@ -443,7 +443,7 @@
 ''');
   }
 
-  test_while_keyword_block() async {
+  Future<void> test_while_keyword_block() async {
     await resolveTestUnit('''
 main() {
   /*caret*/while (true) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
index ec2d413..2dcde2c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddAsyncTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_ASYNC;
 
-  test_asyncFor() async {
+  Future<void> test_asyncFor() async {
     await resolveTestUnit('''
 import 'dart:async';
 void main(Stream<String> names) {
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_blockFunctionBody_function() async {
+  Future<void> test_blockFunctionBody_function() async {
     await resolveTestUnit('''
 foo() {}
 main() {
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_blockFunctionBody_getter() async {
+  Future<void> test_blockFunctionBody_getter() async {
     await resolveTestUnit('''
 int get foo => null;
 int f() {
@@ -74,7 +74,7 @@
     });
   }
 
-  test_closure() async {
+  Future<void> test_closure() async {
     await resolveTestUnit('''
 import 'dart:async';
 
@@ -93,7 +93,7 @@
     });
   }
 
-  test_expressionFunctionBody() async {
+  Future<void> test_expressionFunctionBody() async {
     await resolveTestUnit('''
 foo() {}
 main() => await foo();
@@ -104,14 +104,14 @@
 ''');
   }
 
-  test_nullFunctionBody() async {
+  Future<void> test_nullFunctionBody() async {
     await resolveTestUnit('''
 var F = await;
 ''');
     await assertNoFix();
   }
 
-  test_returnFuture_alreadyFuture() async {
+  Future<void> test_returnFuture_alreadyFuture() async {
     await resolveTestUnit('''
 import 'dart:async';
 foo() {}
@@ -132,7 +132,7 @@
     });
   }
 
-  test_returnFuture_dynamic() async {
+  Future<void> test_returnFuture_dynamic() async {
     await resolveTestUnit('''
 foo() {}
 dynamic main() {
@@ -149,7 +149,7 @@
 ''');
   }
 
-  test_returnFuture_nonFuture() async {
+  Future<void> test_returnFuture_nonFuture() async {
     await resolveTestUnit('''
 foo() {}
 int main() {
@@ -166,7 +166,7 @@
 ''');
   }
 
-  test_returnFuture_noType() async {
+  Future<void> test_returnFuture_noType() async {
     await resolveTestUnit('''
 foo() {}
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart
index f48d85d..f075f8f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddAwaitTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unawaited_futures;
 
-  test_intLiteral() async {
+  Future<void> test_intLiteral() async {
     await resolveTestUnit('''
 Future doSomething() => new Future();
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart
index 8a8ca02..189e3a8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddConstTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_const_constructors;
 
-  test_basic() async {
+  Future<void> test_basic() async {
     await resolveTestUnit('''
 class C {
   const C();
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_not_present() async {
+  Future<void> test_not_present() async {
     await resolveTestUnit('''
 class C {
   const C();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_curly_braces_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_curly_braces_test.dart
index ae04af5..267ee17 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_curly_braces_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_curly_braces_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddCurlyBracesTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.curly_braces_in_flow_control_structures;
 
   // More coverage in the `use_curly_braces_test.dart` assist test.
-  test_do_block() async {
+  Future<void> test_do_block() async {
     await resolveTestUnit('''
 main() {
   do /*LINT*/print(0); while (true);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
index d737fee..ac5dd64 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddDiagnosticPropertyReferenceTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.diagnostic_describe_all_properties;
 
-  test_boolField_debugFillProperties() async {
+  Future<void> test_boolField_debugFillProperties() async {
     await resolveTestUnit('''
 class Absorber extends Widget {
   bool get absorbing => _absorbing;
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_boolField_debugFillProperties_empty() async {
+  Future<void> test_boolField_debugFillProperties_empty() async {
     await resolveTestUnit('''
 class Absorber extends Widget {
   bool /*LINT*/ignoringSemantics;
@@ -71,7 +71,8 @@
 ''');
   }
 
-  test_boolField_debugFillProperties_empty_customParamName() async {
+  Future<void>
+      test_boolField_debugFillProperties_empty_customParamName() async {
     await resolveTestUnit('''
 class Absorber extends Widget {
   bool /*LINT*/ignoringSemantics;
@@ -91,7 +92,7 @@
 ''');
   }
 
-  test_boolGetter_debugFillProperties() async {
+  Future<void> test_boolGetter_debugFillProperties() async {
     await resolveTestUnit('''
 class Absorber extends Widget {
   bool get /*LINT*/absorbing => _absorbing;
@@ -115,7 +116,7 @@
 ''');
   }
 
-  test_colorField_debugFillProperties() async {
+  Future<void> test_colorField_debugFillProperties() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -140,7 +141,7 @@
 ''');
   }
 
-  test_doubleField_debugFillProperties() async {
+  Future<void> test_doubleField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   double /*LINT*/field;
@@ -162,7 +163,7 @@
 ''');
   }
 
-  test_dynamicField_debugFillProperties() async {
+  Future<void> test_dynamicField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   dynamic /*LINT*/field;
@@ -184,7 +185,7 @@
 ''');
   }
 
-  test_enumField_debugFillProperties() async {
+  Future<void> test_enumField_debugFillProperties() async {
     await resolveTestUnit('''
 enum Foo {bar}
 class A extends Widget {
@@ -208,7 +209,7 @@
 ''');
   }
 
-  test_functionField_debugFillProperties() async {
+  Future<void> test_functionField_debugFillProperties() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -239,7 +240,7 @@
 ''');
   }
 
-  test_intField_debugFillProperties() async {
+  Future<void> test_intField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   int /*LINT*/field;
@@ -261,7 +262,7 @@
 ''');
   }
 
-  test_iterableField_debugFillProperties() async {
+  Future<void> test_iterableField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   Iterable<String> /*LINT*/field;
@@ -283,7 +284,7 @@
 ''');
   }
 
-  test_listField_debugFillProperties() async {
+  Future<void> test_listField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   List<List<String>> /*LINT*/field;
@@ -305,7 +306,7 @@
 ''');
   }
 
-  test_matrix4Field_debugFillProperties() async {
+  Future<void> test_matrix4Field_debugFillProperties() async {
     addVectorMathPackage();
     await resolveTestUnit('''
 import 'package:vector_math/vector_math_64.dart';
@@ -330,7 +331,7 @@
 ''');
   }
 
-  test_objectField_debugFillProperties() async {
+  Future<void> test_objectField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   Object /*LINT*/field;
@@ -352,7 +353,7 @@
 ''');
   }
 
-  test_stringField_debugFillProperties() async {
+  Future<void> test_stringField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   String /*LINT*/field;
@@ -374,7 +375,7 @@
 ''');
   }
 
-  test_stringField_noDebugFillProperties() async {
+  Future<void> test_stringField_noDebugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   String /*LINT*/field;
@@ -392,7 +393,7 @@
 ''');
   }
 
-  test_typeOutOfScopeField_debugFillProperties() async {
+  Future<void> test_typeOutOfScopeField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   ClassNotInScope<bool> /*LINT*/onChanged;
@@ -416,7 +417,7 @@
 ''');
   }
 
-  test_typeOutOfScopeGetter_debugFillProperties() async {
+  Future<void> test_typeOutOfScopeGetter_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   ClassNotInScope<bool> get /*LINT*/onChanged => null;
@@ -440,7 +441,7 @@
 ''');
   }
 
-  test_varField_debugFillProperties() async {
+  Future<void> test_varField_debugFillProperties() async {
     await resolveTestUnit('''
 class A extends Widget {
   var /*LINT*/field;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart
index e0ff288..436ea7e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddExplicitCastTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_EXPLICIT_CAST;
 
-  test_as() async {
+  Future<void> test_as() async {
     await resolveTestUnit('''
 f(A a) {
   C c = a as B;
@@ -33,7 +33,7 @@
     await assertNoFix();
   }
 
-  test_assignment_general() async {
+  Future<void> test_assignment_general() async {
     await resolveTestUnit('''
 f(A a) {
   B b;
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_assignment_general_all() async {
+  Future<void> test_assignment_general_all() async {
     await resolveTestUnit('''
 f(A a) {
   B b, b2;
@@ -75,7 +75,7 @@
 ''');
   }
 
-  test_assignment_list() async {
+  Future<void> test_assignment_list() async {
     await resolveTestUnit('''
 f(List<A> a) {
   List<B> b;
@@ -96,7 +96,7 @@
 ''');
   }
 
-  test_assignment_list_all() async {
+  Future<void> test_assignment_list_all() async {
     await resolveTestUnit('''
 f(List<A> a) {
   List<B> b, b2;
@@ -117,7 +117,7 @@
 ''');
   }
 
-  test_assignment_map() async {
+  Future<void> test_assignment_map() async {
     await resolveTestUnit('''
 f(Map<A, B> a) {
   Map<B, A> b;
@@ -138,7 +138,7 @@
 ''');
   }
 
-  test_assignment_map_all() async {
+  Future<void> test_assignment_map_all() async {
     await resolveTestUnit('''
 f(Map<A, B> a) {
   Map<B, A> b, b2;
@@ -159,7 +159,7 @@
 ''');
   }
 
-  test_assignment_needsParens() async {
+  Future<void> test_assignment_needsParens() async {
     await resolveTestUnit('''
 f(A a) {
   B b;
@@ -184,7 +184,7 @@
 ''');
   }
 
-  test_assignment_needsParens_all() async {
+  Future<void> test_assignment_needsParens_all() async {
     await resolveTestUnit('''
 f(A a) {
   B b, b2;
@@ -209,7 +209,7 @@
 ''');
   }
 
-  test_assignment_set() async {
+  Future<void> test_assignment_set() async {
     await resolveTestUnit('''
 f(Set<A> a) {
   Set<B> b;
@@ -230,7 +230,7 @@
 ''');
   }
 
-  test_assignment_set_all() async {
+  Future<void> test_assignment_set_all() async {
     await resolveTestUnit('''
 f(Set<A> a) {
   Set<B> b, b2;
@@ -251,7 +251,7 @@
 ''');
   }
 
-  test_cast() async {
+  Future<void> test_cast() async {
     await resolveTestUnit('''
 f(List<A> a) {
   List<B> b = a.cast<A>();
@@ -263,7 +263,7 @@
     await assertNoFix();
   }
 
-  test_declaration_general() async {
+  Future<void> test_declaration_general() async {
     await resolveTestUnit('''
 f(A a) {
   B b = a;
@@ -282,7 +282,7 @@
 ''');
   }
 
-  test_declaration_general_all() async {
+  Future<void> test_declaration_general_all() async {
     await resolveTestUnit('''
 f(A a) {
   B b = a;
@@ -301,7 +301,7 @@
 ''');
   }
 
-  test_declaration_list() async {
+  Future<void> test_declaration_list() async {
     await resolveTestUnit('''
 f(List<A> a) {
   List<B> b = a.where((e) => e is B).toList();
@@ -320,7 +320,7 @@
 ''');
   }
 
-  test_declaration_list_all() async {
+  Future<void> test_declaration_list_all() async {
     await resolveTestUnit('''
 f(List<A> a) {
   List<B> b = a.where((e) => e is B).toList();
@@ -339,7 +339,7 @@
 ''');
   }
 
-  test_declaration_map() async {
+  Future<void> test_declaration_map() async {
     await resolveTestUnit('''
 f(Map<A, B> a) {
   Map<B, A> b = a;
@@ -358,7 +358,7 @@
 ''');
   }
 
-  test_declaration_map_all() async {
+  Future<void> test_declaration_map_all() async {
     await resolveTestUnit('''
 f(Map<A, B> a) {
   Map<B, A> b = a;
@@ -377,7 +377,7 @@
 ''');
   }
 
-  test_declaration_needsParens() async {
+  Future<void> test_declaration_needsParens() async {
     await resolveTestUnit('''
 f(A a) {
   B b = a..m();
@@ -400,7 +400,7 @@
 ''');
   }
 
-  test_declaration_needsParens_all() async {
+  Future<void> test_declaration_needsParens_all() async {
     await resolveTestUnit('''
 f(A a) {
   B b = a..m();
@@ -423,7 +423,7 @@
 ''');
   }
 
-  test_declaration_set() async {
+  Future<void> test_declaration_set() async {
     await resolveTestUnit('''
 f(Set<A> a) {
   Set<B> b = a;
@@ -442,7 +442,7 @@
 ''');
   }
 
-  test_declaration_set_all() async {
+  Future<void> test_declaration_set_all() async {
     await resolveTestUnit('''
 f(Set<A> a) {
   Set<B> b = a;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart
index 172aee9..61a6718 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddFieldFormalParametersTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_FIELD_FORMAL_PARAMETERS;
 
-  test_flutter() async {
+  Future<void> test_flutter() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -45,7 +45,7 @@
 ''');
   }
 
-  test_hasRequiredParameter() async {
+  Future<void> test_hasRequiredParameter() async {
     await resolveTestUnit('''
 class Test {
   final int a;
@@ -64,7 +64,7 @@
 ''');
   }
 
-  test_noParameters() async {
+  Future<void> test_noParameters() async {
     await resolveTestUnit('''
 class Test {
   final int a;
@@ -83,7 +83,7 @@
 ''');
   }
 
-  test_noRequiredParameter() async {
+  Future<void> test_noRequiredParameter() async {
     await resolveTestUnit('''
 class Test {
   final int a;
@@ -102,7 +102,7 @@
 ''');
   }
 
-  test_notAllFinal() async {
+  Future<void> test_notAllFinal() async {
     await resolveTestUnit('''
 class Test {
   final int a;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
index f796f39..ee1c619 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddMissingEnumCaseClausesTest);
   });
@@ -33,7 +33,7 @@
     });
   }
 
-  test_empty() async {
+  Future<void> test_empty() async {
     await resolveTestUnit('''
 enum E {a, b, c}
 void f(E e) {
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_nonEmpty() async {
+  Future<void> test_nonEmpty() async {
     await resolveTestUnit('''
 enum E {a, b, c}
 void f(E e) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart
index 0378f7e..eee9f5c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddMissingParameterNamedTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_MISSING_PARAMETER_NAMED;
 
-  test_constructor_hasNamed() async {
+  Future<void> test_constructor_hasNamed() async {
     await resolveTestUnit('''
 class A {
   A(int a, {int b}) {}
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_constructor_hasRequired() async {
+  Future<void> test_constructor_hasRequired() async {
     await resolveTestUnit('''
 class A {
   A(int a) {}
@@ -61,7 +61,7 @@
 ''');
   }
 
-  test_constructor_noParameters() async {
+  Future<void> test_constructor_noParameters() async {
     await resolveTestUnit('''
 class A {
   A() {}
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_constructor_noParameters_named() async {
+  Future<void> test_constructor_noParameters_named() async {
     await resolveTestUnit('''
 class A {
   A.aaa() {}
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_function_hasNamed() async {
+  Future<void> test_function_hasNamed() async {
     await resolveTestUnit('''
 test(int a, {int b: 0}) {}
 
@@ -120,7 +120,7 @@
 ''');
   }
 
-  test_function_hasRequired() async {
+  Future<void> test_function_hasRequired() async {
     await resolveTestUnit('''
 test(int a) {}
 
@@ -137,7 +137,7 @@
 ''');
   }
 
-  test_function_noParameters() async {
+  Future<void> test_function_noParameters() async {
     await resolveTestUnit('''
 test() {}
 
@@ -154,7 +154,7 @@
 ''');
   }
 
-  test_method_hasNamed() async {
+  Future<void> test_method_hasNamed() async {
     await resolveTestUnit('''
 class A {
   test(int a, {int b: 0}) {}
@@ -175,7 +175,7 @@
 ''');
   }
 
-  test_method_hasOptionalPositional() async {
+  Future<void> test_method_hasOptionalPositional() async {
     await resolveTestUnit('''
 class A {
   test(int a, [int b]) {}
@@ -188,7 +188,7 @@
     await assertNoFix();
   }
 
-  test_method_hasRequired() async {
+  Future<void> test_method_hasRequired() async {
     await resolveTestUnit('''
 class A {
   test(int a) {}
@@ -209,7 +209,7 @@
 ''');
   }
 
-  test_method_noParameters() async {
+  Future<void> test_method_noParameters() async {
     await resolveTestUnit('''
 class A {
   test() {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
index ba8e53d..757b017 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddMissingParameterPositionalTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_MISSING_PARAMETER_POSITIONAL;
 
-  test_function_hasNamed() async {
+  Future<void> test_function_hasNamed() async {
     await resolveTestUnit('''
 test({int a}) {}
 main() {
@@ -29,7 +29,7 @@
     await assertNoFix();
   }
 
-  test_function_hasZero() async {
+  Future<void> test_function_hasZero() async {
     await resolveTestUnit('''
 test() {}
 main() {
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_method_hasOne() async {
+  Future<void> test_method_hasOne() async {
     await resolveTestUnit('''
 class A {
   test(int a) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
index b66930d..293c98a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddMissingParameterRequiredTest);
     defineReflectiveTests(AddMissingParameterRequiredTest_Workspace);
@@ -22,7 +22,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_MISSING_PARAMETER_REQUIRED;
 
-  test_constructor_named_hasOne() async {
+  Future<void> test_constructor_named_hasOne() async {
     await resolveTestUnit('''
 class A {
   A.named(int a) {}
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_constructor_unnamed_hasOne() async {
+  Future<void> test_constructor_unnamed_hasOne() async {
     await resolveTestUnit('''
 class A {
   A(int a) {}
@@ -60,7 +60,7 @@
 ''');
   }
 
-  test_function_hasNamed() async {
+  Future<void> test_function_hasNamed() async {
     await resolveTestUnit('''
 test({int a}) {}
 main() {
@@ -75,7 +75,7 @@
 ''');
   }
 
-  test_function_hasOne() async {
+  Future<void> test_function_hasOne() async {
     await resolveTestUnit('''
 test(int a) {}
 main() {
@@ -90,7 +90,7 @@
 ''');
   }
 
-  test_function_hasZero() async {
+  Future<void> test_function_hasZero() async {
     await resolveTestUnit('''
 test() {}
 main() {
@@ -105,7 +105,7 @@
 ''');
   }
 
-  test_method_hasOne() async {
+  Future<void> test_method_hasOne() async {
     await resolveTestUnit('''
 class A {
   test(int a) {}
@@ -124,7 +124,7 @@
 ''');
   }
 
-  test_method_hasZero() async {
+  Future<void> test_method_hasZero() async {
     await resolveTestUnit('''
 class A {
   test() {}
@@ -154,7 +154,7 @@
     return _workspace ?? super.workspace;
   }
 
-  test_function_inPackage_inWorkspace() async {
+  Future<void> test_function_inPackage_inWorkspace() async {
     newFile('/home/aaa/lib/a.dart', content: 'void test() {}');
     addTestPackageDependency('aaa', '/home/aaa');
 
@@ -177,7 +177,7 @@
     );
   }
 
-  test_function_inPackage_outsideWorkspace() async {
+  Future<void> test_function_inPackage_outsideWorkspace() async {
     addPackageFile('bbb', 'b.dart', 'void test() {}');
 
     await resolveTestUnit('''
@@ -190,7 +190,7 @@
     await assertNoFix();
   }
 
-  test_method_inSdk() async {
+  Future<void> test_method_inSdk() async {
     await resolveTestUnit('''
 main() {
   42.abs(true);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
index dcd6666..b471caa 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddMissingRequiredArgumentTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT;
 
-  test_cons_flutter_children() async {
+  Future<void> test_cons_flutter_children() async {
     addFlutterPackage();
     addMetaPackage();
     await resolveTestUnit('''
@@ -48,75 +48,7 @@
 ''');
   }
 
-  test_param_child() async {
-    addFlutterPackage();
-    addMetaPackage();
-    await resolveTestUnit('''
-import 'package:flutter/widgets.dart';
-import 'package:meta/meta.dart';
-
-class MyWidget extends Widget {
-  MyWidget({@required String foo, @required Widget child});
-}
-
-build() {
-  return new MyWidget(
-    child: null,
-  );
-}
-''');
-    await assertHasFix('''
-import 'package:flutter/widgets.dart';
-import 'package:meta/meta.dart';
-
-class MyWidget extends Widget {
-  MyWidget({@required String foo, @required Widget child});
-}
-
-build() {
-  return new MyWidget(
-    foo: null,
-    child: null,
-  );
-}
-''');
-  }
-
-  test_param_children() async {
-    addFlutterPackage();
-    addMetaPackage();
-    await resolveTestUnit('''
-import 'package:flutter/widgets.dart';
-import 'package:meta/meta.dart';
-
-class MyWidget extends Widget {
-  MyWidget({@required String foo, @required List<Widget> children});
-}
-
-build() {
-  return new MyWidget(
-    children: null,
-  );
-}
-''');
-    await assertHasFix('''
-import 'package:flutter/widgets.dart';
-import 'package:meta/meta.dart';
-
-class MyWidget extends Widget {
-  MyWidget({@required String foo, @required List<Widget> children});
-}
-
-build() {
-  return new MyWidget(
-    foo: null,
-    children: null,
-  );
-}
-''');
-  }
-
-  test_cons_flutter_hasTrailingComma() async {
+  Future<void> test_cons_flutter_hasTrailingComma() async {
     addFlutterPackage();
     addMetaPackage();
     await resolveTestUnit('''
@@ -145,7 +77,7 @@
 ''');
   }
 
-  test_cons_single() async {
+  Future<void> test_cons_single() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
 import 'package:meta/meta.dart';
@@ -172,7 +104,7 @@
 ''');
   }
 
-  test_cons_single_closure() async {
+  Future<void> test_cons_single_closure() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
 import 'package:meta/meta.dart';
@@ -201,7 +133,7 @@
 ''');
   }
 
-  test_cons_single_closure_2() async {
+  Future<void> test_cons_single_closure_2() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
 import 'package:meta/meta.dart';
@@ -230,7 +162,7 @@
 ''');
   }
 
-  test_cons_single_closure_3() async {
+  Future<void> test_cons_single_closure_3() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
 import 'package:meta/meta.dart';
@@ -259,7 +191,7 @@
 ''');
   }
 
-  test_cons_single_closure_4() async {
+  Future<void> test_cons_single_closure_4() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
 import 'package:meta/meta.dart';
@@ -288,7 +220,7 @@
 ''');
   }
 
-  test_cons_single_list() async {
+  Future<void> test_cons_single_list() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
 import 'package:meta/meta.dart';
@@ -315,7 +247,7 @@
 ''');
   }
 
-  test_multiple() async {
+  Future<void> test_multiple() async {
     addMetaPackage();
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
@@ -335,7 +267,7 @@
 ''');
   }
 
-  test_multiple_1of2() async {
+  Future<void> test_multiple_1of2() async {
     addMetaPackage();
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
@@ -355,7 +287,7 @@
 ''', errorFilter: (error) => error.message.contains("'a'"));
   }
 
-  test_multiple_2of2() async {
+  Future<void> test_multiple_2of2() async {
     addMetaPackage();
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
@@ -375,7 +307,75 @@
 ''', errorFilter: (error) => error.message.contains("'bcd'"));
   }
 
-  test_single() async {
+  Future<void> test_param_child() async {
+    addFlutterPackage();
+    addMetaPackage();
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
+
+class MyWidget extends Widget {
+  MyWidget({@required String foo, @required Widget child});
+}
+
+build() {
+  return new MyWidget(
+    child: null,
+  );
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
+
+class MyWidget extends Widget {
+  MyWidget({@required String foo, @required Widget child});
+}
+
+build() {
+  return new MyWidget(
+    foo: null,
+    child: null,
+  );
+}
+''');
+  }
+
+  Future<void> test_param_children() async {
+    addFlutterPackage();
+    addMetaPackage();
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
+
+class MyWidget extends Widget {
+  MyWidget({@required String foo, @required List<Widget> children});
+}
+
+build() {
+  return new MyWidget(
+    children: null,
+  );
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
+
+class MyWidget extends Widget {
+  MyWidget({@required String foo, @required List<Widget> children});
+}
+
+build() {
+  return new MyWidget(
+    foo: null,
+    children: null,
+  );
+}
+''');
+  }
+
+  Future<void> test_single() async {
     addMetaPackage();
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
@@ -396,7 +396,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['null);']);
   }
 
-  test_single_normal() async {
+  Future<void> test_single_normal() async {
     addMetaPackage();
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
@@ -416,7 +416,7 @@
 ''');
   }
 
-  test_single_with_details() async {
+  Future<void> test_single_with_details() async {
     addMetaPackage();
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart
index c8b6d00..a844e27 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddNeNullTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_NE_NULL;
 
-  test_nonBoolCondition() async {
+  Future<void> test_nonBoolCondition() async {
     await resolveTestUnit('''
 main(String p) {
   if (p) {
@@ -37,7 +37,7 @@
 ''');
   }
 
-  test_nonBoolCondition_all() async {
+  Future<void> test_nonBoolCondition_all() async {
     await resolveTestUnit('''
 main(String p, String q) {
   if (p) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_override_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_override_test.dart
index 69c6aeb..4113925 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_override_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_override_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddOverrideTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.annotate_overrides;
 
-  test_field() async {
+  Future<void> test_field() async {
     await resolveTestUnit('''
 class abstract Test {
   int get t;
@@ -43,7 +43,7 @@
 ''');
   }
 
-  test_getter() async {
+  Future<void> test_getter() async {
     await resolveTestUnit('''
 class Test {
   int get t => null;
@@ -63,7 +63,7 @@
 ''');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 class Test {
   void t() { }
@@ -83,7 +83,7 @@
 ''');
   }
 
-  test_method_with_doc_comment() async {
+  Future<void> test_method_with_doc_comment() async {
     await resolveTestUnit('''
 class Test {
   void t() { }
@@ -105,7 +105,7 @@
 ''');
   }
 
-  test_method_with_doc_comment_2() async {
+  Future<void> test_method_with_doc_comment_2() async {
     await resolveTestUnit('''
 class Test {
   void t() { }
@@ -131,7 +131,7 @@
 ''');
   }
 
-  test_method_with_doc_comment_and_metadata() async {
+  Future<void> test_method_with_doc_comment_and_metadata() async {
     await resolveTestUnit('''
 class Test {
   void t() { }
@@ -155,7 +155,7 @@
 ''');
   }
 
-  test_method_with_non_doc_comment() async {
+  Future<void> test_method_with_non_doc_comment() async {
     await resolveTestUnit('''
 class Test {
   void t() { }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
index 79a452c..8eccd35 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddRequiredTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.always_require_non_null_named_parameters;
 
-  test_withAssert() async {
+  Future<void> test_withAssert() async {
     await resolveTestUnit('''
 void function({String /*LINT*/param}) {
   assert(param != null);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart
index d7540ca..dc6e266 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddReturnTypeLintTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.always_declare_return_types;
 
-  test_localFunction_block() async {
+  Future<void> test_localFunction_block() async {
     await resolveTestUnit('''
 class A {
   void m() {
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_localFunction_expression() async {
+  Future<void> test_localFunction_expression() async {
     await resolveTestUnit('''
 class A {
   void m() {
@@ -61,7 +61,7 @@
 ''');
   }
 
-  test_method_block_noReturn() async {
+  Future<void> test_method_block_noReturn() async {
     await resolveTestUnit('''
 class A {
   /*LINT*/m() {
@@ -71,7 +71,7 @@
     await assertNoFix();
   }
 
-  test_method_block_returnDynamic() async {
+  Future<void> test_method_block_returnDynamic() async {
     await resolveTestUnit('''
 class A {
   /*LINT*/m(p) {
@@ -82,7 +82,7 @@
     await assertNoFix();
   }
 
-  test_method_block_returnNoValue() async {
+  Future<void> test_method_block_returnNoValue() async {
     await resolveTestUnit('''
 class A {
   /*LINT*/m() {
@@ -99,7 +99,7 @@
 ''');
   }
 
-  test_method_block_singleReturn() async {
+  Future<void> test_method_block_singleReturn() async {
     await resolveTestUnit('''
 class A {
   /*LINT*/m() {
@@ -116,7 +116,7 @@
 ''');
   }
 
-  test_method_expression() async {
+  Future<void> test_method_expression() async {
     await resolveTestUnit('''
 class A {
   /*LINT*/m() => '';
@@ -129,7 +129,7 @@
 ''');
   }
 
-  test_topLevelFunction_block() async {
+  Future<void> test_topLevelFunction_block() async {
     await resolveTestUnit('''
 /*LINT*/f() {
   return '';
@@ -142,7 +142,7 @@
 ''');
   }
 
-  test_topLevelFunction_expression() async {
+  Future<void> test_topLevelFunction_expression() async {
     await resolveTestUnit('''
 /*LINT*/f() => '';
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_static_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_static_test.dart
index bf136bd..13f5b25 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_static_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_static_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddStaticTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_STATIC;
 
-  test_multipleFields() async {
+  Future<void> test_multipleFields() async {
     await resolveTestUnit('''
 class C {
   const int x = 0, y = 0;
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_oneField() async {
+  Future<void> test_oneField() async {
     await resolveTestUnit('''
 class C {
   const int x = 0;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_super_constructor_invocation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_super_constructor_invocation_test.dart
index f923e4f..ba495c8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_super_constructor_invocation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_super_constructor_invocation_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddSuperConstructorInvocationTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION;
 
-  test_hasInitializers() async {
+  Future<void> test_hasInitializers() async {
     await resolveTestUnit('''
 class A {
   A(int p);
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_named() async {
+  Future<void> test_named() async {
     await resolveTestUnit('''
 class A {
   A.named(int p);
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_named_private() async {
+  Future<void> test_named_private() async {
     await resolveTestUnit('''
 class A {
   A._named(int p); // ignore: unused_element
@@ -71,7 +71,7 @@
     await assertNoFix();
   }
 
-  test_requiredAndNamed() async {
+  Future<void> test_requiredAndNamed() async {
     await resolveTestUnit('''
 class A {
   A(bool p1, int p2, double p3, String p4, {p5});
@@ -90,7 +90,7 @@
 ''');
   }
 
-  test_typeArgument() async {
+  Future<void> test_typeArgument() async {
     await resolveTestUnit('''
 class A<T> {
   A(T p);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
index 21b86e4..5eacfec 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddTypeAnnotationLintTest);
     defineReflectiveTests(AddTypeAnnotationTest);
@@ -25,7 +25,7 @@
   String get lintCode => LintNames.always_specify_types;
 
   // More coverage in the `add_type_annotation_test.dart` assist test.
-  test_do_block() async {
+  Future<void> test_do_block() async {
     await resolveTestUnit('''
 class A {
   /*LINT*/final f = 0;
@@ -44,7 +44,7 @@
   @override
   FixKind get kind => DartFixKind.ADD_TYPE_ANNOTATION;
 
-  test_missingFieldType() async {
+  Future<void> test_missingFieldType() async {
     // MISSING_CONST_FINAL_VAR_OR_TYPE
     await resolveTestUnit('''
 class A {
@@ -58,7 +58,7 @@
 ''');
   }
 
-  test_missingStaticFieldType() async {
+  Future<void> test_missingStaticFieldType() async {
     // MISSING_CONST_FINAL_VAR_OR_TYPE
     await resolveTestUnit('''
 class A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_setting_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_setting_test.dart
index 548d53a..c378884 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_setting_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_setting_test.dart
@@ -6,7 +6,7 @@
 
 import 'test_support.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveSettingTest);
   });
@@ -14,7 +14,7 @@
 
 @reflectiveTest
 class RemoveSettingTest extends AnalysisOptionsFixTest {
-  test_enableSuperMixins() async {
+  Future<void> test_enableSuperMixins() async {
     await assertHasFix('''
 analyzer:
   enable-experiment:
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_invalidExperiment_first() async {
+  Future<void> test_invalidExperiment_first() async {
     await assertHasFix('''
 analyzer:
   enable-experiment:
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_invalidExperiment_last() async {
+  Future<void> test_invalidExperiment_last() async {
     await assertHasFix('''
 analyzer:
   enable-experiment:
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_invalidExperiment_only() async {
+  Future<void> test_invalidExperiment_only() async {
     await assertHasFix('''
 analyzer:
   enable-experiment:
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
index c202ee9..e17f40e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'remove_setting_test.dart' as remove_setting;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     remove_setting.main();
   });
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_argument_name_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_argument_name_test.dart
index 2707a41..bd4ac94 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_argument_name_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_argument_name_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeArgumentNameTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_ARGUMENT_NAME;
 
-  test_child_constructor() async {
+  Future<void> test_child_constructor() async {
     await resolveTestUnit('''
 f() => new A(children: 2);
 class A {
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_child_function() async {
+  Future<void> test_child_function() async {
     await resolveTestUnit('''
 f() {
   g(children: 0);
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_child_method() async {
+  Future<void> test_child_method() async {
     await resolveTestUnit('''
 f(A a) {
   a.m(children: 0);
@@ -68,7 +68,7 @@
 ''');
   }
 
-  test_children_constructor() async {
+  Future<void> test_children_constructor() async {
     await resolveTestUnit('''
 f() => new A(child: 2);
 class A {
@@ -83,7 +83,7 @@
 ''');
   }
 
-  test_children_function() async {
+  Future<void> test_children_function() async {
     await resolveTestUnit('''
 f() {
   g(child: 0);
@@ -98,7 +98,7 @@
 ''');
   }
 
-  test_children_method() async {
+  Future<void> test_children_method() async {
     await resolveTestUnit('''
 f(A a) {
   a.m(child: 0);
@@ -117,7 +117,7 @@
 ''');
   }
 
-  test_default_annotation() async {
+  Future<void> test_default_annotation() async {
     await resolveTestUnit('''
 @A(boot: 2)
 f() => null;
@@ -134,7 +134,7 @@
 ''');
   }
 
-  test_default_constructor() async {
+  Future<void> test_default_constructor() async {
     await resolveTestUnit('''
 f() => new A(boot: 2);
 class A {
@@ -149,7 +149,7 @@
 ''');
   }
 
-  test_default_function() async {
+  Future<void> test_default_function() async {
     await resolveTestUnit('''
 f() {
   g(boot: 0);
@@ -164,7 +164,7 @@
 ''');
   }
 
-  test_default_method() async {
+  Future<void> test_default_method() async {
     await resolveTestUnit('''
 f(A a) {
   a.m(boot: 0);
@@ -183,7 +183,7 @@
 ''');
   }
 
-  test_default_redirectingConstructor() async {
+  Future<void> test_default_redirectingConstructor() async {
     await resolveTestUnit('''
 class A {
   A.one() : this.two(boot: 3);
@@ -198,7 +198,7 @@
 ''');
   }
 
-  test_default_superConstructor() async {
+  Future<void> test_default_superConstructor() async {
     await resolveTestUnit('''
 class A {
   A.a({int boat});
@@ -217,7 +217,7 @@
 ''');
   }
 
-  test_tooDistant_constructor() async {
+  Future<void> test_tooDistant_constructor() async {
     await resolveTestUnit('''
 f() => new A(bbbbb: 2);
 class A {
@@ -227,7 +227,7 @@
     await assertNoFix();
   }
 
-  test_tooDistant_function() async {
+  Future<void> test_tooDistant_function() async {
     await resolveTestUnit('''
 f() {
   g(bbbbb: 0);
@@ -237,7 +237,7 @@
     await assertNoFix();
   }
 
-  test_tooDistant_method() async {
+  Future<void> test_tooDistant_method() async {
     await resolveTestUnit('''
 f(A a) {
   a.m(bbbbb: 0);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_nearest_precise_value_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_nearest_precise_value_test.dart
index 01c6749..6a9c074 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_nearest_precise_value_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_nearest_precise_value_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeToNearestPreciseValueTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_TO_NEAREST_PRECISE_VALUE;
 
-  test_impreciseIntAsDouble() async {
+  Future<void> test_impreciseIntAsDouble() async {
     await resolveTestUnit('''
 double x = 1000000000000000000000000;
 ''');
@@ -28,7 +28,7 @@
 ''');
   }
 
-  test_impreciseIntAsDouble_asCapitalHex() async {
+  Future<void> test_impreciseIntAsDouble_asCapitalHex() async {
     await resolveTestUnit('''
 double x = 0X1000000000000000000000001;
 ''');
@@ -37,7 +37,7 @@
 ''');
   }
 
-  test_impreciseIntAsDouble_asHex() async {
+  Future<void> test_impreciseIntAsDouble_asHex() async {
     await resolveTestUnit('''
 double x = 0x1000000000000000000000001;
 ''');
@@ -46,7 +46,7 @@
 ''');
   }
 
-  test_impreciseIntAsDouble_maxValue() async {
+  Future<void> test_impreciseIntAsDouble_maxValue() async {
     await resolveTestUnit('''
 double x = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
 ''');
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_impreciseIntAsDouble_maxValue_asHex() async {
+  Future<void> test_impreciseIntAsDouble_maxValue_asHex() async {
     await resolveTestUnit('''
 double x = 0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_static_access_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_static_access_test.dart
index 8ae3d08..0011642 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_static_access_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_static_access_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeToStaticAccessClassTest);
     defineReflectiveTests(ChangeToStaticAccessExtensionTest);
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_TO_STATIC_ACCESS;
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 class A {
   static foo() {}
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_method_importType() async {
+  Future<void> test_method_importType() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {
   static foo() {}
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_method_prefixLibrary() async {
+  Future<void> test_method_prefixLibrary() async {
     await resolveTestUnit('''
 import 'dart:async' as pref;
 main(pref.Future f) {
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_property() async {
+  Future<void> test_property() async {
     await resolveTestUnit('''
 class A {
   static get foo => 42;
@@ -101,7 +101,7 @@
 ''');
   }
 
-  test_property_importType() async {
+  Future<void> test_property_importType() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {
   static get foo => null;
@@ -135,7 +135,7 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_TO_STATIC_ACCESS;
 
-  test_method() async {
+  Future<void> test_method() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await resolveTestUnit('''
 extension E on int {
@@ -156,7 +156,7 @@
   }
 
   @failingTest
-  test_property() async {
+  Future<void> test_property() async {
     createAnalysisOptionsFile(experiments: ['extension-methods']);
     await resolveTestUnit('''
 extension E on int {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
index 0f02b8c..a91fc11 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeToTest);
     defineReflectiveTests(ChangeToWithExtensionMethodsTest);
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_TO;
 
-  test_class_fromImport() async {
+  Future<void> test_class_fromImport() async {
     await resolveTestUnit('''
 main() {
   Stirng s = 'abc';
@@ -35,7 +35,7 @@
 ''');
   }
 
-  test_class_fromThisLibrary() async {
+  Future<void> test_class_fromThisLibrary() async {
     await resolveTestUnit('''
 class MyClass {}
 main() {
@@ -52,7 +52,7 @@
 ''');
   }
 
-  test_class_prefixed() async {
+  Future<void> test_class_prefixed() async {
     await resolveTestUnit('''
 import 'dart:async' as c;
 main() {
@@ -69,7 +69,7 @@
 ''');
   }
 
-  test_function_fromImport() async {
+  Future<void> test_function_fromImport() async {
     await resolveTestUnit('''
 main() {
   pritn(0);
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_function_prefixed_fromImport() async {
+  Future<void> test_function_prefixed_fromImport() async {
     await resolveTestUnit('''
 import 'dart:core' as c;
 main() {
@@ -97,7 +97,7 @@
 ''');
   }
 
-  test_function_prefixed_ignoreLocal() async {
+  Future<void> test_function_prefixed_ignoreLocal() async {
     await resolveTestUnit('''
 import 'dart:async' as c;
 main() {
@@ -107,7 +107,7 @@
     await assertNoFix();
   }
 
-  test_function_thisLibrary() async {
+  Future<void> test_function_thisLibrary() async {
     await resolveTestUnit('''
 myFunction() {}
 main() {
@@ -122,7 +122,7 @@
 ''');
   }
 
-  test_getter_hint() async {
+  Future<void> test_getter_hint() async {
     await resolveTestUnit('''
 class A {
   int myField;
@@ -143,7 +143,7 @@
 ''');
   }
 
-  test_getter_qualified() async {
+  Future<void> test_getter_qualified() async {
     await resolveTestUnit('''
 class A {
   int myField;
@@ -162,7 +162,7 @@
 ''');
   }
 
-  test_getter_qualified_static() async {
+  Future<void> test_getter_qualified_static() async {
     await resolveTestUnit('''
 class A {
   static int MY_NAME = 1;
@@ -181,7 +181,7 @@
 ''');
   }
 
-  test_getter_unqualified() async {
+  Future<void> test_getter_unqualified() async {
     await resolveTestUnit('''
 class A {
   int myField;
@@ -200,7 +200,7 @@
 ''');
   }
 
-  test_method_ignoreOperators() async {
+  Future<void> test_method_ignoreOperators() async {
     await resolveTestUnit('''
 main(Object object) {
   object.then();
@@ -209,7 +209,7 @@
     await assertNoFix();
   }
 
-  test_method_qualified() async {
+  Future<void> test_method_qualified() async {
     await resolveTestUnit('''
 class A {
   myMethod() {}
@@ -230,7 +230,7 @@
 ''');
   }
 
-  test_method_unqualified_superClass() async {
+  Future<void> test_method_unqualified_superClass() async {
     await resolveTestUnit('''
 class A {
   myMethod() {}
@@ -253,7 +253,7 @@
 ''');
   }
 
-  test_method_unqualified_thisClass() async {
+  Future<void> test_method_unqualified_thisClass() async {
     await resolveTestUnit('''
 class A {
   myMethod() {}
@@ -272,7 +272,7 @@
 ''');
   }
 
-  test_setter_hint() async {
+  Future<void> test_setter_hint() async {
     await resolveTestUnit('''
 class A {
   int myField;
@@ -293,7 +293,7 @@
 ''');
   }
 
-  test_setter_qualified() async {
+  Future<void> test_setter_qualified() async {
     await resolveTestUnit('''
 class A {
   int myField;
@@ -312,7 +312,7 @@
 ''');
   }
 
-  test_setter_unqualified() async {
+  Future<void> test_setter_unqualified() async {
     await resolveTestUnit('''
 class A {
   int myField;
@@ -343,7 +343,7 @@
     super.setUp();
   }
 
-  test_getter_override() async {
+  Future<void> test_getter_override() async {
     await resolveTestUnit('''
 extension E on int {
   int get myGetter => 0;
@@ -362,7 +362,7 @@
 ''');
   }
 
-  test_getter_static() async {
+  Future<void> test_getter_static() async {
     await resolveTestUnit('''
 extension E on int {
   static int get myGetter => 0;
@@ -381,7 +381,7 @@
 ''');
   }
 
-  test_method_override() async {
+  Future<void> test_method_override() async {
     await resolveTestUnit('''
 extension E on int {
   int myMethod() => 0;
@@ -400,7 +400,7 @@
 ''');
   }
 
-  test_method_static() async {
+  Future<void> test_method_static() async {
     await resolveTestUnit('''
 extension E on int {
   static int myMethod() => 0;
@@ -419,7 +419,7 @@
 ''');
   }
 
-  test_setter_override() async {
+  Future<void> test_setter_override() async {
     await resolveTestUnit('''
 extension E on int {
   void set mySetter(int i) {}
@@ -438,7 +438,7 @@
 ''');
   }
 
-  test_setter_static() async {
+  Future<void> test_setter_static() async {
     await resolveTestUnit('''
 extension E on int {
   static void set mySetter(int i) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart
index 8fbb66a..b40284a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_type_annotation_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ChangeTypeAnnotationTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CHANGE_TYPE_ANNOTATION;
 
-  test_generic() async {
+  Future<void> test_generic() async {
     await resolveTestUnit('''
 main() {
   String v = <int>[];
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_multipleVariables() async {
+  Future<void> test_multipleVariables() async {
     await resolveTestUnit('''
 main() {
   String a, b = 42;
@@ -44,7 +44,7 @@
     await assertNoFix();
   }
 
-  test_notVariableDeclaration() async {
+  Future<void> test_notVariableDeclaration() async {
     await resolveTestUnit('''
 main() {
   String v;
@@ -55,7 +55,7 @@
     await assertNoFix();
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 main() {
   String v = 'abc'.length;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_documentation_into_line_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_documentation_into_line_test.dart
index 0d75e37..2dccc30 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_documentation_into_line_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_documentation_into_line_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertDocumentationIntoLineTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.slash_for_doc_comments;
 
   /// More coverage in the `convert_to_documentation_line_test.dart` assist test.
-  test_onText() async {
+  Future<void> test_onText() async {
     await resolveTestUnit('''
 class A {
   /**
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_child_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_child_test.dart
index e75321d..3e17f59 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_child_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_child_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertFlutterChildTest);
   });
@@ -19,7 +19,67 @@
   @override
   FixKind get kind => DartFixKind.CONVERT_FLUTTER_CHILD;
 
-  test_hasList() async {
+  Future<void> test_hasList() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+build() {
+  return Container(
+    child: Row(
+      child: [
+        Text('111'),
+        Text('222'),
+      ],
+    ),
+  );
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+build() {
+  return Container(
+    child: Row(
+      children: [
+        Text('111'),
+        Text('222'),
+      ],
+    ),
+  );
+}
+''');
+  }
+
+  Future<void> test_hasTypedList() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+build() {
+  return new Container(
+    child: new Row(
+      child: <Widget>[
+        new Text('111'),
+        new Text('222'),
+      ],
+    ),
+  );
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+build() {
+  return new Container(
+    child: new Row(
+      children: <Widget>[
+        new Text('111'),
+        new Text('222'),
+      ],
+    ),
+  );
+}
+''');
+  }
+
+  Future<void> test_listNotWidget() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -27,66 +87,6 @@
   return new Container(
     child: new Row(
       child: [
-        new Text('111'),
-        new Text('222'),
-      ],
-    ),
-  );
-}
-''');
-    await assertHasFix('''
-import 'package:flutter/widgets.dart';
-build() {
-  return new Container(
-    child: new Row(
-      children: <Widget>[
-        new Text('111'),
-        new Text('222'),
-      ],
-    ),
-  );
-}
-''');
-  }
-
-  test_hasTypedList() async {
-    addFlutterPackage();
-    await resolveTestUnit('''
-import 'package:flutter/widgets.dart';
-build() {
-  return new Container(
-    child: new Row(
-      child: <Widget>[
-        new Text('111'),
-        new Text('222'),
-      ],
-    ),
-  );
-}
-''');
-    await assertHasFix('''
-import 'package:flutter/widgets.dart';
-build() {
-  return new Container(
-    child: new Row(
-      children: <Widget>[
-        new Text('111'),
-        new Text('222'),
-      ],
-    ),
-  );
-}
-''');
-  }
-
-  test_listNotWidget() async {
-    addFlutterPackage();
-    await resolveTestUnit('''
-import 'package:flutter/widgets.dart';
-build() {
-  return new Container(
-    child: new Row(
-      child: <Widget>[
         new Container(),
         null,
       ],
@@ -97,7 +97,7 @@
     await assertNoFix();
   }
 
-  test_multiLine() async {
+  Future<void> test_multiLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -117,7 +117,7 @@
 build() {
   return new Scaffold(
     body: new Row(
-      children: <Widget>[
+      children: [
         new Container(
           width: 200.0,
           height: 300.0,
@@ -129,7 +129,7 @@
 ''');
   }
 
-  test_widgetVariable() async {
+  Future<void> test_widgetVariable() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -145,7 +145,7 @@
 build() {
   var text = new Text('foo');
   new Row(
-    children: <Widget>[text],
+    children: [text],
   );
 }
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_children_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_children_test.dart
index f975f0a..8f71ef6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_children_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_flutter_children_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertFlutterChildrenTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CONVERT_FLUTTER_CHILDREN;
 
-  test_undefinedParameter_multiLine() async {
+  Future<void> test_undefinedParameter_multiLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -47,7 +47,7 @@
 ''');
   }
 
-  test_undefinedParameter_notWidget() async {
+  Future<void> test_undefinedParameter_notWidget() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -62,7 +62,7 @@
     await assertNoFix();
   }
 
-  test_undefinedParameter_singleLine() async {
+  Future<void> test_undefinedParameter_singleLine() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -84,7 +84,7 @@
 ''');
   }
 
-  test_undefinedParameter_singleLine2() async {
+  Future<void> test_undefinedParameter_singleLine2() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart
index 6ec1ad1..832ea45 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoExpressionBodyTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.prefer_expression_function_bodies;
 
   /// More coverage in the `convert_into_expression_body_test.dart` assist test.
-  test_async() async {
+  Future<void> test_async() async {
     await resolveTestUnit('''
 class A {
   mmm() async { 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_for_element_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_for_element_test.dart
index 450db7e..76ae348 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_for_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_for_element_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToForElementTest);
   });
@@ -24,7 +24,8 @@
   String get lintCode => LintNames.prefer_for_elements_to_map_fromIterable;
 
   /// More coverage in the `convert_to_for_element_line_test.dart` assist test.
-  test_mapFromIterable_differentParameterNames_usedInKey_conflictInValue() async {
+  Future<void>
+      test_mapFromIterable_differentParameterNames_usedInKey_conflictInValue() async {
     await resolveTestUnit('''
 f(Iterable<int> i) {
   var k = 3;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart
index 4ce86e6..fd4e744 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PreferGenericFunctionTypeAliasesTest);
     defineReflectiveTests(UseFunctionTypeSyntaxForParametersTest);
@@ -24,14 +24,14 @@
   @override
   String get lintCode => LintNames.prefer_generic_function_type_aliases;
 
-  test_functionTypeAlias_noParameterTypes() async {
+  Future<void> test_functionTypeAlias_noParameterTypes() async {
     await resolveTestUnit('''
 typedef String /*LINT*/F(x);
 ''');
     await assertNoFix();
   }
 
-  test_functionTypeAlias_noReturnType_noTypeParameters() async {
+  Future<void> test_functionTypeAlias_noReturnType_noTypeParameters() async {
     await resolveTestUnit('''
 typedef String /*LINT*/F(int x);
 ''');
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_functionTypeAlias_noReturnType_typeParameters() async {
+  Future<void> test_functionTypeAlias_noReturnType_typeParameters() async {
     await resolveTestUnit('''
 typedef /*LINT*/F<P, R>(P x);
 ''');
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_functionTypeAlias_returnType_noTypeParameters() async {
+  Future<void> test_functionTypeAlias_returnType_noTypeParameters() async {
     await resolveTestUnit('''
 typedef String /*LINT*/F(int x);
 ''');
@@ -58,7 +58,7 @@
 ''');
   }
 
-  test_functionTypeAlias_returnType_typeParameters() async {
+  Future<void> test_functionTypeAlias_returnType_typeParameters() async {
     await resolveTestUnit('''
 typedef R /*LINT*/F<P, R>(P x);
 ''');
@@ -76,14 +76,14 @@
   @override
   String get lintCode => LintNames.use_function_type_syntax_for_parameters;
 
-  test_functionTypedParameter_noParameterTypes() async {
+  Future<void> test_functionTypedParameter_noParameterTypes() async {
     await resolveTestUnit('''
 g(String /*LINT*/f(x)) {}
 ''');
     await assertNoFix();
   }
 
-  test_functionTypedParameter_returnType() async {
+  Future<void> test_functionTypedParameter_returnType() async {
     await resolveTestUnit('''
 g(String /*LINT*/f(int x)) {}
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_element_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_element_test.dart
index c99a0be..b4a8b0d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_element_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToIfElementTest);
   });
@@ -25,7 +25,7 @@
       LintNames.prefer_if_elements_to_conditional_expressions;
 
   // More coverage in the `convert_to_if_element_test.dart` assist test.
-  test_conditional_list() async {
+  Future<void> test_conditional_list() async {
     await resolveTestUnit('''
 f(bool b) {
   return ['a', b /*LINT*/? 'c' : 'd', 'e'];
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart
index 50e4277..feac4bd 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToIfNullTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_if_null_operators;
 
-  test_equalEqual() async {
+  Future<void> test_equalEqual() async {
     await resolveTestUnit('''
 void f(String s) {
   print(/*LINT*/s == null ? 'default' : s);
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_notEqual() async {
+  Future<void> test_notEqual() async {
     await resolveTestUnit('''
 void f(String s) {
   print(/*LINT*/s != null ? s : 'default');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_int_literal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_int_literal_test.dart
index 09a819e..76a903e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_int_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_int_literal_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToIntLiteralTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.prefer_int_literals;
 
   /// More coverage in the `convert_to_int_literal_test.dart` assist test.
-  test_decimal() async {
+  Future<void> test_decimal() async {
     await resolveTestUnit('''
 const double myDouble = /*LINT*/42.0;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart
index 26164f4..d3af501 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToListLiteralTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_collection_literals;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 List l = /*LINT*/List();
 ''');
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_default_minimal() async {
+  Future<void> test_default_minimal() async {
     await resolveTestUnit('''
 var l = /*LINT*/List();
 ''');
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_default_newKeyword() async {
+  Future<void> test_default_newKeyword() async {
     await resolveTestUnit('''
 var l = /*LINT*/new List();
 ''');
@@ -50,14 +50,14 @@
 ''');
   }
 
-  test_default_tooManyArguments() async {
+  Future<void> test_default_tooManyArguments() async {
     await resolveTestUnit('''
 var l = /*LINT*/List(5);
 ''');
     await assertNoFix();
   }
 
-  test_default_typeArg() async {
+  Future<void> test_default_typeArg() async {
     await resolveTestUnit('''
 var l = /*LINT*/List<int>();
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_map_literal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_map_literal_test.dart
index be18574..1287453 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_map_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_map_literal_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToMapLiteralTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_collection_literals;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 Map m = /*LINT*/Map();
 ''');
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_default_linkedHashMap() async {
+  Future<void> test_default_linkedHashMap() async {
     await resolveTestUnit('''
 import 'dart:collection';
 var m = /*LINT*/LinkedHashMap();
@@ -43,7 +43,7 @@
 ''');
   }
 
-  test_default_minimal() async {
+  Future<void> test_default_minimal() async {
     await resolveTestUnit('''
 var m = /*LINT*/Map();
 ''');
@@ -52,7 +52,7 @@
 ''');
   }
 
-  test_default_newKeyword() async {
+  Future<void> test_default_newKeyword() async {
     await resolveTestUnit('''
 var m = /*LINT*/new Map();
 ''');
@@ -61,7 +61,7 @@
 ''');
   }
 
-  test_default_typeArg() async {
+  Future<void> test_default_typeArg() async {
     await resolveTestUnit('''
 var m = /*LINT*/Map<String, int>();
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_named_arguments_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_named_arguments_test.dart
index 7760596..95bcb68 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_named_arguments_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_named_arguments_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToNamedArgumentsTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CONVERT_TO_NAMED_ARGUMENTS;
 
-  test_ambiguous() async {
+  Future<void> test_ambiguous() async {
     await resolveTestUnit('''
 class A {
   A({int a, int b});
@@ -32,7 +32,7 @@
     await assertNoFix();
   }
 
-  test_functionExpressionInvocation_getter() async {
+  Future<void> test_functionExpressionInvocation_getter() async {
     await resolveTestUnit('''
 class A {
   void Function({int aaa}) get g => null;
@@ -53,7 +53,7 @@
 ''');
   }
 
-  test_functionExpressionInvocation_variable() async {
+  Future<void> test_functionExpressionInvocation_variable() async {
     await resolveTestUnit('''
 typedef F = void Function({int aaa});
 
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_instanceCreation() async {
+  Future<void> test_instanceCreation() async {
     await resolveTestUnit('''
 class A {
   A({int a, double b});
@@ -91,7 +91,7 @@
 ''');
   }
 
-  test_instanceCreation_hasPositional() async {
+  Future<void> test_instanceCreation_hasPositional() async {
     await resolveTestUnit('''
 class A {
   A(int a, {int b});
@@ -112,7 +112,7 @@
 ''');
   }
 
-  test_methodInvocation() async {
+  Future<void> test_methodInvocation() async {
     await resolveTestUnit('''
 class C {
   void foo({int a}) {}
@@ -133,7 +133,7 @@
 ''');
   }
 
-  test_noCompatibleParameter() async {
+  Future<void> test_noCompatibleParameter() async {
     await resolveTestUnit('''
 class A {
   A({String a});
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_null_aware_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_null_aware_test.dart
index 3f8d5e6..f84f0ec 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_null_aware_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_null_aware_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToNullAwareTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.prefer_null_aware_operators;
 
   /// More coverage in the `convert_to_null_aware_test.dart` assist test.
-  test_equal_nullOnLeft() async {
+  Future<void> test_equal_nullOnLeft() async {
     await resolveTestUnit('''
 abstract class A {
   int m();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart
index 981d0e8..c55737c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToPackageImportTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.avoid_relative_lib_imports;
 
   /// More coverage in the `convert_to_package_import_test.dart` assist test.
-  test_relativeImport() async {
+  Future<void> test_relativeImport() async {
     addSource('/home/test/lib/foo.dart', '');
     testFile = convertPath('/home/test/lib/src/test.dart');
     await resolveTestUnit('''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart
index 26a0b78..f1ccd9a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToRelativeImportTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_relative_imports;
 
-  test_relativeImport() async {
+  Future<void> test_relativeImport() async {
     addSource('/home/test/lib/foo.dart', '');
     testFile = convertPath('/home/test/lib/src/test.dart');
     await resolveTestUnit('''
@@ -35,7 +35,7 @@
 ''');
   }
 
-  test_relativeImportDifferentPackages() async {
+  Future<void> test_relativeImportDifferentPackages() async {
     // Validate we don't get a fix with imports referencing different packages.
     addSource('/home/test1/lib/foo.dart', '');
     testFile = convertPath('/home/test2/lib/bar.dart');
@@ -46,7 +46,7 @@
     await assertNoFix();
   }
 
-  test_relativeImportGarbledUri() async {
+  Future<void> test_relativeImportGarbledUri() async {
     addSource('/home/test/lib/foo.dart', '');
     testFile = convertPath('/home/test/lib/bar.dart');
     await resolveTestUnit('''
@@ -58,7 +58,7 @@
 ''');
   }
 
-  test_relativeImportRespectQuoteStyle() async {
+  Future<void> test_relativeImportRespectQuoteStyle() async {
     addSource('/home/test/lib/foo.dart', '');
     testFile = convertPath('/home/test/lib/bar.dart');
     await resolveTestUnit('''
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_relativeImportSameDirectory() async {
+  Future<void> test_relativeImportSameDirectory() async {
     addSource('/home/test/lib/foo.dart', '');
     testFile = convertPath('/home/test/lib/bar.dart');
     await resolveTestUnit('''
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_relativeImportSubDirectory() async {
+  Future<void> test_relativeImportSubDirectory() async {
     addSource('/home/test/lib/baz/foo.dart', '');
     testFile = convertPath('/home/test/lib/test.dart');
     await resolveTestUnit('''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_set_literal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_set_literal_test.dart
index 9fdd206..553d2a0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_set_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_set_literal_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSetLiteralTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_collection_literals;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 Set s = /*LINT*/Set();
 ''');
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_default_minimal() async {
+  Future<void> test_default_minimal() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set();
 ''');
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_default_newKeyword() async {
+  Future<void> test_default_newKeyword() async {
     await resolveTestUnit('''
 var s = /*LINT*/new Set();
 ''');
@@ -50,7 +50,7 @@
 ''');
   }
 
-  test_default_typeArg() async {
+  Future<void> test_default_typeArg() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set<int>();
 ''');
@@ -60,7 +60,7 @@
   }
 
   @failingTest
-  test_default_typeArg_linkedHashSet() async {
+  Future<void> test_default_typeArg_linkedHashSet() async {
     // LinkedHashSet isn't converted even though the lint reports that case.
     await resolveTestUnit('''
 import 'dart:collection';
@@ -74,7 +74,7 @@
 ''');
   }
 
-  test_from_empty() async {
+  Future<void> test_from_empty() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set.from([]);
 ''');
@@ -84,7 +84,7 @@
   }
 
   @failingTest
-  test_from_inferred() async {
+  Future<void> test_from_inferred() async {
     // _setWouldBeInferred does not check for inference based on the parameter
     // type.
     await resolveTestUnit('''
@@ -97,7 +97,7 @@
 ''');
   }
 
-  test_from_newKeyword() async {
+  Future<void> test_from_newKeyword() async {
     await resolveTestUnit('''
 var s = /*LINT*/new Set.from([2, 3]);
 ''');
@@ -106,7 +106,7 @@
 ''');
   }
 
-  test_from_noKeyword_declaredType() async {
+  Future<void> test_from_noKeyword_declaredType() async {
     await resolveTestUnit('''
 Set s = /*LINT*/Set.from([2, 3]);
 ''');
@@ -115,7 +115,7 @@
 ''');
   }
 
-  test_from_noKeyword_typeArg_onConstructor() async {
+  Future<void> test_from_noKeyword_typeArg_onConstructor() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set<int>.from([2, 3]);
 ''');
@@ -124,7 +124,7 @@
 ''');
   }
 
-  test_from_noKeyword_typeArg_onConstructorAndLiteral() async {
+  Future<void> test_from_noKeyword_typeArg_onConstructorAndLiteral() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set<int>.from(<num>[2, 3]);
 ''');
@@ -133,7 +133,7 @@
 ''');
   }
 
-  test_from_noKeyword_typeArg_onLiteral() async {
+  Future<void> test_from_noKeyword_typeArg_onLiteral() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set.from(<int>[2, 3]);
 ''');
@@ -142,7 +142,7 @@
 ''');
   }
 
-  test_from_nonEmpty() async {
+  Future<void> test_from_nonEmpty() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set.from([2, 3]);
 ''');
@@ -151,7 +151,7 @@
 ''');
   }
 
-  test_from_notALiteral() async {
+  Future<void> test_from_notALiteral() async {
     await resolveTestUnit('''
 var l = [1];
 Set s = /*LINT*/new Set.from(l);
@@ -159,7 +159,7 @@
     await assertNoFix();
   }
 
-  test_from_trailingComma() async {
+  Future<void> test_from_trailingComma() async {
     await resolveTestUnit('''
 var s = /*LINT*/Set.from([2, 3,]);
 ''');
@@ -168,7 +168,7 @@
 ''');
   }
 
-  test_toSet_empty() async {
+  Future<void> test_toSet_empty() async {
     await resolveTestUnit('''
 var s = /*LINT*/[].toSet();
 ''');
@@ -177,7 +177,7 @@
 ''');
   }
 
-  test_toSet_empty_typeArg() async {
+  Future<void> test_toSet_empty_typeArg() async {
     await resolveTestUnit('''
 var s = /*LINT*/<int>[].toSet();
 ''');
@@ -186,7 +186,7 @@
 ''');
   }
 
-  test_toSet_nonEmpty() async {
+  Future<void> test_toSet_nonEmpty() async {
     await resolveTestUnit('''
 var s = /*LINT*/[2, 3].toSet();
 ''');
@@ -195,7 +195,7 @@
 ''');
   }
 
-  test_toSet_nonEmpty_typeArg() async {
+  Future<void> test_toSet_nonEmpty_typeArg() async {
     await resolveTestUnit('''
 var s = /*LINT*/<int>[2, 3].toSet();
 ''');
@@ -204,7 +204,7 @@
 ''');
   }
 
-  test_toSet_notALiteral() async {
+  Future<void> test_toSet_notALiteral() async {
     await resolveTestUnit('''
 var l = [];
 var s = /*LINT*/l.toSet();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart
index 610b82d..5899c01 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSingleQuotedStringTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.prefer_single_quotes;
 
   /// More coverage in the `convert_to_single_quoted_string_test.dart` assist test.
-  test_one_simple() async {
+  Future<void> test_one_simple() async {
     await resolveTestUnit('''
 main() {
   print(/*LINT*/"abc");
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_spread_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_spread_test.dart
index a2cf96e..089c9db 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_spread_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_spread_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSpreadTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.prefer_spread_collections;
 
   /// More coverage in the `convert_to_spread_test.dart` assist test.
-  test_addAll_expression() async {
+  Future<void> test_addAll_expression() async {
     await resolveTestUnit('''
 f() {
   var ints = [1, 2, 3];
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_where_type_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_where_type_test.dart
index c7e8f40..847c04a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_where_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_where_type_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToWhereTypeTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_iterable_whereType;
 
-  test_default_declaredType() async {
+  Future<void> test_default_declaredType() async {
     await resolveTestUnit('''
 Iterable<C> f(List<Object> list) {
   return list./*LINT*/where((e) => e is C);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
index 610c742..5a0c97c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateClassTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_CLASS;
 
-  test_hasUnresolvedPrefix() async {
+  Future<void> test_hasUnresolvedPrefix() async {
     await resolveTestUnit('''
 main() {
   prefix.Test v = null;
@@ -31,7 +31,7 @@
     await assertNoFix();
   }
 
-  test_inLibraryOfPrefix() async {
+  Future<void> test_inLibraryOfPrefix() async {
     addSource('/home/test/lib/lib.dart', r'''
 class A {}
 ''');
@@ -55,7 +55,7 @@
     expect(change.linkedEditGroups, hasLength(1));
   }
 
-  test_innerLocalFunction() async {
+  Future<void> test_innerLocalFunction() async {
     await resolveTestUnit('''
 f() {
   g() {
@@ -80,7 +80,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test v =', 'Test {']);
   }
 
-  test_instanceCreation_withoutNew_fromFunction() async {
+  Future<void> test_instanceCreation_withoutNew_fromFunction() async {
     await resolveTestUnit('''
 main() {
   Test ();
@@ -97,7 +97,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test ()', 'Test {']);
   }
 
-  test_instanceCreation_withoutNew_fromMethod() async {
+  Future<void> test_instanceCreation_withoutNew_fromMethod() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -118,7 +118,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test ()', 'Test {']);
   }
 
-  test_itemOfList() async {
+  Future<void> test_itemOfList() async {
     await resolveTestUnit('''
 main() {
   var a = [Test];
@@ -137,7 +137,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test];', 'Test {']);
   }
 
-  test_itemOfList_inAnnotation() async {
+  Future<void> test_itemOfList_inAnnotation() async {
     await resolveTestUnit('''
 class MyAnnotation {
   const MyAnnotation(a, b);
@@ -160,7 +160,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test])', 'Test {']);
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 main() {
   Test v = null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
index fa355b6..741a585 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateConstructorForFinalFieldsTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS;
 
-  test_flutter() async {
+  Future<void> test_flutter() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -45,7 +45,7 @@
     });
   }
 
-  test_flutter_childLast() async {
+  Future<void> test_flutter_childLast() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -71,7 +71,7 @@
     });
   }
 
-  test_flutter_childrenLast() async {
+  Future<void> test_flutter_childrenLast() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
@@ -97,7 +97,7 @@
     });
   }
 
-  test_inTopLevelMethod() async {
+  Future<void> test_inTopLevelMethod() async {
     await resolveTestUnit('''
 main() {
   final int v;
@@ -107,7 +107,7 @@
     await assertNoFix();
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 class Test {
   final int a;
@@ -128,7 +128,7 @@
     });
   }
 
-  test_topLevelField() async {
+  Future<void> test_topLevelField() async {
     await resolveTestUnit('''
 final int v;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart
index 0dd5c45..77e3e05 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateConstructorSuperTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR_SUPER;
 
-  test_fieldInitializer() async {
+  Future<void> test_fieldInitializer() async {
     await resolveTestUnit('''
 class A {
   int _field;
@@ -48,7 +48,7 @@
 ''');
   }
 
-  test_importType() async {
+  Future<void> test_importType() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {}
 ''');
@@ -75,7 +75,7 @@
 ''');
   }
 
-  test_named() async {
+  Future<void> test_named() async {
     await resolveTestUnit('''
 class A {
   A.named(p1, int p2);
@@ -100,7 +100,7 @@
 ''');
   }
 
-  test_optional() async {
+  Future<void> test_optional() async {
     await resolveTestUnit('''
 class A {
   A(p1, int p2, List<String> p3, [int p4]);
@@ -125,7 +125,7 @@
 ''');
   }
 
-  test_private() async {
+  Future<void> test_private() async {
     await resolveTestUnit('''
 class A {
   A._named(p); // ignore: unused_element
@@ -136,7 +136,7 @@
     await assertNoFix();
   }
 
-  test_typeArgument() async {
+  Future<void> test_typeArgument() async {
     await resolveTestUnit('''
 class C<T> {
   final T x;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
index c847a3d..83eb64c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateConstructorTest);
     defineReflectiveTests(CreateConstructorMixinTest);
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR;
 
-  test_named() async {
+  Future<void> test_named() async {
     await resolveTestUnit('''
 mixin M {}
 
@@ -39,7 +39,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR;
 
-  test_inLibrary_insteadOfSyntheticDefault() async {
+  Future<void> test_inLibrary_insteadOfSyntheticDefault() async {
     var a = newFile('/home/test/lib/a.dart', content: '''
 /// $_text200
 class A {}
@@ -59,7 +59,7 @@
 ''', target: a);
   }
 
-  test_inLibrary_named() async {
+  Future<void> test_inLibrary_named() async {
     var a = newFile('/home/test/lib/a.dart', content: '''
 /// $_text200
 class A {}
@@ -79,7 +79,7 @@
 ''', target: a);
   }
 
-  test_insteadOfSyntheticDefault() async {
+  Future<void> test_insteadOfSyntheticDefault() async {
     await resolveTestUnit('''
 class A {
   int field;
@@ -104,7 +104,7 @@
 ''');
   }
 
-  test_named() async {
+  Future<void> test_named() async {
     await resolveTestUnit('''
 class A {
   method() {}
@@ -126,7 +126,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['named(int ', 'named(1']);
   }
 
-  test_named_emptyClassBody() async {
+  Future<void> test_named_emptyClassBody() async {
     await resolveTestUnit('''
 class A {}
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart
index b0fad28..ff6b144 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateFieldTest);
     defineReflectiveTests(CreateFieldMixinTest);
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_FIELD;
 
-  test_getter_qualified_instance() async {
+  Future<void> test_getter_qualified_instance() async {
     await resolveTestUnit('''
 mixin M {
 }
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_setter_qualified_instance_hasField() async {
+  Future<void> test_setter_qualified_instance_hasField() async {
     await resolveTestUnit('''
 mixin M {
   int aaa;
@@ -77,7 +77,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_FIELD;
 
-  test_getter_multiLevel() async {
+  Future<void> test_getter_multiLevel() async {
     await resolveTestUnit('''
 class A {
 }
@@ -109,7 +109,7 @@
 ''');
   }
 
-  test_getter_qualified_instance() async {
+  Future<void> test_getter_qualified_instance() async {
     await resolveTestUnit('''
 class A {
 }
@@ -129,7 +129,7 @@
 ''');
   }
 
-  test_getter_qualified_instance_differentLibrary() async {
+  Future<void> test_getter_qualified_instance_differentLibrary() async {
     addSource('/home/test/lib/other.dart', '''
 /**
  * A comment to push the offset of the braces for the following class
@@ -163,7 +163,7 @@
 ''', target: '/home/test/lib/other.dart');
   }
 
-  test_getter_qualified_instance_dynamicType() async {
+  Future<void> test_getter_qualified_instance_dynamicType() async {
     await resolveTestUnit('''
 class A {
   B b;
@@ -187,7 +187,7 @@
 ''');
   }
 
-  test_getter_qualified_propagatedType() async {
+  Future<void> test_getter_qualified_propagatedType() async {
     await resolveTestUnit('''
 class A {
   A get self => this;
@@ -212,7 +212,7 @@
 ''');
   }
 
-  test_getter_unqualified_instance_asInvocationArgument() async {
+  Future<void> test_getter_unqualified_instance_asInvocationArgument() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -233,7 +233,7 @@
 ''');
   }
 
-  test_getter_unqualified_instance_assignmentRhs() async {
+  Future<void> test_getter_unqualified_instance_assignmentRhs() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -254,7 +254,7 @@
 ''');
   }
 
-  test_getter_unqualified_instance_asStatement() async {
+  Future<void> test_getter_unqualified_instance_asStatement() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -273,7 +273,7 @@
 ''');
   }
 
-  test_hint() async {
+  Future<void> test_hint() async {
     await resolveTestUnit('''
 class A {
 }
@@ -295,7 +295,7 @@
 ''');
   }
 
-  test_hint_setter() async {
+  Future<void> test_hint_setter() async {
     await resolveTestUnit('''
 class A {
 }
@@ -315,7 +315,7 @@
 ''');
   }
 
-  test_importType() async {
+  Future<void> test_importType() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {}
 ''');
@@ -351,7 +351,7 @@
 ''');
   }
 
-  test_inEnum() async {
+  Future<void> test_inEnum() async {
     await resolveTestUnit('''
 enum MyEnum {
   AAA, BBB
@@ -363,7 +363,7 @@
     await assertNoFix();
   }
 
-  test_inSDK() async {
+  Future<void> test_inSDK() async {
     await resolveTestUnit('''
 main(List p) {
   p.foo = 1;
@@ -372,7 +372,7 @@
     await assertNoFix();
   }
 
-  test_invalidInitializer_withoutType() async {
+  Future<void> test_invalidInitializer_withoutType() async {
     await resolveTestUnit('''
 class C {
   C(this.text);
@@ -387,7 +387,7 @@
 ''');
   }
 
-  test_invalidInitializer_withType() async {
+  Future<void> test_invalidInitializer_withType() async {
     await resolveTestUnit('''
 class C {
   C(String this.text);
@@ -402,7 +402,7 @@
 ''');
   }
 
-  test_setter_generic_BAD() async {
+  Future<void> test_setter_generic_BAD() async {
     await resolveTestUnit('''
 class A {
 }
@@ -426,7 +426,7 @@
 ''');
   }
 
-  test_setter_generic_OK_local() async {
+  Future<void> test_setter_generic_OK_local() async {
     await resolveTestUnit('''
 class A<T> {
   List<T> items;
@@ -449,7 +449,7 @@
 ''');
   }
 
-  test_setter_qualified_instance_hasField() async {
+  Future<void> test_setter_qualified_instance_hasField() async {
     await resolveTestUnit('''
 class A {
   int aaa;
@@ -476,7 +476,7 @@
 ''');
   }
 
-  test_setter_qualified_instance_hasMethod() async {
+  Future<void> test_setter_qualified_instance_hasMethod() async {
     await resolveTestUnit('''
 class A {
   existingMethod() {}
@@ -497,7 +497,7 @@
 ''');
   }
 
-  test_setter_qualified_static() async {
+  Future<void> test_setter_qualified_static() async {
     await resolveTestUnit('''
 class A {
 }
@@ -515,7 +515,7 @@
 ''');
   }
 
-  test_setter_unqualified_instance() async {
+  Future<void> test_setter_unqualified_instance() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -534,7 +534,7 @@
 ''');
   }
 
-  test_setter_unqualified_static() async {
+  Future<void> test_setter_unqualified_static() async {
     await resolveTestUnit('''
 class A {
   static main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart
index 3bb2fd8..af8e317 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateFileTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_FILE;
 
-  test_forImport() async {
+  Future<void> test_forImport() async {
     await resolveTestUnit('''
 import 'my_file.dart';
 ''');
@@ -39,14 +39,14 @@
     );
   }
 
-  test_forImport_BAD_notDart() async {
+  Future<void> test_forImport_BAD_notDart() async {
     await resolveTestUnit('''
 import 'my_file.txt';
 ''');
     await assertNoFix();
   }
 
-  test_forImport_inPackage_lib() async {
+  Future<void> test_forImport_inPackage_lib() async {
     await resolveTestUnit('''
 import 'a/bb/my_lib.dart';
 ''');
@@ -64,7 +64,7 @@
     );
   }
 
-  test_forImport_inPackage_test() async {
+  Future<void> test_forImport_inPackage_test() async {
     testFile = convertPath('/home/test/test/test.dart');
     await resolveTestUnit('''
 import 'a/bb/my_lib.dart';
@@ -83,7 +83,7 @@
     );
   }
 
-  test_forPart() async {
+  Future<void> test_forPart() async {
     await resolveTestUnit('''
 library my.lib;
 part 'my_part.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
index 36c8426..e7bb640 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateFunctionTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_FUNCTION;
 
-  assert_returnType_bool(String lineWithTest) async {
+  Future<void> assert_returnType_bool(String lineWithTest) async {
     await resolveTestUnit('''
 main() {
   bool b = true;
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_bottomArgument() async {
+  Future<void> test_bottomArgument() async {
     await resolveTestUnit('''
 main() {
   test(throw 42);
@@ -56,7 +56,7 @@
 ''');
   }
 
-  test_duplicateArgumentNames() async {
+  Future<void> test_duplicateArgumentNames() async {
     await resolveTestUnit('''
 class C {
   int x;
@@ -80,7 +80,7 @@
 ''');
   }
 
-  test_dynamicArgument() async {
+  Future<void> test_dynamicArgument() async {
     await resolveTestUnit('''
 main() {
   dynamic v;
@@ -98,7 +98,7 @@
 ''');
   }
 
-  test_dynamicReturnType() async {
+  Future<void> test_dynamicReturnType() async {
     await resolveTestUnit('''
 main() {
   dynamic v = test();
@@ -116,7 +116,7 @@
 ''');
   }
 
-  test_fromFunction() async {
+  Future<void> test_fromFunction() async {
     await resolveTestUnit('''
 main() {
   int v = myUndefinedFunction(1, 2.0, '3');
@@ -134,7 +134,7 @@
 ''');
   }
 
-  test_fromMethod() async {
+  Future<void> test_fromMethod() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -156,7 +156,7 @@
 ''');
   }
 
-  test_functionType_cascadeSecond() async {
+  Future<void> test_functionType_cascadeSecond() async {
     await resolveTestUnit('''
 class A {
   B ma() => null;
@@ -188,7 +188,7 @@
 ''');
   }
 
-  test_functionType_coreFunction() async {
+  Future<void> test_functionType_coreFunction() async {
     await resolveTestUnit('''
 main() {
   useFunction(g: test);
@@ -206,7 +206,7 @@
 ''');
   }
 
-  test_functionType_dynamicArgument() async {
+  Future<void> test_functionType_dynamicArgument() async {
     await resolveTestUnit('''
 main() {
   useFunction(test);
@@ -224,7 +224,7 @@
 ''');
   }
 
-  test_functionType_function() async {
+  Future<void> test_functionType_function() async {
     await resolveTestUnit('''
 main() {
   useFunction(test);
@@ -242,7 +242,7 @@
 ''');
   }
 
-  test_functionType_function_namedArgument() async {
+  Future<void> test_functionType_function_namedArgument() async {
     await resolveTestUnit('''
 main() {
   useFunction(g: test);
@@ -260,7 +260,7 @@
 ''');
   }
 
-  test_functionType_importType() async {
+  Future<void> test_functionType_importType() async {
     addSource('/home/test/lib/a.dart', r'''
 class A {}
 ''');
@@ -289,7 +289,7 @@
 ''');
   }
 
-  test_functionType_notFunctionType() async {
+  Future<void> test_functionType_notFunctionType() async {
     await resolveTestUnit('''
 main(A a) {
   useFunction(a.test);
@@ -300,7 +300,7 @@
     await assertNoFix();
   }
 
-  test_generic_type() async {
+  Future<void> test_generic_type() async {
     await resolveTestUnit('''
 class A {
   List<int> items;
@@ -327,7 +327,7 @@
             ['List<int>', 'Iterable<int>', 'Object']));
   }
 
-  test_generic_typeParameter() async {
+  Future<void> test_generic_typeParameter() async {
     await resolveTestUnit('''
 class A<T> {
   Map<int, T> items;
@@ -349,7 +349,7 @@
 ''');
   }
 
-  test_importType() async {
+  Future<void> test_importType() async {
     addSource('/home/test/lib/lib.dart', r'''
 library lib;
 import 'dart:async';
@@ -372,7 +372,7 @@
 ''');
   }
 
-  test_nullArgument() async {
+  Future<void> test_nullArgument() async {
     await resolveTestUnit('''
 main() {
   test(null);
@@ -388,43 +388,43 @@
 ''');
   }
 
-  test_returnType_bool_and_left() async {
+  Future<void> test_returnType_bool_and_left() async {
     await assert_returnType_bool('test() && b;');
   }
 
-  test_returnType_bool_and_right() async {
+  Future<void> test_returnType_bool_and_right() async {
     await assert_returnType_bool('b && test();');
   }
 
-  test_returnType_bool_assert() async {
+  Future<void> test_returnType_bool_assert() async {
     await assert_returnType_bool('assert ( test() );');
   }
 
-  test_returnType_bool_do() async {
+  Future<void> test_returnType_bool_do() async {
     await assert_returnType_bool('do {} while ( test() );');
   }
 
-  test_returnType_bool_if() async {
+  Future<void> test_returnType_bool_if() async {
     await assert_returnType_bool('if ( test() ) {}');
   }
 
-  test_returnType_bool_or_left() async {
+  Future<void> test_returnType_bool_or_left() async {
     await assert_returnType_bool('test() || b;');
   }
 
-  test_returnType_bool_or_right() async {
+  Future<void> test_returnType_bool_or_right() async {
     await assert_returnType_bool('b || test();');
   }
 
-  test_returnType_bool_unaryNegation() async {
+  Future<void> test_returnType_bool_unaryNegation() async {
     await assert_returnType_bool('!test();');
   }
 
-  test_returnType_bool_while() async {
+  Future<void> test_returnType_bool_while() async {
     await assert_returnType_bool('while ( test() ) {}');
   }
 
-  test_returnType_fromAssignment_eq() async {
+  Future<void> test_returnType_fromAssignment_eq() async {
     await resolveTestUnit('''
 main() {
   int v;
@@ -444,7 +444,7 @@
 ''');
   }
 
-  test_returnType_fromAssignment_plusEq() async {
+  Future<void> test_returnType_fromAssignment_plusEq() async {
     await resolveTestUnit('''
 main() {
   int v;
@@ -464,7 +464,7 @@
 ''');
   }
 
-  test_returnType_fromBinary_right() async {
+  Future<void> test_returnType_fromBinary_right() async {
     await resolveTestUnit('''
 main() {
   0 + myUndefinedFunction();
@@ -480,7 +480,7 @@
 ''');
   }
 
-  test_returnType_fromInitializer() async {
+  Future<void> test_returnType_fromInitializer() async {
     await resolveTestUnit('''
 main() {
   int v = myUndefinedFunction();
@@ -498,7 +498,7 @@
 ''');
   }
 
-  test_returnType_fromInvocationArgument() async {
+  Future<void> test_returnType_fromInvocationArgument() async {
     await resolveTestUnit('''
 foo(int p) {}
 main() {
@@ -516,7 +516,7 @@
 ''');
   }
 
-  test_returnType_fromReturn() async {
+  Future<void> test_returnType_fromReturn() async {
     await resolveTestUnit('''
 int main() {
   return myUndefinedFunction();
@@ -532,7 +532,7 @@
 ''');
   }
 
-  test_returnType_void() async {
+  Future<void> test_returnType_void() async {
     await resolveTestUnit('''
 main() {
   myUndefinedFunction();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart
index bf58fc7..f7d0fb6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateGetterTest);
     defineReflectiveTests(CreateGetterMixinTest);
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_GETTER;
 
-  test_qualified_instance() async {
+  Future<void> test_qualified_instance() async {
     await resolveTestUnit('''
 mixin M {
 }
@@ -43,7 +43,7 @@
 ''');
   }
 
-  test_unqualified_instance_assignmentLhs() async {
+  Future<void> test_unqualified_instance_assignmentLhs() async {
     await resolveTestUnit('''
 mixin M {
   main() {
@@ -54,7 +54,7 @@
     await assertNoFix();
   }
 
-  test_unqualified_instance_assignmentRhs() async {
+  Future<void> test_unqualified_instance_assignmentRhs() async {
     await resolveTestUnit('''
 mixin M {
   main() {
@@ -81,7 +81,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_GETTER;
 
-  test_hint_getter() async {
+  Future<void> test_hint_getter() async {
     await resolveTestUnit('''
 class A {
 }
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_inSDK() async {
+  Future<void> test_inSDK() async {
     await resolveTestUnit('''
 main(List p) {
   int v = p.foo;
@@ -113,7 +113,7 @@
     await assertNoFix();
   }
 
-  test_location_afterLastGetter() async {
+  Future<void> test_location_afterLastGetter() async {
     await resolveTestUnit('''
 class A {
   int existingField;
@@ -144,7 +144,7 @@
 ''');
   }
 
-  test_multiLevel() async {
+  Future<void> test_multiLevel() async {
     await resolveTestUnit('''
 class A {
 }
@@ -176,7 +176,7 @@
 ''');
   }
 
-  test_qualified_instance() async {
+  Future<void> test_qualified_instance() async {
     await resolveTestUnit('''
 class A {
 }
@@ -196,7 +196,7 @@
 ''');
   }
 
-  test_qualified_instance_differentLibrary() async {
+  Future<void> test_qualified_instance_differentLibrary() async {
     addSource('/home/test/lib/other.dart', '''
 /**
  * A comment to push the offset of the braces for the following class
@@ -230,7 +230,7 @@
 ''', target: '/home/test/lib/other.dart');
   }
 
-  test_qualified_instance_dynamicType() async {
+  Future<void> test_qualified_instance_dynamicType() async {
     await resolveTestUnit('''
 class A {
   B b;
@@ -254,7 +254,7 @@
 ''');
   }
 
-  test_qualified_propagatedType() async {
+  Future<void> test_qualified_propagatedType() async {
     await resolveTestUnit('''
 class A {
   A get self => this;
@@ -279,7 +279,7 @@
 ''');
   }
 
-  test_setterContext() async {
+  Future<void> test_setterContext() async {
     await resolveTestUnit('''
 class A {
 }
@@ -290,7 +290,7 @@
     await assertNoFix();
   }
 
-  test_unqualified_instance_asInvocationArgument() async {
+  Future<void> test_unqualified_instance_asInvocationArgument() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -311,7 +311,7 @@
 ''');
   }
 
-  test_unqualified_instance_assignmentLhs() async {
+  Future<void> test_unqualified_instance_assignmentLhs() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -322,7 +322,7 @@
     await assertNoFix();
   }
 
-  test_unqualified_instance_assignmentRhs() async {
+  Future<void> test_unqualified_instance_assignmentRhs() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -343,7 +343,7 @@
 ''');
   }
 
-  test_unqualified_instance_asStatement() async {
+  Future<void> test_unqualified_instance_asStatement() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -374,7 +374,7 @@
     super.setUp();
   }
 
-  test_internal_instance() async {
+  Future<void> test_internal_instance() async {
     await resolveTestUnit('''
 extension E on String {
   int m()  => g;
@@ -389,7 +389,7 @@
 ''');
   }
 
-  test_internal_static() async {
+  Future<void> test_internal_static() async {
     await resolveTestUnit('''
 extension E on String {
   static int m()  => g;
@@ -404,7 +404,7 @@
 ''');
   }
 
-  test_override() async {
+  Future<void> test_override() async {
     await resolveTestUnit('''
 extension E on String {
 }
@@ -426,7 +426,7 @@
 ''');
   }
 
-  test_static() async {
+  Future<void> test_static() async {
     await resolveTestUnit('''
 extension E on String {
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart
index 933eec9..b632fa0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateLocalVariableTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_LOCAL_VARIABLE;
 
-  test_functionType_named() async {
+  Future<void> test_functionType_named() async {
     await resolveTestUnit('''
 typedef MY_FUNCTION(int p);
 foo(MY_FUNCTION f) {}
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_functionType_named_generic() async {
+  Future<void> test_functionType_named_generic() async {
     await resolveTestUnit('''
 typedef MY_FUNCTION<T>(T p);
 foo(MY_FUNCTION<int> f) {}
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_functionType_synthetic() async {
+  Future<void> test_functionType_synthetic() async {
     await resolveTestUnit('''
 foo(f(int p)) {}
 main() {
@@ -73,7 +73,7 @@
 ''');
   }
 
-  test_read_typeAssignment() async {
+  Future<void> test_read_typeAssignment() async {
     await resolveTestUnit('''
 main() {
   int a = test;
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_read_typeCondition() async {
+  Future<void> test_read_typeCondition() async {
     await resolveTestUnit('''
 main() {
   if (!test) {
@@ -107,7 +107,7 @@
 ''');
   }
 
-  test_read_typeInvocationArgument() async {
+  Future<void> test_read_typeInvocationArgument() async {
     await resolveTestUnit('''
 main() {
   f(test);
@@ -125,7 +125,7 @@
     assertLinkedGroup(change.linkedEditGroups[1], ['test;', 'test);']);
   }
 
-  test_read_typeInvocationTarget() async {
+  Future<void> test_read_typeInvocationTarget() async {
     await resolveTestUnit('''
 main() {
   test.add('hello');
@@ -140,7 +140,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['test;', 'test.add(']);
   }
 
-  test_withImport() async {
+  Future<void> test_withImport() async {
     addPackageFile('pkg', 'a/a.dart', '''
 class A {}
 ''');
@@ -189,7 +189,7 @@
     expect(groupPositions[1].offset, 128);
   }
 
-  test_write_assignment() async {
+  Future<void> test_write_assignment() async {
     await resolveTestUnit('''
 main() {
   test = 42;
@@ -202,7 +202,7 @@
 ''');
   }
 
-  test_write_assignment_compound() async {
+  Future<void> test_write_assignment_compound() async {
     await resolveTestUnit('''
 main() {
   test += 42;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
index e6800eb..fd279c4 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateMethodTest);
     defineReflectiveTests(CreateMethodMixinTest);
@@ -27,7 +27,7 @@
   @override
   String get lintCode => LintNames.hash_and_equals;
 
-  test_equals() async {
+  Future<void> test_equals() async {
     await resolveTestUnit('''
 class C {
   @override
@@ -48,7 +48,7 @@
 ''');
   }
 
-  test_hashCode() async {
+  Future<void> test_hashCode() async {
     await resolveTestUnit('''
 class C {
   @override
@@ -74,7 +74,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_METHOD;
 
-  test_createQualified_instance() async {
+  Future<void> test_createQualified_instance() async {
     await resolveTestUnit('''
 mixin M {}
 
@@ -93,7 +93,7 @@
 ''');
   }
 
-  test_createQualified_static() async {
+  Future<void> test_createQualified_static() async {
     await resolveTestUnit('''
 mixin M {}
 
@@ -112,7 +112,7 @@
 ''');
   }
 
-  test_createUnqualified() async {
+  Future<void> test_createUnqualified() async {
     await resolveTestUnit('''
 mixin M {
   main() {
@@ -131,7 +131,7 @@
 ''');
   }
 
-  test_functionType_method_enclosingMixin_static() async {
+  Future<void> test_functionType_method_enclosingMixin_static() async {
     await resolveTestUnit('''
 mixin M {
   static foo() {
@@ -155,7 +155,7 @@
 ''');
   }
 
-  test_functionType_method_targetMixin() async {
+  Future<void> test_functionType_method_targetMixin() async {
     await resolveTestUnit('''
 main(M m) {
   useFunction(m.test);
@@ -186,7 +186,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_METHOD;
 
-  test_createQualified_emptyClassBody() async {
+  Future<void> test_createQualified_emptyClassBody() async {
     await resolveTestUnit('''
 class A {}
 main() {
@@ -203,7 +203,7 @@
 ''');
   }
 
-  test_createQualified_fromClass() async {
+  Future<void> test_createQualified_fromClass() async {
     await resolveTestUnit('''
 class A {
 }
@@ -221,7 +221,7 @@
 ''');
   }
 
-  test_createQualified_fromClass_hasOtherMember() async {
+  Future<void> test_createQualified_fromClass_hasOtherMember() async {
     await resolveTestUnit('''
 class A {
   foo() {}
@@ -242,7 +242,7 @@
 ''');
   }
 
-  test_createQualified_fromInstance() async {
+  Future<void> test_createQualified_fromInstance() async {
     await resolveTestUnit('''
 class A {
 }
@@ -260,7 +260,7 @@
 ''');
   }
 
-  test_createQualified_targetIsFunctionType() async {
+  Future<void> test_createQualified_targetIsFunctionType() async {
     await resolveTestUnit('''
 typedef A();
 main() {
@@ -270,7 +270,7 @@
     await assertNoFix();
   }
 
-  test_createQualified_targetIsUnresolved() async {
+  Future<void> test_createQualified_targetIsUnresolved() async {
     await resolveTestUnit('''
 main() {
   NoSuchClass.myUndefinedMethod();
@@ -279,7 +279,7 @@
     await assertNoFix();
   }
 
-  test_createUnqualified_duplicateArgumentNames() async {
+  Future<void> test_createUnqualified_duplicateArgumentNames() async {
     await resolveTestUnit('''
 class C {
   int x;
@@ -304,7 +304,7 @@
 }''');
   }
 
-  test_createUnqualified_parameters() async {
+  Future<void> test_createUnqualified_parameters() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -347,7 +347,7 @@
     assertLinkedGroup(change.linkedEditGroups[index++], ['s)']);
   }
 
-  test_createUnqualified_parameters_named() async {
+  Future<void> test_createUnqualified_parameters_named() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -388,7 +388,7 @@
             ['String', 'Object', 'Comparable<String>', 'Pattern']));
   }
 
-  test_createUnqualified_returnType() async {
+  Future<void> test_createUnqualified_returnType() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -413,7 +413,7 @@
         ['myUndefinedMethod();', 'myUndefinedMethod() {']);
   }
 
-  test_createUnqualified_staticFromField() async {
+  Future<void> test_createUnqualified_staticFromField() async {
     await resolveTestUnit('''
 class A {
   static var f = myUndefinedMethod();
@@ -428,7 +428,7 @@
 ''');
   }
 
-  test_createUnqualified_staticFromMethod() async {
+  Future<void> test_createUnqualified_staticFromMethod() async {
     await resolveTestUnit('''
 class A {
   static main() {
@@ -447,7 +447,7 @@
 ''');
   }
 
-  test_functionType_method_enclosingClass_static() async {
+  Future<void> test_functionType_method_enclosingClass_static() async {
     await resolveTestUnit('''
 class A {
   static foo() {
@@ -469,7 +469,7 @@
 ''');
   }
 
-  test_functionType_method_enclosingClass_static2() async {
+  Future<void> test_functionType_method_enclosingClass_static2() async {
     await resolveTestUnit('''
 class A {
   var f;
@@ -489,7 +489,7 @@
 ''');
   }
 
-  test_functionType_method_targetClass() async {
+  Future<void> test_functionType_method_targetClass() async {
     await resolveTestUnit('''
 main(A a) {
   useFunction(a.test);
@@ -510,7 +510,7 @@
 ''');
   }
 
-  test_functionType_method_targetClass_hasOtherMember() async {
+  Future<void> test_functionType_method_targetClass_hasOtherMember() async {
     await resolveTestUnit('''
 main(A a) {
   useFunction(a.test);
@@ -534,7 +534,7 @@
 ''');
   }
 
-  test_functionType_notFunctionType() async {
+  Future<void> test_functionType_notFunctionType() async {
     await resolveTestUnit('''
 main(A a) {
   useFunction(a.test);
@@ -545,7 +545,7 @@
     await assertNoFix();
   }
 
-  test_functionType_unknownTarget() async {
+  Future<void> test_functionType_unknownTarget() async {
     await resolveTestUnit('''
 main(A a) {
   useFunction(a.test);
@@ -557,7 +557,7 @@
     await assertNoFix();
   }
 
-  test_generic_argumentType() async {
+  Future<void> test_generic_argumentType() async {
     await resolveTestUnit('''
 class A<T> {
   B b;
@@ -585,7 +585,7 @@
 ''');
   }
 
-  test_generic_literal() async {
+  Future<void> test_generic_literal() async {
     await resolveTestUnit('''
 class A {
   B b;
@@ -612,7 +612,7 @@
 ''');
   }
 
-  test_generic_local() async {
+  Future<void> test_generic_local() async {
     await resolveTestUnit('''
 class A<T> {
   List<T> items;
@@ -633,7 +633,7 @@
 ''');
   }
 
-  test_generic_returnType() async {
+  Future<void> test_generic_returnType() async {
     await resolveTestUnit('''
 class A<T> {
   main() {
@@ -659,7 +659,7 @@
 ''');
   }
 
-  test_hint_createQualified_fromInstance() async {
+  Future<void> test_hint_createQualified_fromInstance() async {
     await resolveTestUnit('''
 class A {
 }
@@ -679,7 +679,7 @@
 ''');
   }
 
-  test_inSDK() async {
+  Future<void> test_inSDK() async {
     await resolveTestUnit('''
 main() {
   List.foo();
@@ -688,7 +688,7 @@
     await assertNoFix();
   }
 
-  test_parameterType_differentPrefixInTargetUnit() async {
+  Future<void> test_parameterType_differentPrefixInTargetUnit() async {
     String code2 = r'''
 import 'test3.dart' as bbb;
 export 'test3.dart';
@@ -721,7 +721,7 @@
 ''', target: '/home/test/lib/test2.dart');
   }
 
-  test_parameterType_inTargetUnit() async {
+  Future<void> test_parameterType_inTargetUnit() async {
     addSource('/home/test/lib/test2.dart', r'''
 class D {
 }
@@ -746,7 +746,7 @@
 ''', target: '/home/test/lib/test2.dart');
   }
 
-  test_targetIsEnum() async {
+  Future<void> test_targetIsEnum() async {
     await resolveTestUnit('''
 enum MyEnum {A, B}
 main() {
@@ -768,7 +768,7 @@
     super.setUp();
   }
 
-  test_internal_instance() async {
+  Future<void> test_internal_instance() async {
     await resolveTestUnit('''
 extension E on String {
   int m() => n();
@@ -783,7 +783,7 @@
 ''');
   }
 
-  test_internal_static() async {
+  Future<void> test_internal_static() async {
     await resolveTestUnit('''
 extension E on String {
   static int m() => n();
@@ -798,7 +798,7 @@
 ''');
   }
 
-  test_override() async {
+  Future<void> test_override() async {
     await resolveTestUnit('''
 extension E on String {}
 
@@ -817,7 +817,7 @@
 ''');
   }
 
-  test_static() async {
+  Future<void> test_static() async {
     await resolveTestUnit('''
 extension E on String {}
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
index 20e87d0..fe9c123 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateMissingOverridesTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_MISSING_OVERRIDES;
 
-  test_field_untyped() async {
+  Future<void> test_field_untyped() async {
     await resolveTestUnit('''
 class A {
   var f;
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_functionTypeAlias() async {
+  Future<void> test_functionTypeAlias() async {
     await resolveTestUnit('''
 typedef int Binary(int left, int right);
 
@@ -69,7 +69,7 @@
 ''');
   }
 
-  test_functionTypedParameter() async {
+  Future<void> test_functionTypedParameter() async {
     await resolveTestUnit('''
 abstract class A {
   void forEach(int f(double p1, String p2));
@@ -92,7 +92,7 @@
 ''');
   }
 
-  test_generics_typeArguments() async {
+  Future<void> test_generics_typeArguments() async {
     await resolveTestUnit('''
 class Iterator<T> {
 }
@@ -120,7 +120,7 @@
 ''');
   }
 
-  test_generics_typeParameters() async {
+  Future<void> test_generics_typeParameters() async {
     await resolveTestUnit('''
 abstract class ItemProvider<T> {
   List<T> getItems();
@@ -144,7 +144,7 @@
 ''');
   }
 
-  test_getter() async {
+  Future<void> test_getter() async {
     await resolveTestUnit('''
 abstract class A {
   get g1;
@@ -172,7 +172,7 @@
 ''');
   }
 
-  test_importPrefix() async {
+  Future<void> test_importPrefix() async {
     await resolveTestUnit('''
 import 'dart:async' as aaa;
 abstract class A {
@@ -198,7 +198,7 @@
 ''');
   }
 
-  test_mergeToField_getterSetter() async {
+  Future<void> test_mergeToField_getterSetter() async {
     await resolveTestUnit('''
 class A {
   int ma;
@@ -231,7 +231,7 @@
 ''');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 abstract class A {
   void m1();
@@ -309,7 +309,7 @@
     }
   }
 
-  test_method_emptyClassBody() async {
+  Future<void> test_method_emptyClassBody() async {
     await resolveTestUnit('''
 abstract class A {
   void foo();
@@ -331,7 +331,7 @@
 ''');
   }
 
-  test_method_generic() async {
+  Future<void> test_method_generic() async {
     await resolveTestUnit('''
 class C<T> {}
 class V<E> {}
@@ -361,7 +361,7 @@
 ''');
   }
 
-  test_method_generic_withBounds() async {
+  Future<void> test_method_generic_withBounds() async {
     // https://github.com/dart-lang/sdk/issues/31199
     await resolveTestUnit('''
 abstract class A<K, V> {
@@ -386,7 +386,7 @@
 ''');
   }
 
-  test_method_genericClass2() async {
+  Future<void> test_method_genericClass2() async {
     await resolveTestUnit('''
 class A<R> {
   R foo(int a) => null;
@@ -424,7 +424,7 @@
 ''');
   }
 
-  test_method_notEmptyClassBody() async {
+  Future<void> test_method_notEmptyClassBody() async {
     await resolveTestUnit('''
 abstract class A {
   void foo();
@@ -450,7 +450,7 @@
 ''');
   }
 
-  test_operator() async {
+  Future<void> test_operator() async {
     await resolveTestUnit('''
 abstract class A {
   int operator [](int index);
@@ -481,7 +481,7 @@
 ''');
   }
 
-  test_setter() async {
+  Future<void> test_setter() async {
     await resolveTestUnit('''
 abstract class A {
   set s1(x);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
index 463f417..cfb47a1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateMixinTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_MIXIN;
 
-  test_hasUnresolvedPrefix() async {
+  Future<void> test_hasUnresolvedPrefix() async {
     await resolveTestUnit('''
 main() {
   prefix.Test v = null;
@@ -31,7 +31,7 @@
     await assertNoFix();
   }
 
-  test_inLibraryOfPrefix() async {
+  Future<void> test_inLibraryOfPrefix() async {
     String libCode = r'''
 class A {}
 ''';
@@ -54,7 +54,7 @@
     expect(change.linkedEditGroups, hasLength(1));
   }
 
-  test_innerLocalFunction() async {
+  Future<void> test_innerLocalFunction() async {
     await resolveTestUnit('''
 f() {
   g() {
@@ -79,7 +79,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test v =', 'Test {']);
   }
 
-  test_instanceCreation_withNew() async {
+  Future<void> test_instanceCreation_withNew() async {
     await resolveTestUnit('''
 main() {
   new Test();
@@ -88,7 +88,7 @@
     await assertNoFix();
   }
 
-  test_instanceCreation_withoutNew() async {
+  Future<void> test_instanceCreation_withoutNew() async {
     await resolveTestUnit('''
 main() {
   Test();
@@ -97,7 +97,7 @@
     await assertNoFix();
   }
 
-  test_itemOfList() async {
+  Future<void> test_itemOfList() async {
     await resolveTestUnit('''
 main() {
   var a = [Test];
@@ -116,7 +116,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test];', 'Test {']);
   }
 
-  test_itemOfList_inAnnotation() async {
+  Future<void> test_itemOfList_inAnnotation() async {
     await resolveTestUnit('''
 class MyAnnotation {
   const MyAnnotation(a, b);
@@ -139,7 +139,7 @@
     assertLinkedGroup(change.linkedEditGroups[0], ['Test])', 'Test {']);
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 main() {
   Test v = null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart
index 5799c31..9f904f3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateNoSuchMethodTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_NO_SUCH_METHOD;
 
-  test_class() async {
+  Future<void> test_class() async {
     await resolveTestUnit('''
 abstract class A {
   m1();
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_classTypeAlias() async {
+  Future<void> test_classTypeAlias() async {
     await resolveTestUnit('''
 abstract class A {
   m();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_setter_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_setter_test.dart
index eb1da45..aba94f8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_setter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_setter_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateSetterTest);
     defineReflectiveTests(CreateSetterMixinTest);
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_SETTER;
 
-  test_qualified_instance() async {
+  Future<void> test_qualified_instance() async {
     await resolveTestUnit('''
 mixin M {
 }
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_unqualified_instance_assignmentLhs() async {
+  Future<void> test_unqualified_instance_assignmentLhs() async {
     await resolveTestUnit('''
 mixin M {
   main() {
@@ -60,7 +60,7 @@
 ''');
   }
 
-  test_unqualified_instance_assignmentRhs() async {
+  Future<void> test_unqualified_instance_assignmentRhs() async {
     await resolveTestUnit('''
 mixin M {
   main() {
@@ -77,7 +77,7 @@
   @override
   FixKind get kind => DartFixKind.CREATE_SETTER;
 
-  test_getterContext() async {
+  Future<void> test_getterContext() async {
     await resolveTestUnit('''
 class A {
 }
@@ -88,7 +88,7 @@
     await assertNoFix();
   }
 
-  test_inferredTargetType() async {
+  Future<void> test_inferredTargetType() async {
     await resolveTestUnit('''
 class A {
 }
@@ -108,7 +108,7 @@
 ''');
   }
 
-  test_inSDK() async {
+  Future<void> test_inSDK() async {
     await resolveTestUnit('''
 main(List p) {
   p.foo = 0;
@@ -117,7 +117,7 @@
     await assertNoFix();
   }
 
-  test_location_afterLastAccessor() async {
+  Future<void> test_location_afterLastAccessor() async {
     await resolveTestUnit('''
 class A {
   int existingField;
@@ -146,7 +146,7 @@
 ''');
   }
 
-  test_multiLevel() async {
+  Future<void> test_multiLevel() async {
     await resolveTestUnit('''
 class A {
 }
@@ -176,7 +176,7 @@
 ''');
   }
 
-  test_qualified_instance() async {
+  Future<void> test_qualified_instance() async {
     await resolveTestUnit('''
 class A {
 }
@@ -194,7 +194,7 @@
 ''');
   }
 
-  test_qualified_instance_differentLibrary() async {
+  Future<void> test_qualified_instance_differentLibrary() async {
     addSource('/home/test/lib/other.dart', '''
 /**
  * A comment to push the offset of the braces for the following class
@@ -227,7 +227,7 @@
 ''', target: '/home/test/lib/other.dart');
   }
 
-  test_qualified_instance_dynamicType() async {
+  Future<void> test_qualified_instance_dynamicType() async {
     await resolveTestUnit('''
 class A {
   B b;
@@ -251,7 +251,7 @@
 ''');
   }
 
-  test_qualified_propagatedType() async {
+  Future<void> test_qualified_propagatedType() async {
     await resolveTestUnit('''
 class A {
   A get self => this;
@@ -274,7 +274,7 @@
 ''');
   }
 
-  test_unqualified_instance_assignmentLhs() async {
+  Future<void> test_unqualified_instance_assignmentLhs() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -293,7 +293,7 @@
 ''');
   }
 
-  test_unqualified_instance_assignmentRhs() async {
+  Future<void> test_unqualified_instance_assignmentRhs() async {
     await resolveTestUnit('''
 class A {
   main() {
@@ -316,7 +316,7 @@
     super.setUp();
   }
 
-  test_internal_instance() async {
+  Future<void> test_internal_instance() async {
     await resolveTestUnit('''
 extension E on String {
   int m(int x) => s = x;
@@ -331,7 +331,7 @@
 ''');
   }
 
-  test_internal_static() async {
+  Future<void> test_internal_static() async {
     await resolveTestUnit('''
 extension E on String {
   static int m(int x) => s = x;
@@ -346,7 +346,7 @@
 ''');
   }
 
-  test_override() async {
+  Future<void> test_override() async {
     await resolveTestUnit('''
 extension E on String {
 }
@@ -366,7 +366,7 @@
 ''');
   }
 
-  test_static() async {
+  Future<void> test_static() async {
     await resolveTestUnit('''
 extension E on String {
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/extend_class_for_mixin_test.dart b/pkg/analysis_server/test/src/services/correction/fix/extend_class_for_mixin_test.dart
index d65e90a..b713d0e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/extend_class_for_mixin_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/extend_class_for_mixin_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtendClassForMixinTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.EXTEND_CLASS_FOR_MIXIN;
 
-  test_missingClass_withExtends() async {
+  Future<void> test_missingClass_withExtends() async {
     await resolveTestUnit('''
 class A {}
 class B {}
@@ -29,7 +29,7 @@
     await assertNoFix();
   }
 
-  test_missingClass_withoutExtends_withImplements() async {
+  Future<void> test_missingClass_withoutExtends_withImplements() async {
     await resolveTestUnit('''
 class A {}
 class B {}
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_missingClass_withoutExtends_withoutImplements() async {
+  Future<void> test_missingClass_withoutExtends_withoutImplements() async {
     await resolveTestUnit('''
 class A {}
 mixin M on A {}
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_missingMixin_withExtends() async {
+  Future<void> test_missingMixin_withExtends() async {
     await resolveTestUnit('''
 class A {}
 mixin M {}
@@ -68,7 +68,7 @@
   }
 
   @failingTest
-  test_missingMixin_withoutExtends() async {
+  Future<void> test_missingMixin_withoutExtends() async {
     await resolveTestUnit('''
 mixin M {}
 mixin N on M {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index 4f1daf2..7d8cbb1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -104,7 +104,7 @@
     expect(resultCode, expected);
   }
 
-  assertHasFixAllFix(ErrorCode errorCode, String expected,
+  void assertHasFixAllFix(ErrorCode errorCode, String expected,
       {String target}) async {
     AnalysisError error = await _findErrorToFixOfType(errorCode);
     Fix fix = await _assertHasFixAllFix(error);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_test.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_test.dart
index 655614c..8b2ae57 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FixTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => fail('kind should not be requested');
 
-  test_malformedTypeTest() async {
+  Future<void> test_malformedTypeTest() async {
     await resolveTestUnit('''
 main(p) {
   p i s Null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_async_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_async_test.dart
index 7bd9141..592952f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_async_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_async_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportAsyncTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.IMPORT_ASYNC;
 
-  test_future() async {
+  Future<void> test_future() async {
     updateTestPubspecFile('''
 environment:
   sdk: ^2.0.0
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_stream() async {
+  Future<void> test_stream() async {
     updateTestPubspecFile('''
 environment:
   sdk: ^2.0.0
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart
index 524eee6..d87f1e7 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportLibraryPrefixTest);
     defineReflectiveTests(ImportLibraryPrefixWithExtensionMethodsTest);
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.IMPORT_LIBRARY_PREFIX;
 
-  test_withClass() async {
+  Future<void> test_withClass() async {
     await resolveTestUnit('''
 import 'dart:collection' as pref;
 main() {
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_withTopLevelVariable() async {
+  Future<void> test_withTopLevelVariable() async {
     await resolveTestUnit('''
 import 'dart:math' as pref;
 main() {
@@ -68,7 +68,7 @@
     super.setUp();
   }
 
-  test_withExtension() async {
+  Future<void> test_withExtension() async {
     addSource('/home/test/lib/lib.dart', '''
 class C {}
 extension E on int {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
index ed96c20..a2a8902 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportLibraryProject1Test);
     defineReflectiveTests(ImportLibraryProject1WithExtensionMethodsTest);
@@ -21,6 +21,501 @@
 }
 
 @reflectiveTest
+class ImportLibraryProject1Test extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT1;
+
+  Future<void> test_alreadyImported_package() async {
+    addSource('/home/test/lib/lib.dart', '''
+class A {}
+class B {}
+''');
+    await resolveTestUnit('''
+import 'lib.dart' show A;
+main() {
+  A a;
+  B b;
+  print('\$a \$b');
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_lib() async {
+    addPackageFile('my_pkg', 'a.dart', 'class Test {}');
+    newFile('/home/test/pubspec.yaml', content: r'''
+dependencies:
+  my_pkg: any
+''');
+
+    await resolveTestUnit('''
+main() {
+  Test test = null;
+  print(test);
+}
+''');
+
+    await assertHasFix('''
+import 'package:my_pkg/a.dart';
+
+main() {
+  Test test = null;
+  print(test);
+}
+''', expectedNumberOfFixesForKind: 1);
+  }
+
+  Future<void> test_lib_src() async {
+    addPackageFile('my_pkg', 'src/a.dart', 'class Test {}');
+    newFile('/home/test/pubspec.yaml', content: r'''
+dependencies:
+  my_pkg: any
+''');
+    await resolveTestUnit('''
+main() {
+  Test test = null;
+  print(test);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_notInLib() async {
+    addSource('/home/other/test/lib.dart', 'class Test {}');
+    await resolveTestUnit('''
+main() {
+  Test t;
+  print(t);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_relativeDirective() async {
+    addSource('/home/test/lib/a.dart', '''
+class Foo {}
+''');
+    await resolveTestUnit('''
+main() { new Foo(); }
+''');
+    await assertHasFix('''
+import 'a.dart';
+
+main() { new Foo(); }
+''',
+        expectedNumberOfFixesForKind: 2,
+        matchFixMessage: "Import library 'a.dart'");
+  }
+
+  Future<void> test_relativeDirective_downOneDirectory() async {
+    addSource('/home/test/lib/dir/a.dart', '''
+class Foo {}
+''');
+    await resolveTestUnit('''
+main() { new Foo(); }
+''');
+    await assertHasFix('''
+import 'dir/a.dart';
+
+main() { new Foo(); }
+''',
+        expectedNumberOfFixesForKind: 2,
+        matchFixMessage: "Import library 'dir/a.dart'");
+  }
+
+  Future<void> test_relativeDirective_upOneDirectory() async {
+    addSource('/home/test/lib/a.dart', '''
+class Foo {}
+''');
+    testFile = convertPath('/home/test/lib/dir/test.dart');
+    await resolveTestUnit('''
+main() { new Foo(); }
+''');
+    await assertHasFix('''
+import '../a.dart';
+
+main() { new Foo(); }
+''',
+        expectedNumberOfFixesForKind: 2,
+        matchFixMessage: "Import library '../a.dart'");
+  }
+
+  Future<void> test_withClass_annotation() async {
+    addSource('/home/test/lib/lib.dart', '''
+library lib;
+class Test {
+  const Test(int p);
+}
+''');
+    await resolveTestUnit('''
+@Test(0)
+main() {
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+@Test(0)
+main() {
+}
+''');
+  }
+
+  Future<void> test_withClass_hasOtherLibraryWithPrefix() async {
+    addSource('/home/test/lib/a.dart', '''
+library a;
+class One {}
+''');
+    addSource('/home/test/lib/b.dart', '''
+library b;
+class One {}
+class Two {}
+''');
+    await resolveTestUnit('''
+import 'package:test/b.dart' show Two;
+main () {
+  new Two();
+  new One();
+}
+''');
+    await assertHasFix('''
+import 'package:test/a.dart';
+import 'package:test/b.dart' show Two;
+main () {
+  new Two();
+  new One();
+}
+''');
+  }
+
+  Future<void> test_withClass_inParentFolder() async {
+    testFile = convertPath('/home/test/bin/aaa/test.dart');
+    addSource('/home/test/bin/lib.dart', '''
+library lib;
+class Test {}
+''');
+    await resolveTestUnit('''
+main() {
+  Test t = null;
+  print(t);
+}
+''');
+    await assertHasFix('''
+import '../lib.dart';
+
+main() {
+  Test t = null;
+  print(t);
+}
+''');
+  }
+
+  Future<void> test_withClass_inRelativeFolder() async {
+    testFile = convertPath('/home/test/bin/test.dart');
+    addSource('/home/test/tool/sub/folder/lib.dart', '''
+library lib;
+class Test {}
+''');
+    await resolveTestUnit('''
+main() {
+  Test t = null;
+  print(t);
+}
+''');
+    await assertHasFix('''
+import '../tool/sub/folder/lib.dart';
+
+main() {
+  Test t = null;
+  print(t);
+}
+''');
+  }
+
+  Future<void> test_withClass_inSameFolder() async {
+    testFile = convertPath('/home/test/bin/test.dart');
+    addSource('/home/test/bin/lib.dart', '''
+library lib;
+class Test {}
+''');
+    await resolveTestUnit('''
+main() {
+  Test t = null;
+  print(t);
+}
+''');
+    await assertHasFix('''
+import 'lib.dart';
+
+main() {
+  Test t = null;
+  print(t);
+}
+''');
+  }
+
+  Future<void> test_withClass_instanceCreation_const() async {
+    addSource('/home/test/lib/lib.dart', '''
+class Test {
+  const Test();
+}
+''');
+    await resolveTestUnit('''
+main() {
+  return const Test();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  return const Test();
+}
+''');
+  }
+
+  Future<void> test_withClass_instanceCreation_const_namedConstructor() async {
+    addSource('/home/test/lib/lib.dart', '''
+class Test {
+  const Test.named();
+}
+''');
+    await resolveTestUnit('''
+main() {
+  const Test.named();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  const Test.named();
+}
+''');
+  }
+
+  Future<void> test_withClass_instanceCreation_implicit() async {
+    addSource('/home/test/lib/lib.dart', '''
+class Test {
+  const Test();
+}
+''');
+    await resolveTestUnit('''
+main() {
+  return Test();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  return Test();
+}
+''');
+  }
+
+  Future<void> test_withClass_instanceCreation_new() async {
+    addSource('/home/test/lib/lib.dart', '''
+class Test {
+  const Test();
+}
+''');
+    await resolveTestUnit('''
+main() {
+  return new Test();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  return new Test();
+}
+''');
+  }
+
+  Future<void> test_withClass_instanceCreation_new_namedConstructor() async {
+    addSource('/home/test/lib/lib.dart', '''
+class Test {
+  Test.named();
+}
+''');
+    await resolveTestUnit('''
+main() {
+  new Test.named();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  new Test.named();
+}
+''');
+  }
+
+  Future<void> test_withFunction() async {
+    addSource('/home/test/lib/lib.dart', '''
+library lib;
+myFunction() {}
+''');
+    await resolveTestUnit('''
+main() {
+  myFunction();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  myFunction();
+}
+''');
+  }
+
+  Future<void> test_withFunction_functionTopLevelVariable() async {
+    addSource('/home/test/lib/lib.dart', 'var myFunction = () {};');
+    await resolveTestUnit('''
+main() {
+  myFunction();
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  myFunction();
+}
+''');
+  }
+
+  Future<void> test_withFunction_functionTopLevelVariableIdentifier() async {
+    addSource('/home/test/lib/lib.dart', 'var myFunction = () {};');
+    await resolveTestUnit('''
+main() {
+  myFunction;
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  myFunction;
+}
+''');
+  }
+
+  Future<void> test_withFunction_identifier() async {
+    addSource('/home/test/lib/lib.dart', '''
+library lib;
+myFunction() {}
+''');
+    await resolveTestUnit('''
+main() {
+  myFunction;
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  myFunction;
+}
+''');
+  }
+
+  @failingTest
+  Future<void> test_withFunction_nonFunctionType() async {
+    addSource('/home/test/lib/lib.dart', 'int zero = 0;');
+    await resolveTestUnit('''
+main() {
+  zero();
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_withFunction_unresolvedMethod() async {
+    addSource('/home/test/lib/lib.dart', '''
+library lib;
+myFunction() {}
+''');
+    await resolveTestUnit('''
+class A {
+  main() {
+    myFunction();
+  }
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+class A {
+  main() {
+    myFunction();
+  }
+}
+''');
+  }
+
+  Future<void> test_withFunctionTypeAlias() async {
+    addSource('/home/test/lib/lib.dart', '''
+library lib;
+typedef MyFunction();
+''');
+    await resolveTestUnit('''
+main() {
+  MyFunction t = null;
+  print(t);
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  MyFunction t = null;
+  print(t);
+}
+''');
+  }
+
+  Future<void> test_withMixin() async {
+    addSource('/home/test/lib/lib.dart', '''
+mixin Test {}
+''');
+    await resolveTestUnit('''
+class X = Object with Test;
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+class X = Object with Test;
+''', errorFilter: (error) {
+      return error.errorCode == CompileTimeErrorCode.UNDEFINED_CLASS;
+    });
+  }
+
+  Future<void> test_withTopLevelVariable() async {
+    addSource('/home/test/lib/lib.dart', '''
+library lib;
+int MY_VAR = 42;
+''');
+    await resolveTestUnit('''
+main() {
+  print(MY_VAR);
+}
+''');
+    await assertHasFix('''
+import 'package:test/lib.dart';
+
+main() {
+  print(MY_VAR);
+}
+''');
+  }
+}
+
+@reflectiveTest
 class ImportLibraryProject1WithExtensionMethodsTest extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT1;
@@ -31,7 +526,7 @@
     super.setUp();
   }
 
-  test_lib() async {
+  Future<void> test_lib() async {
     addPackageFile('my_pkg', 'a.dart', '''
 extension E on int {
   static String m() => '';
@@ -59,40 +554,23 @@
 }
 
 @reflectiveTest
-class ImportLibraryProject1Test extends FixProcessorTest {
+class ImportLibraryProject2Test extends FixProcessorTest {
   @override
-  FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT1;
+  FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT2;
 
-  test_alreadyImported_package() async {
-    addSource('/home/test/lib/lib.dart', '''
-class A {}
-class B {}
-''');
-    await resolveTestUnit('''
-import 'lib.dart' show A;
-main() {
-  A a;
-  B b;
-  print('\$a \$b');
-}
-''');
-    await assertNoFix();
-  }
-
-  test_lib() async {
-    addPackageFile('my_pkg', 'a.dart', 'class Test {}');
+  Future<void> test_lib() async {
+    addPackageFile('my_pkg', 'a.dart', "export 'b.dart';");
+    addPackageFile('my_pkg', 'b.dart', 'class Test {}');
     newFile('/home/test/pubspec.yaml', content: r'''
 dependencies:
   my_pkg: any
 ''');
-
     await resolveTestUnit('''
 main() {
   Test test = null;
   print(test);
 }
 ''');
-
     await assertHasFix('''
 import 'package:my_pkg/a.dart';
 
@@ -100,11 +578,12 @@
   Test test = null;
   print(test);
 }
-''', expectedNumberOfFixesForKind: 1);
+''');
   }
 
-  test_lib_src() async {
-    addPackageFile('my_pkg', 'src/a.dart', 'class Test {}');
+  Future<void> test_lib_src() async {
+    addPackageFile('my_pkg', 'a.dart', "export 'src/b.dart';");
+    addPackageFile('my_pkg', 'src/b.dart', 'class Test {}');
     newFile('/home/test/pubspec.yaml', content: r'''
 dependencies:
   my_pkg: any
@@ -115,439 +594,12 @@
   print(test);
 }
 ''');
-    await assertNoFix();
-  }
-
-  test_notInLib() async {
-    addSource('/home/other/test/lib.dart', 'class Test {}');
-    await resolveTestUnit('''
-main() {
-  Test t;
-  print(t);
-}
-''');
-    await assertNoFix();
-  }
-
-  test_relativeDirective() async {
-    addSource('/home/test/lib/a.dart', '''
-class Foo {}
-''');
-    await resolveTestUnit('''
-main() { new Foo(); }
-''');
     await assertHasFix('''
-import 'a.dart';
-
-main() { new Foo(); }
-''',
-        expectedNumberOfFixesForKind: 2,
-        matchFixMessage: "Import library 'a.dart'");
-  }
-
-  test_relativeDirective_downOneDirectory() async {
-    addSource('/home/test/lib/dir/a.dart', '''
-class Foo {}
-''');
-    await resolveTestUnit('''
-main() { new Foo(); }
-''');
-    await assertHasFix('''
-import 'dir/a.dart';
-
-main() { new Foo(); }
-''',
-        expectedNumberOfFixesForKind: 2,
-        matchFixMessage: "Import library 'dir/a.dart'");
-  }
-
-  test_relativeDirective_upOneDirectory() async {
-    addSource('/home/test/lib/a.dart', '''
-class Foo {}
-''');
-    testFile = convertPath('/home/test/lib/dir/test.dart');
-    await resolveTestUnit('''
-main() { new Foo(); }
-''');
-    await assertHasFix('''
-import '../a.dart';
-
-main() { new Foo(); }
-''',
-        expectedNumberOfFixesForKind: 2,
-        matchFixMessage: "Import library '../a.dart'");
-  }
-
-  test_withClass_annotation() async {
-    addSource('/home/test/lib/lib.dart', '''
-library lib;
-class Test {
-  const Test(int p);
-}
-''');
-    await resolveTestUnit('''
-@Test(0)
-main() {
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-@Test(0)
-main() {
-}
-''');
-  }
-
-  test_withClass_hasOtherLibraryWithPrefix() async {
-    addSource('/home/test/lib/a.dart', '''
-library a;
-class One {}
-''');
-    addSource('/home/test/lib/b.dart', '''
-library b;
-class One {}
-class Two {}
-''');
-    await resolveTestUnit('''
-import 'package:test/b.dart' show Two;
-main () {
-  new Two();
-  new One();
-}
-''');
-    await assertHasFix('''
-import 'package:test/a.dart';
-import 'package:test/b.dart' show Two;
-main () {
-  new Two();
-  new One();
-}
-''');
-  }
-
-  test_withClass_inParentFolder() async {
-    testFile = convertPath('/home/test/bin/aaa/test.dart');
-    addSource('/home/test/bin/lib.dart', '''
-library lib;
-class Test {}
-''');
-    await resolveTestUnit('''
-main() {
-  Test t = null;
-  print(t);
-}
-''');
-    await assertHasFix('''
-import '../lib.dart';
+import 'package:my_pkg/a.dart';
 
 main() {
-  Test t = null;
-  print(t);
-}
-''');
-  }
-
-  test_withClass_inRelativeFolder() async {
-    testFile = convertPath('/home/test/bin/test.dart');
-    addSource('/home/test/tool/sub/folder/lib.dart', '''
-library lib;
-class Test {}
-''');
-    await resolveTestUnit('''
-main() {
-  Test t = null;
-  print(t);
-}
-''');
-    await assertHasFix('''
-import '../tool/sub/folder/lib.dart';
-
-main() {
-  Test t = null;
-  print(t);
-}
-''');
-  }
-
-  test_withClass_inSameFolder() async {
-    testFile = convertPath('/home/test/bin/test.dart');
-    addSource('/home/test/bin/lib.dart', '''
-library lib;
-class Test {}
-''');
-    await resolveTestUnit('''
-main() {
-  Test t = null;
-  print(t);
-}
-''');
-    await assertHasFix('''
-import 'lib.dart';
-
-main() {
-  Test t = null;
-  print(t);
-}
-''');
-  }
-
-  test_withClass_instanceCreation_const() async {
-    addSource('/home/test/lib/lib.dart', '''
-class Test {
-  const Test();
-}
-''');
-    await resolveTestUnit('''
-main() {
-  return const Test();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  return const Test();
-}
-''');
-  }
-
-  test_withClass_instanceCreation_const_namedConstructor() async {
-    addSource('/home/test/lib/lib.dart', '''
-class Test {
-  const Test.named();
-}
-''');
-    await resolveTestUnit('''
-main() {
-  const Test.named();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  const Test.named();
-}
-''');
-  }
-
-  test_withClass_instanceCreation_implicit() async {
-    addSource('/home/test/lib/lib.dart', '''
-class Test {
-  const Test();
-}
-''');
-    await resolveTestUnit('''
-main() {
-  return Test();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  return Test();
-}
-''');
-  }
-
-  test_withClass_instanceCreation_new() async {
-    addSource('/home/test/lib/lib.dart', '''
-class Test {
-  const Test();
-}
-''');
-    await resolveTestUnit('''
-main() {
-  return new Test();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  return new Test();
-}
-''');
-  }
-
-  test_withClass_instanceCreation_new_namedConstructor() async {
-    addSource('/home/test/lib/lib.dart', '''
-class Test {
-  Test.named();
-}
-''');
-    await resolveTestUnit('''
-main() {
-  new Test.named();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  new Test.named();
-}
-''');
-  }
-
-  test_withFunction() async {
-    addSource('/home/test/lib/lib.dart', '''
-library lib;
-myFunction() {}
-''');
-    await resolveTestUnit('''
-main() {
-  myFunction();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  myFunction();
-}
-''');
-  }
-
-  test_withFunction_functionTopLevelVariable() async {
-    addSource('/home/test/lib/lib.dart', 'var myFunction = () {};');
-    await resolveTestUnit('''
-main() {
-  myFunction();
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  myFunction();
-}
-''');
-  }
-
-  test_withFunction_functionTopLevelVariableIdentifier() async {
-    addSource('/home/test/lib/lib.dart', 'var myFunction = () {};');
-    await resolveTestUnit('''
-main() {
-  myFunction;
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  myFunction;
-}
-''');
-  }
-
-  test_withFunction_identifier() async {
-    addSource('/home/test/lib/lib.dart', '''
-library lib;
-myFunction() {}
-''');
-    await resolveTestUnit('''
-main() {
-  myFunction;
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  myFunction;
-}
-''');
-  }
-
-  @failingTest
-  test_withFunction_nonFunctionType() async {
-    addSource('/home/test/lib/lib.dart', 'int zero = 0;');
-    await resolveTestUnit('''
-main() {
-  zero();
-}
-''');
-    await assertNoFix();
-  }
-
-  test_withFunction_unresolvedMethod() async {
-    addSource('/home/test/lib/lib.dart', '''
-library lib;
-myFunction() {}
-''');
-    await resolveTestUnit('''
-class A {
-  main() {
-    myFunction();
-  }
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-class A {
-  main() {
-    myFunction();
-  }
-}
-''');
-  }
-
-  test_withFunctionTypeAlias() async {
-    addSource('/home/test/lib/lib.dart', '''
-library lib;
-typedef MyFunction();
-''');
-    await resolveTestUnit('''
-main() {
-  MyFunction t = null;
-  print(t);
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  MyFunction t = null;
-  print(t);
-}
-''');
-  }
-
-  test_withMixin() async {
-    addSource('/home/test/lib/lib.dart', '''
-mixin Test {}
-''');
-    await resolveTestUnit('''
-class X = Object with Test;
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-class X = Object with Test;
-''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.UNDEFINED_CLASS;
-    });
-  }
-
-  test_withTopLevelVariable() async {
-    addSource('/home/test/lib/lib.dart', '''
-library lib;
-int MY_VAR = 42;
-''');
-    await resolveTestUnit('''
-main() {
-  print(MY_VAR);
-}
-''');
-    await assertHasFix('''
-import 'package:test/lib.dart';
-
-main() {
-  print(MY_VAR);
+  Test test = null;
+  print(test);
 }
 ''');
   }
@@ -564,7 +616,7 @@
     super.setUp();
   }
 
-  test_lib_src() async {
+  Future<void> test_lib_src() async {
     addPackageFile('my_pkg', 'a.dart', "export 'src/b.dart';");
     addPackageFile('my_pkg', 'src/b.dart', '''
 extension E on int {
@@ -591,95 +643,11 @@
 }
 
 @reflectiveTest
-class ImportLibraryProject2Test extends FixProcessorTest {
-  @override
-  FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT2;
-
-  test_lib() async {
-    addPackageFile('my_pkg', 'a.dart', "export 'b.dart';");
-    addPackageFile('my_pkg', 'b.dart', 'class Test {}');
-    newFile('/home/test/pubspec.yaml', content: r'''
-dependencies:
-  my_pkg: any
-''');
-    await resolveTestUnit('''
-main() {
-  Test test = null;
-  print(test);
-}
-''');
-    await assertHasFix('''
-import 'package:my_pkg/a.dart';
-
-main() {
-  Test test = null;
-  print(test);
-}
-''');
-  }
-
-  test_lib_src() async {
-    addPackageFile('my_pkg', 'a.dart', "export 'src/b.dart';");
-    addPackageFile('my_pkg', 'src/b.dart', 'class Test {}');
-    newFile('/home/test/pubspec.yaml', content: r'''
-dependencies:
-  my_pkg: any
-''');
-    await resolveTestUnit('''
-main() {
-  Test test = null;
-  print(test);
-}
-''');
-    await assertHasFix('''
-import 'package:my_pkg/a.dart';
-
-main() {
-  Test test = null;
-  print(test);
-}
-''');
-  }
-}
-
-@reflectiveTest
-class ImportLibraryProject3WithExtensionMethodsTest extends FixProcessorTest {
-  @override
-  FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT3;
-
-  @override
-  void setUp() {
-    createAnalysisOptionsFile(experiments: ['extension-methods']);
-    super.setUp();
-  }
-
-  test_inLibSrc_thisContextRoot() async {
-    addSource('/home/test/lib/src/lib.dart', '''
-extension E on int {
-  static String m() => '';
-}
-''');
-    await resolveTestUnit('''
-f() {
-  print(E.m());
-}
-''');
-    await assertHasFix('''
-import 'package:test/src/lib.dart';
-
-f() {
-  print(E.m());
-}
-''');
-  }
-}
-
-@reflectiveTest
 class ImportLibraryProject3Test extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT3;
 
-  test_inLibSrc_differentContextRoot() async {
+  Future<void> test_inLibSrc_differentContextRoot() async {
     addPackageFile('bbb', 'b1.dart', r'''
 import 'src/b2.dart';
 class A {}
@@ -696,7 +664,7 @@
     await assertNoFix();
   }
 
-  test_inLibSrc_thisContextRoot() async {
+  Future<void> test_inLibSrc_thisContextRoot() async {
     addSource('/home/test/lib/src/lib.dart', 'class Test {}');
     await resolveTestUnit('''
 main() {
@@ -714,3 +682,35 @@
 ''');
   }
 }
+
+@reflectiveTest
+class ImportLibraryProject3WithExtensionMethodsTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT3;
+
+  @override
+  void setUp() {
+    createAnalysisOptionsFile(experiments: ['extension-methods']);
+    super.setUp();
+  }
+
+  Future<void> test_inLibSrc_thisContextRoot() async {
+    addSource('/home/test/lib/src/lib.dart', '''
+extension E on int {
+  static String m() => '';
+}
+''');
+    await resolveTestUnit('''
+f() {
+  print(E.m());
+}
+''');
+    await assertHasFix('''
+import 'package:test/src/lib.dart';
+
+f() {
+  print(E.m());
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
index ce3dcc4..1f5ad4c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportLibrarySdkTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.IMPORT_LIBRARY_SDK;
 
-  test_alreadyImported_sdk() async {
+  Future<void> test_alreadyImported_sdk() async {
     await resolveTestUnit('''
 import 'dart:collection' show HashMap;
 main() {
@@ -32,7 +32,7 @@
     await assertNoFix();
   }
 
-  test_withClass_asExpression() async {
+  Future<void> test_withClass_asExpression() async {
     await resolveTestUnit('''
 main(p) {
   p as HashMap;
@@ -47,7 +47,7 @@
 ''');
   }
 
-  test_withClass_instanceCreation_explicitNew() async {
+  Future<void> test_withClass_instanceCreation_explicitNew() async {
     await resolveTestUnit('''
 class C {
   foo() {
@@ -66,7 +66,8 @@
 ''');
   }
 
-  test_withClass_instanceCreation_explicitNew_namedConstructor() async {
+  Future<void>
+      test_withClass_instanceCreation_explicitNew_namedConstructor() async {
     await resolveTestUnit('''
 class C {
   foo() {
@@ -85,7 +86,7 @@
 ''');
   }
 
-  test_withClass_instanceCreation_implicitNew() async {
+  Future<void> test_withClass_instanceCreation_implicitNew() async {
     await resolveTestUnit('''
 class C {
   foo() {
@@ -104,7 +105,8 @@
 ''');
   }
 
-  test_withClass_instanceCreation_implicitNew_namedConstructor() async {
+  Future<void>
+      test_withClass_instanceCreation_implicitNew_namedConstructor() async {
     await resolveTestUnit('''
 class C {
   foo() {
@@ -123,7 +125,7 @@
 ''');
   }
 
-  test_withClass_invocationTarget() async {
+  Future<void> test_withClass_invocationTarget() async {
     await resolveTestUnit('''
 main() {
   Timer.run(null);
@@ -138,7 +140,7 @@
 ''');
   }
 
-  test_withClass_IsExpression() async {
+  Future<void> test_withClass_IsExpression() async {
     await resolveTestUnit('''
 main(p) {
   p is Completer;
@@ -153,7 +155,7 @@
 ''');
   }
 
-  test_withClass_itemOfList() async {
+  Future<void> test_withClass_itemOfList() async {
     await resolveTestUnit('''
 main() {
   var a = [Completer];
@@ -170,7 +172,7 @@
 ''');
   }
 
-  test_withClass_itemOfList_inAnnotation() async {
+  Future<void> test_withClass_itemOfList_inAnnotation() async {
     await resolveTestUnit('''
 class MyAnnotation {
   const MyAnnotation(a, b);
@@ -191,7 +193,7 @@
     });
   }
 
-  test_withClass_typeAnnotation() async {
+  Future<void> test_withClass_typeAnnotation() async {
     await resolveTestUnit('''
 main() {
   Completer f = null;
@@ -208,7 +210,7 @@
 ''');
   }
 
-  test_withClass_typeAnnotation_PrefixedIdentifier() async {
+  Future<void> test_withClass_typeAnnotation_PrefixedIdentifier() async {
     await resolveTestUnit('''
 main() {
   Timer.run;
@@ -223,7 +225,7 @@
 ''');
   }
 
-  test_withClass_typeArgument() async {
+  Future<void> test_withClass_typeArgument() async {
     await resolveTestUnit('''
 main() {
   List<Completer> completers = [];
@@ -240,7 +242,7 @@
 ''');
   }
 
-  test_withTopLevelVariable() async {
+  Future<void> test_withTopLevelVariable() async {
     await resolveTestUnit('''
 main() {
   print(PI);
@@ -255,7 +257,7 @@
 ''');
   }
 
-  test_withTopLevelVariable_annotation() async {
+  Future<void> test_withTopLevelVariable_annotation() async {
     await resolveTestUnit('''
 @PI
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart
index 432c284..a89b015 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportLibraryShowTest);
     defineReflectiveTests(ImportLibraryShowWithExtensionMethodsTest);
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.IMPORT_LIBRARY_SHOW;
 
-  test_package() async {
+  Future<void> test_package() async {
     addSource('/home/test/lib/lib.dart', '''
 class A {}
 class B {}
@@ -43,7 +43,7 @@
 ''');
   }
 
-  test_sdk() async {
+  Future<void> test_sdk() async {
     await resolveTestUnit(r'''
 import 'dart:collection' show HashMap;
 main() {
@@ -74,7 +74,7 @@
     super.setUp();
   }
 
-  test_override_samePackage() async {
+  Future<void> test_override_samePackage() async {
     addSource('/home/test/lib/lib.dart', '''
 class A {}
 extension E on int {
@@ -95,7 +95,7 @@
 ''');
   }
 
-  test_static_samePackage() async {
+  Future<void> test_static_samePackage() async {
     addSource('/home/test/lib/lib.dart', '''
 class A {}
 extension E on int {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/inline_invocation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/inline_invocation_test.dart
index b3c8344..e895e79 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/inline_invocation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/inline_invocation_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InlineInvocationTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.prefer_inlined_adds;
 
   /// More coverage in the `inline_invocation_test.dart` assist test.
-  test_add_emptyTarget() async {
+  Future<void> test_add_emptyTarget() async {
     await resolveTestUnit('''
 var l = []../*LINT*/add('a')..add('b');
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/insert_semicolon_test.dart b/pkg/analysis_server/test/src/services/correction/fix/insert_semicolon_test.dart
index 77123f3..3e0fc37 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/insert_semicolon_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/insert_semicolon_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InsertSemicolonTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.INSERT_SEMICOLON;
 
-  test_expectedToken_semicolon() async {
+  Future<void> test_expectedToken_semicolon() async {
     await resolveTestUnit('''
 main() {
   print(0)
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_class_abstract_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_class_abstract_test.dart
index 7dbf4e9..cc90674 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_class_abstract_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_class_abstract_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MakeClassAbstractTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.MAKE_CLASS_ABSTRACT;
 
-  test_declaresAbstractMethod() async {
+  Future<void> test_declaresAbstractMethod() async {
     await resolveTestUnit('''
 class A {
   m();
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_inheritsAbstractMethod() async {
+  Future<void> test_inheritsAbstractMethod() async {
     await resolveTestUnit('''
 abstract class A {
   m();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_field_not_final_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_field_not_final_test.dart
index 6027ac6..d0b89d3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_field_not_final_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_field_not_final_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MakeFieldNotFinalTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.MAKE_FIELD_NOT_FINAL;
 
-  test_hasType() async {
+  Future<void> test_hasType() async {
     await resolveTestUnit('''
 class A {
   final int fff = 1;
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_noType() async {
+  Future<void> test_noType() async {
     await resolveTestUnit('''
 class A {
   final fff = 1;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
index 1831cff..5fccf8e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MakeFinalTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_final_fields;
 
-  test_field_type() async {
+  Future<void> test_field_type() async {
     await resolveTestUnit('''
 class C {
   int /*LINT*/f = 2;
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_field_var() async {
+  Future<void> test_field_var() async {
     await resolveTestUnit('''
 class C {
   var /*LINT*/f = 2;
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_local_type() async {
+  Future<void> test_local_type() async {
     await resolveTestUnit('''
 bad() {
   int /*LINT*/x = 2;
@@ -62,7 +62,7 @@
 ''');
   }
 
-  test_local_var() async {
+  Future<void> test_local_var() async {
     await resolveTestUnit('''
 bad() {
   var /*LINT*/x = 2;
@@ -75,7 +75,7 @@
 ''');
   }
 
-  test_noKeyword() async {
+  Future<void> test_noKeyword() async {
     await resolveTestUnit('''
 class C {
   /*LINT*/f = 2;
@@ -88,7 +88,7 @@
 ''');
   }
 
-  test_topLevel_type() async {
+  Future<void> test_topLevel_type() async {
     await resolveTestUnit('''
 int /*LINT*/x = 2;
 ''');
@@ -97,7 +97,7 @@
 ''');
   }
 
-  test_topLevel_var() async {
+  Future<void> test_topLevel_var() async {
     await resolveTestUnit('''
 var /*LINT*/x = 2;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_variable_not_final_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_variable_not_final_test.dart
index 3c210a0..441cbbf 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_variable_not_final_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_variable_not_final_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MakeVariableNotFinalTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.MAKE_VARIABLE_NOT_FINAL;
 
-  test_hasType() async {
+  Future<void> test_hasType() async {
     await resolveTestUnit('''
 main() {
   final int fff = 1;
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_noType() async {
+  Future<void> test_noType() async {
     await resolveTestUnit('''
 main() {
   final fff = 1;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/move_type_arguments_to_class_test.dart b/pkg/analysis_server/test/src/services/correction/fix/move_type_arguments_to_class_test.dart
index b7622e9..cbbf990 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/move_type_arguments_to_class_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/move_type_arguments_to_class_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MoveTypeArgumentsToClassTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.MOVE_TYPE_ARGUMENTS_TO_CLASS;
 
-  test_explicitConst() async {
+  Future<void> test_explicitConst() async {
     await resolveTestUnit('''
 main() {
   const C.named<int>();
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_explicitNew() async {
+  Future<void> test_explicitNew() async {
     await resolveTestUnit('''
 main() {
   new C.named<int>();
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_explicitNew_alreadyThere() async {
+  Future<void> test_explicitNew_alreadyThere() async {
     await resolveTestUnit('''
 main() {
   new C<String>.named<int>();
@@ -69,7 +69,7 @@
     await assertNoFix();
   }
 
-  test_explicitNew_wrongNumber() async {
+  Future<void> test_explicitNew_wrongNumber() async {
     await resolveTestUnit('''
 main() {
   new C.named<int, String>();
@@ -81,7 +81,7 @@
     await assertNoFix();
   }
 
-  test_implicitConst() async {
+  Future<void> test_implicitConst() async {
     await resolveTestUnit('''
 main() {
   const C c = C.named<int>();
@@ -102,7 +102,7 @@
 ''');
   }
 
-  test_implicitNew() async {
+  Future<void> test_implicitNew() async {
     await resolveTestUnit('''
 main() {
   C.named<int>();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart b/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart
index 1184cb4..000b9bb 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(QualifyReferenceTest);
     defineReflectiveTests(QualifyReferenceWithExtensionMethodsTest);
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.QUALIFY_REFERENCE;
 
-  test_class_direct() async {
+  Future<void> test_class_direct() async {
     await resolveTestUnit('''
 class C {
   static void m() {}
@@ -44,7 +44,7 @@
 ''');
   }
 
-  test_class_imported() async {
+  Future<void> test_class_imported() async {
     newFile('/home/test/lib/a.dart', content: '''
 class A {
   static void m() {}
@@ -61,7 +61,7 @@
     await assertNoFix();
   }
 
-  test_class_importedWithPrefix() async {
+  Future<void> test_class_importedWithPrefix() async {
     newFile('/home/test/lib/a.dart', content: '''
 class A {
   static void m() {}
@@ -78,7 +78,7 @@
     await assertNoFix();
   }
 
-  test_class_indirect() async {
+  Future<void> test_class_indirect() async {
     await resolveTestUnit('''
 class A {
   static void m() {}
@@ -105,7 +105,7 @@
 ''');
   }
 
-  test_class_notImported() async {
+  Future<void> test_class_notImported() async {
     newFile('/home/test/lib/a.dart', content: '''
 class A {
   static void m() {}
@@ -135,7 +135,7 @@
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
   }
 
-  test_extension_direct() async {
+  Future<void> test_extension_direct() async {
     await resolveTestUnit('''
 class C {
   static void m() {}
@@ -158,7 +158,7 @@
 ''');
   }
 
-  test_extension_imported() async {
+  Future<void> test_extension_imported() async {
     newFile('/home/test/lib/a.dart', content: '''
 class A {
   static void m() {}
@@ -175,7 +175,7 @@
     await assertNoFix();
   }
 
-  test_extension_importedWithPrefix() async {
+  Future<void> test_extension_importedWithPrefix() async {
     newFile('/home/test/lib/a.dart', content: '''
 class A {
   static void m() {}
@@ -192,7 +192,7 @@
     await assertNoFix();
   }
 
-  test_extension_indirect() async {
+  Future<void> test_extension_indirect() async {
     await resolveTestUnit('''
 class A {
   static void m() {}
@@ -219,7 +219,7 @@
 ''');
   }
 
-  test_extension_notImported() async {
+  Future<void> test_extension_notImported() async {
     newFile('/home/test/lib/a.dart', content: '''
 class A {
   static void m() {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_annotation_test.dart
index 1874b6f..f69c58b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_annotation_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveAnnotationTest);
   });
@@ -25,7 +25,7 @@
     addMetaPackage();
   }
 
-  test_factory() async {
+  Future<void> test_factory() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_immutable() async {
+  Future<void> test_immutable() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
@@ -53,7 +53,7 @@
 ''');
   }
 
-  test_literal() async {
+  Future<void> test_literal() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_override_field() async {
+  Future<void> test_override_field() async {
     await resolveTestUnit('''
 class A {
   @override
@@ -81,7 +81,7 @@
 ''');
   }
 
-  test_override_getter() async {
+  Future<void> test_override_getter() async {
     await resolveTestUnit('''
 class A {
   @override
@@ -95,7 +95,7 @@
 ''');
   }
 
-  test_override_method() async {
+  Future<void> test_override_method() async {
     await resolveTestUnit('''
 class A {
   @override
@@ -109,7 +109,7 @@
 ''');
   }
 
-  test_override_setter() async {
+  Future<void> test_override_setter() async {
     await resolveTestUnit('''
 class A {
   @override
@@ -123,7 +123,7 @@
 ''');
   }
 
-  test_required_namedWithDefault() async {
+  Future<void> test_required_namedWithDefault() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
@@ -136,7 +136,7 @@
 ''');
   }
 
-  test_required_positional() async {
+  Future<void> test_required_positional() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
@@ -149,7 +149,7 @@
 ''');
   }
 
-  test_required_required() async {
+  Future<void> test_required_required() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
@@ -162,7 +162,7 @@
 ''');
   }
 
-  test_sealed() async {
+  Future<void> test_sealed() async {
     await resolveTestUnit('''
 import 'package:meta/meta.dart';
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart
index fde711d..0ebd9c2 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveArgumentTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.avoid_redundant_argument_values;
 
-  test_named_param() async {
+  Future<void> test_named_param() async {
     await resolveTestUnit('''
 void f({bool valWithDefault = true, bool val}) {}
 
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_named_param_2() async {
+  Future<void> test_named_param_2() async {
     await resolveTestUnit('''
 void f({bool valWithDefault = true, bool val}) {}
 
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_optional_positional() async {
+  Future<void> test_optional_positional() async {
     await resolveTestUnit('''
 void g(int x, [int y = 0]) {}
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_await_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_await_test.dart
index dcb6d79..a0e4787 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_await_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_await_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveAwaitTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.await_only_futures;
 
-  test_intLiteral() async {
+  Future<void> test_intLiteral() async {
     await resolveTestUnit('''
 bad() async {
   print(/*LINT*/await 23);
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_stringLiteral() async {
+  Future<void> test_stringLiteral() async {
     await resolveTestUnit('''
 bad() async {
   print(/*LINT*/await 'hola');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart
index 7f2fc41..6d4e023 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveDeadCodeTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_DEAD_CODE;
 
-  test_catch_afterCatchAll_catch() async {
+  Future<void> test_catch_afterCatchAll_catch() async {
     await resolveTestUnit('''
 main() {
   try {
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_catch_afterCatchAll_on() async {
+  Future<void> test_catch_afterCatchAll_on() async {
     await resolveTestUnit('''
 main() {
   try {
@@ -61,7 +61,7 @@
 ''');
   }
 
-  test_catch_subtype() async {
+  Future<void> test_catch_subtype() async {
     await resolveTestUnit('''
 class A {}
 class B extends A {}
@@ -86,7 +86,7 @@
 ''');
   }
 
-  test_condition() async {
+  Future<void> test_condition() async {
     await resolveTestUnit('''
 main(int p) {
   if (true || p > 5) {
@@ -103,7 +103,7 @@
 ''');
   }
 
-  test_statements_one() async {
+  Future<void> test_statements_one() async {
     await resolveTestUnit('''
 int main() {
   print(0);
@@ -119,7 +119,7 @@
 ''');
   }
 
-  test_statements_two() async {
+  Future<void> test_statements_two() async {
     await resolveTestUnit('''
 int main() {
   print(0);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_duplicate_case_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_duplicate_case_test.dart
index 3cd7576..d8c9b4e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_duplicate_case_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_duplicate_case_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveDuplicateCaseTest);
   });
@@ -23,7 +23,35 @@
   @override
   String get lintCode => LintNames.no_duplicate_case_values;
 
-  test_removeStringCase() async {
+  Future<void> test_removeIntCase() async {
+    await resolveTestUnit('''
+void switchInt() {
+  switch (2) {
+    case 1:
+      print('a');
+      break;
+    case 2:
+    case 2 /*LINT*/:
+    default:
+      print('?);
+  }
+}
+''');
+    await assertHasFix('''
+void switchInt() {
+  switch (2) {
+    case 1:
+      print('a');
+      break;
+    case 2:
+    default:
+      print('?);
+  }
+}
+''');
+  }
+
+  Future<void> test_removeStringCase() async {
     await resolveTestUnit('''
 void switchString() {
   String v = 'a';
@@ -58,32 +86,4 @@
 }
 ''');
   }
-
-  test_removeIntCase() async {
-    await resolveTestUnit('''
-void switchInt() {
-  switch (2) {
-    case 1:
-      print('a');
-      break;
-    case 2:
-    case 2 /*LINT*/:
-    default:
-      print('?);
-  }
-}
-''');
-    await assertHasFix('''
-void switchInt() {
-  switch (2) {
-    case 1:
-      print('a');
-      break;
-    case 2:
-    default:
-      print('?);
-  }
-}
-''');
-  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_catch_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_catch_test.dart
index 317e9a1..bfff423 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_catch_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_catch_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveEmptyCatchTest);
   });
@@ -23,23 +23,29 @@
   @override
   String get lintCode => LintNames.empty_catches;
 
-  test_newLine() async {
+  Future<void> test_singleCatch_finally_newLine() async {
     await resolveTestUnit('''
 void foo() {
-  try {}
-  catch (e) {/*LINT*/}
-  finally {}
+  try {
+    1;
+  } catch (e) {/*LINT*/
+  } finally {
+    2;
+  }
 }
 ''');
     await assertHasFix('''
 void foo() {
-  try {}
-  finally {}
+  try {
+    1;
+  } finally {
+    2;
+  }
 }
 ''');
   }
 
-  test_sameLine() async {
+  Future<void> test_singleCatch_finally_sameLine() async {
     await resolveTestUnit('''
 void foo() {
   try {} catch (e) {/*LINT*/} finally {}
@@ -51,4 +57,16 @@
 }
 ''');
   }
+
+  Future<void> test_singleCatch_noFinally() async {
+    // The catch can't be removed unless we also remove the try, which is more
+    // than this fix does at the moment.
+    await resolveTestUnit('''
+void foo() {
+  try {
+  } catch (e) {/*LINT*/}
+}
+''');
+    await assertNoFix();
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_constructor_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_constructor_body_test.dart
index 93f33be..fc57229 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_constructor_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_constructor_body_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveEmptyConstructorBodyTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.empty_constructor_bodies;
 
-  test_empty() async {
+  Future<void> test_empty() async {
     await resolveTestUnit('''
 class C {
   C() {/*LINT*/}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_else_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_else_test.dart
index f65b70e..14fb311 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_else_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_else_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveEmptyElseTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.avoid_empty_else;
 
-  test_newLine() async {
+  Future<void> test_newLine() async {
     await resolveTestUnit('''
 void foo(bool cond) {
   if (cond) {
@@ -41,7 +41,7 @@
 ''');
   }
 
-  test_sameLine() async {
+  Future<void> test_sameLine() async {
     await resolveTestUnit('''
 void foo(bool cond) {
   if (cond) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_statement_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_statement_test.dart
index e225dda..211a7c3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_empty_statement_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_empty_statement_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveEmptyStatementTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.empty_statements;
 
-  test_insideBlock() async {
+  Future<void> test_insideBlock() async {
     await resolveTestUnit('''
 void foo() {
   while(true) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart
index f6559c8..3feb40a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveIfNullOperatorTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_null_in_if_null_operators;
 
-  test_left() async {
+  Future<void> test_left() async {
     await resolveTestUnit('''
 var a = '';
 var b = /*LINT*/null ?? a;
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_right() async {
+  Future<void> test_right() async {
     await resolveTestUnit('''
 var a = '';
 var b = /*LINT*/a ?? null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
index b2bed15..25f3bd5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveInitializerTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.avoid_init_to_null;
 
-  test_field() async {
+  Future<void> test_field() async {
     await resolveTestUnit('''
 class Test {
   int /*LINT*/x = null;
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_forLoop() async {
+  Future<void> test_forLoop() async {
     await resolveTestUnit('''
 void f() {
   for (var /*LINT*/i = null; i != null; i++) {
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_listOfVariableDeclarations() async {
+  Future<void> test_listOfVariableDeclarations() async {
     await resolveTestUnit('''
 String a = 'a', /*LINT*/b = null, c = 'c';
 ''');
@@ -60,7 +60,7 @@
 ''');
   }
 
-  test_parameter_optionalNamed() async {
+  Future<void> test_parameter_optionalNamed() async {
     await resolveTestUnit('''
 void f({String /*LINT*/s = null}) {}
 ''');
@@ -69,7 +69,7 @@
 ''');
   }
 
-  test_parameter_optionalPositional() async {
+  Future<void> test_parameter_optionalPositional() async {
     await resolveTestUnit('''
 void f([String /*LINT*/s = null]) {}
 ''');
@@ -78,7 +78,7 @@
 ''');
   }
 
-  test_topLevel() async {
+  Future<void> test_topLevel() async {
     await resolveTestUnit('''
 var /*LINT*/x = null;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_interpolation_braces_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_interpolation_braces_test.dart
index 876d066..fcb23eb 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_interpolation_braces_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_interpolation_braces_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveInterpolationBracesTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_brace_in_string_interps;
 
-  test_withSpace() async {
+  Future<void> test_withSpace() async {
     await resolveTestUnit(r'''
 main() {
   var v = 42;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart
index 730249c..fd19334 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveMethodDeclarationTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_overrides;
 
-  test_getter() async {
+  Future<void> test_getter() async {
     await resolveTestUnit('''
 class A {
   int x;
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 class A {
   @override
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_setter() async {
+  Future<void> test_setter() async {
     await resolveTestUnit('''
 class A {
   int x;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_combinator_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_combinator_test.dart
index 3ed155e..3bf7a32 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_combinator_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_combinator_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveNameFromCombinatorTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_NAME_FROM_COMBINATOR;
 
-  test_duplicateHiddenName_last() async {
+  Future<void> test_duplicateHiddenName_last() async {
     await resolveTestUnit('''
 import 'dart:math' hide cos, sin, sin;
 
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_duplicateHiddenName_middle() async {
+  Future<void> test_duplicateHiddenName_middle() async {
     await resolveTestUnit('''
 import 'dart:math' hide cos, cos, sin;
 
@@ -54,7 +54,7 @@
   }
 
   @failingTest
-  test_duplicateHiddenName_only_last() async {
+  Future<void> test_duplicateHiddenName_only_last() async {
     // It appears that the hint does not detect names that are duplicated across
     // multiple combinators.
     await resolveTestUnit('''
@@ -74,7 +74,7 @@
   }
 
   @failingTest
-  test_duplicateHiddenName_only_middle() async {
+  Future<void> test_duplicateHiddenName_only_middle() async {
     // It appears that the hint does not detect names that are duplicated across
     // multiple combinators.
     await resolveTestUnit('''
@@ -93,7 +93,7 @@
 ''');
   }
 
-  test_duplicateShownName_last() async {
+  Future<void> test_duplicateShownName_last() async {
     await resolveTestUnit(
       '''
 import 'dart:math' show cos, sin, sin;
@@ -112,7 +112,7 @@
 ''');
   }
 
-  test_duplicateShownName_middle() async {
+  Future<void> test_duplicateShownName_middle() async {
     await resolveTestUnit('''
 import 'dart:math' show cos, cos, sin;
 
@@ -129,7 +129,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_first() async {
+  Future<void> test_undefinedHiddenName_first() async {
     await resolveTestUnit('''
 import 'dart:math' hide aaa, sin, tan;
 
@@ -146,7 +146,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_last() async {
+  Future<void> test_undefinedHiddenName_last() async {
     await resolveTestUnit('''
 import 'dart:math' hide cos, sin, xxx;
 
@@ -163,7 +163,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_middle() async {
+  Future<void> test_undefinedHiddenName_middle() async {
     await resolveTestUnit('''
 import 'dart:math' hide cos, mmm, tan;
 
@@ -180,7 +180,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_only_first() async {
+  Future<void> test_undefinedHiddenName_only_first() async {
     await resolveTestUnit('''
 import 'dart:math' hide aaa hide cos, sin;
 
@@ -197,7 +197,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_only_last() async {
+  Future<void> test_undefinedHiddenName_only_last() async {
     await resolveTestUnit('''
 import 'dart:math' hide cos, sin hide aaa;
 
@@ -214,7 +214,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_only_middle() async {
+  Future<void> test_undefinedHiddenName_only_middle() async {
     await resolveTestUnit('''
 import 'dart:math' hide cos hide aaa hide sin;
 
@@ -231,7 +231,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_only_only() async {
+  Future<void> test_undefinedHiddenName_only_only() async {
     await resolveTestUnit('''
 import 'dart:math' hide aaa;
 var c = sin(0.3);
@@ -242,7 +242,7 @@
 ''');
   }
 
-  test_undefinedHiddenName_only_only_withAs() async {
+  Future<void> test_undefinedHiddenName_only_only_withAs() async {
     await resolveTestUnit('''
 import 'dart:math' as math hide aaa;
 var c = math.sin(0.3);
@@ -253,7 +253,7 @@
 ''');
   }
 
-  test_undefinedShownName_first() async {
+  Future<void> test_undefinedShownName_first() async {
     await resolveTestUnit('''
 import 'dart:math' show aaa, sin, tan;
 
@@ -270,7 +270,7 @@
 ''');
   }
 
-  test_undefinedShownName_last() async {
+  Future<void> test_undefinedShownName_last() async {
     await resolveTestUnit('''
 import 'dart:math' show cos, sin, xxx;
 
@@ -287,7 +287,7 @@
 ''');
   }
 
-  test_undefinedShownName_middle() async {
+  Future<void> test_undefinedShownName_middle() async {
     await resolveTestUnit('''
 import 'dart:math' show cos, mmm, tan;
 
@@ -304,7 +304,7 @@
 ''');
   }
 
-  test_unusedShownName_first() async {
+  Future<void> test_unusedShownName_first() async {
     await resolveTestUnit('''
 import 'dart:math' show cos, sin, tan;
 
@@ -321,7 +321,7 @@
 ''');
   }
 
-  test_unusedShownName_last() async {
+  Future<void> test_unusedShownName_last() async {
     await resolveTestUnit('''
 import 'dart:math' show cos, sin, tan;
 
@@ -338,7 +338,7 @@
 ''');
   }
 
-  test_unusedShownName_middle() async {
+  Future<void> test_unusedShownName_middle() async {
     await resolveTestUnit('''
 import 'dart:math' show cos, sin, tan;
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_operator_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_operator_test.dart
index aef5f95..1568cf3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_operator_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_operator_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveOperatorTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_adjacent_string_concatenation;
 
-  test_plus() async {
+  Future<void> test_plus() async {
     await resolveTestUnit('''
 var s = 'a' /*LINT*/+ 'b';
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_parameters_in_getter_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_parameters_in_getter_declaration_test.dart
index 20606f5..53a3e6b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_parameters_in_getter_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_parameters_in_getter_declaration_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveParametersInGetterDeclarationTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_PARAMETERS_IN_GETTER_DECLARATION;
 
-  test_emptyList() async {
+  Future<void> test_emptyList() async {
     await resolveTestUnit('''
 class A {
   int get foo() => 0;
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_nonEmptyList() async {
+  Future<void> test_nonEmptyList() async {
     await resolveTestUnit('''
 class A {
   int get foo(int a) => 0;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_parentheses_in_getter_invocation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_parentheses_in_getter_invocation_test.dart
index 65e1c39..c968a3f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_parentheses_in_getter_invocation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_parentheses_in_getter_invocation_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveParenthesesInGetterInvocationTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_PARENTHESIS_IN_GETTER_INVOCATION;
 
-  test_noArguments() async {
+  Future<void> test_noArguments() async {
     await resolveTestUnit('''
 class A {
   int get foo => 0;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_this_expression_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_this_expression_test.dart
index bcb188a..ad30634 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_this_expression_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_this_expression_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveThisExpressionTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_this;
 
-  test_constructorInitializer() async {
+  Future<void> test_constructorInitializer() async {
     await resolveTestUnit('''
 class A {
   int x;
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_methodInvocation_oneCharacterOperator() async {
+  Future<void> test_methodInvocation_oneCharacterOperator() async {
     await resolveTestUnit('''
 class A {
   void foo() {
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_methodInvocation_twoCharactersOperator() async {
+  Future<void> test_methodInvocation_twoCharactersOperator() async {
     await resolveTestUnit('''
 class A {
   void foo() {
@@ -72,7 +72,7 @@
 ''');
   }
 
-  test_notAThisExpression() async {
+  Future<void> test_notAThisExpression() async {
     await resolveTestUnit('''
 void foo() {
   final /*LINT*/this.id;
@@ -81,7 +81,7 @@
     await assertNoFix();
   }
 
-  test_propertyAccess_oneCharacterOperator() async {
+  Future<void> test_propertyAccess_oneCharacterOperator() async {
     await resolveTestUnit('''
 class A {
   int x;
@@ -100,7 +100,7 @@
 ''');
   }
 
-  test_propertyAccess_twoCharactersOperator() async {
+  Future<void> test_propertyAccess_twoCharactersOperator() async {
     await resolveTestUnit('''
 class A {
   int x;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart
index 7e0b234..3e99462 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AvoidAnnotatingWithDynamicTest);
     defineReflectiveTests(AvoidReturnTypesOnSettersTest);
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.avoid_annotating_with_dynamic;
 
-  test_insideFunctionTypedFormalParameter() async {
+  Future<void> test_insideFunctionTypedFormalParameter() async {
     await resolveTestUnit('''
 bad(void foo(/*LINT*/dynamic x)) {
   return null;
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_namedParameter() async {
+  Future<void> test_namedParameter() async {
     await resolveTestUnit('''
 bad({/*LINT*/dynamic defaultValue}) {
   return null;
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_normalParameter() async {
+  Future<void> test_normalParameter() async {
     await resolveTestUnit('''
 bad(/*LINT*/dynamic defaultValue) {
   return null;
@@ -62,7 +62,7 @@
 ''');
   }
 
-  test_optionalParameter() async {
+  Future<void> test_optionalParameter() async {
     await resolveTestUnit('''
 bad([/*LINT*/dynamic defaultValue]) {
   return null;
@@ -81,7 +81,7 @@
   @override
   String get lintCode => LintNames.avoid_return_types_on_setters;
 
-  test_void() async {
+  Future<void> test_void() async {
     await resolveTestUnit('''
 /*LINT*/void set speed2(int ms) {}
 ''');
@@ -96,7 +96,7 @@
   @override
   String get lintCode => LintNames.avoid_types_on_closure_parameters;
 
-  test_namedParameter() async {
+  Future<void> test_namedParameter() async {
     await resolveTestUnit('''
 var x = ({/*LINT*/Future<int> defaultValue}) {
   return null;
@@ -109,7 +109,7 @@
 ''');
   }
 
-  test_normalParameter() async {
+  Future<void> test_normalParameter() async {
     await resolveTestUnit('''
 var x = (/*LINT*/Future<int> defaultValue) {
   return null;
@@ -122,7 +122,7 @@
 ''');
   }
 
-  test_optionalParameter() async {
+  Future<void> test_optionalParameter() async {
     await resolveTestUnit('''
 var x = ([/*LINT*/Future<int> defaultValue]) {
   return null;
@@ -147,7 +147,7 @@
   @override
   String get lintCode => LintNames.type_init_formals;
 
-  test_void() async {
+  Future<void> test_void() async {
     await resolveTestUnit('''
 class C {
   int f;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_type_arguments_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_type_arguments_test.dart
index b27594f..cc3a812 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_type_arguments_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_type_arguments_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveTypeArgumentsTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_TYPE_ARGUMENTS;
 
-  test_explicitConst() async {
+  Future<void> test_explicitConst() async {
     await resolveTestUnit('''
 main() {
   const C.named<int>();
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_explicitNew() async {
+  Future<void> test_explicitNew() async {
     await resolveTestUnit('''
 main() {
   new C.named<int>();
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_implicitConst() async {
+  Future<void> test_implicitConst() async {
     await resolveTestUnit('''
 main() {
   const C c = C.named<int>();
@@ -78,7 +78,7 @@
 ''');
   }
 
-  test_implicitNew() async {
+  Future<void> test_implicitNew() async {
     await resolveTestUnit('''
 main() {
   C.named<int>();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart
index 9218c3b..576f52d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnnecessaryCastTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNNECESSARY_CAST;
 
-  test_assignment() async {
+  Future<void> test_assignment() async {
     await resolveTestUnit('''
 main(Object p) {
   if (p is String) {
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_assignment_all() async {
+  Future<void> test_assignment_all() async {
     await resolveTestUnit('''
 main(Object p, Object q) {
   if (p is String) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_const_test.dart
index f6d1bb9..7146abd 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_const_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnnecessaryConstTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_const;
 
-  test_constConstructor() async {
+  Future<void> test_constConstructor() async {
     await resolveTestUnit('''
 class A { const A(); }
 m(){
@@ -38,7 +38,7 @@
 ''');
   }
 
-  test_instanceCreation() async {
+  Future<void> test_instanceCreation() async {
     await resolveTestUnit('''
 const list = /*LINT*/const List();
 ''');
@@ -47,7 +47,7 @@
 ''', length: 5);
   }
 
-  test_typedLiteral() async {
+  Future<void> test_typedLiteral() async {
     await resolveTestUnit('''
 const list = /*LINT*/const [];
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_new_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_new_test.dart
index 69075a9..d416ab8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_new_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_new_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnnecessaryNewTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_new;
 
-  test_constructor() async {
+  Future<void> test_constructor() async {
     await resolveTestUnit('''
 class A { A(); }
 m(){
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
index 8bd4f51..7f5f40a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedCatchClauseTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_CATCH_CLAUSE;
 
-  test_removeUnusedCatchClause() async {
+  Future<void> test_removeUnusedCatchClause() async {
     await resolveTestUnit('''
 main() {
   try {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
index da067cd..31fc9a3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedCatchStackTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_CATCH_STACK;
 
-  test_removeUnusedCatchStack() async {
+  Future<void> test_removeUnusedCatchStack() async {
     await resolveTestUnit('''
 main() {
   try {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
index 9f6a7928..2160a9c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
@@ -10,7 +10,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedElementTest);
   });
@@ -21,7 +21,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_ELEMENT;
 
-  test_class_notUsed_inClassMember() async {
+  Future<void> test_class_notUsed_inClassMember() async {
     await resolveTestUnit(r'''
 class _A {
   staticMethod() {
@@ -34,7 +34,7 @@
     await assertNoFix();
   }
 
-  test_class_notUsed_isExpression() async {
+  Future<void> test_class_notUsed_isExpression() async {
     await resolveTestUnit(r'''
 class _A {}
 main(p) {
@@ -46,7 +46,7 @@
     await assertNoFix();
   }
 
-  test_class_notUsed_noReference() async {
+  Future<void> test_class_notUsed_noReference() async {
     await resolveTestUnit(r'''
 class _A {
 }
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_enum_notUsed_noReference() async {
+  Future<void> test_enum_notUsed_noReference() async {
     await resolveTestUnit(r'''
 enum _MyEnum {A, B, C}
 ''');
@@ -65,7 +65,7 @@
     });
   }
 
-  test_functionLocal_notUsed_noReference() async {
+  Future<void> test_functionLocal_notUsed_noReference() async {
     await resolveTestUnit(r'''
 main() {
   f() {}
@@ -77,7 +77,7 @@
 ''');
   }
 
-  test_functionTop_notUsed_noReference() async {
+  Future<void> test_functionTop_notUsed_noReference() async {
     await resolveTestUnit(r'''
 _f() {}
 main() {
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_functionTypeAlias_notUsed_noReference() async {
+  Future<void> test_functionTypeAlias_notUsed_noReference() async {
     await resolveTestUnit(r'''
 typedef _F(a, b);
 main() {
@@ -101,7 +101,7 @@
 ''');
   }
 
-  test_getter_notUsed_noReference() async {
+  Future<void> test_getter_notUsed_noReference() async {
     await resolveTestUnit(r'''
 class A {
   get _g => null;
@@ -113,7 +113,7 @@
 ''');
   }
 
-  test_method_notUsed_noReference() async {
+  Future<void> test_method_notUsed_noReference() async {
     await resolveTestUnit(r'''
 class A {
   static _m() {}
@@ -125,7 +125,7 @@
 ''');
   }
 
-  test_setter_notUsed_noReference() async {
+  Future<void> test_setter_notUsed_noReference() async {
     await resolveTestUnit(r'''
 class A {
   set _s(x) {}
@@ -137,7 +137,7 @@
 ''');
   }
 
-  test_staticMethod_extension_notUsed_noReference() async {
+  Future<void> test_staticMethod_extension_notUsed_noReference() async {
     await resolveTestUnit(r'''
 extension _E on String {
   static int m1() => 3;
@@ -153,7 +153,7 @@
 ''');
   }
 
-  test_staticMethod_mixim_notUsed_noReference() async {
+  Future<void> test_staticMethod_mixim_notUsed_noReference() async {
     await resolveTestUnit(r'''
 mixin _M {
   static int m1() => 3;
@@ -169,7 +169,7 @@
 ''');
   }
 
-  test_staticMethod_notUsed_noReference() async {
+  Future<void> test_staticMethod_notUsed_noReference() async {
     await resolveTestUnit(r'''
 class _A {
   static int m() => 7;
@@ -183,7 +183,7 @@
 ''');
   }
 
-  test_topLevelVariable_notUsed() async {
+  Future<void> test_topLevelVariable_notUsed() async {
     await resolveTestUnit(r'''
 int _a = 1;
 main() {
@@ -194,7 +194,7 @@
     await assertNoFix();
   }
 
-  test_topLevelVariable_notUsed_noReference() async {
+  Future<void> test_topLevelVariable_notUsed_noReference() async {
     await resolveTestUnit(r'''
 int _a = 1;
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_field_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_field_test.dart
index 139fb95..99ea7c3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_field_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedFieldTest);
   });
@@ -20,7 +20,7 @@
   FixKind get kind => DartFixKind.REMOVE_UNUSED_FIELD;
 
   @FailingTest(reason: 'Unimplemented')
-  test_enumValue_notUsed_noReference() async {
+  Future<void> test_enumValue_notUsed_noReference() async {
     await resolveTestUnit(r'''
 enum _E { a, b, c }
 bool f(_E e) => e == _E.a || e == _E.b;
@@ -31,7 +31,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_assign() async {
+  Future<void> test_unusedField_notUsed_assign() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -48,7 +48,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_compoundAssign() async {
+  Future<void> test_unusedField_notUsed_compoundAssign() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -65,7 +65,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_constructorFieldInitializers() async {
+  Future<void> test_unusedField_notUsed_constructorFieldInitializers() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -79,7 +79,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_constructorFieldInitializers1() async {
+  Future<void> test_unusedField_notUsed_constructorFieldInitializers1() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -95,7 +95,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_constructorFieldInitializers2() async {
+  Future<void> test_unusedField_notUsed_constructorFieldInitializers2() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -111,7 +111,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_declarationList() async {
+  Future<void> test_unusedField_notUsed_declarationList() async {
     await resolveTestUnit(r'''
 class A {
   int _f, x;
@@ -130,7 +130,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_declarationList2() async {
+  Future<void> test_unusedField_notUsed_declarationList2() async {
     await resolveTestUnit(r'''
 class A {
   int x, _f;
@@ -149,7 +149,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_fieldFormalParameter() async {
+  Future<void> test_unusedField_notUsed_fieldFormalParameter() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -163,7 +163,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_fieldFormalParameter2() async {
+  Future<void> test_unusedField_notUsed_fieldFormalParameter2() async {
     await resolveTestUnit(r'''
 class A {
   int _f;
@@ -179,7 +179,7 @@
 ''');
   }
 
-  test_unusedField_notUsed_fieldFormalParameter3() async {
+  Future<void> test_unusedField_notUsed_fieldFormalParameter3() async {
     await resolveTestUnit(r'''
 class A {
   int x;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
index e7a4db9..7ac2650 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedImportTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_IMPORT;
 
-  test_all_diverseImports() async {
+  Future<void> test_all_diverseImports() async {
     await resolveTestUnit('''
 import 'dart:math';
 import 'dart:math';
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_all_diverseImports2() async {
+  Future<void> test_all_diverseImports2() async {
     await resolveTestUnit('''
 import 'dart:async';
 import 'dart:math' as math;
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_all_singleLine() async {
+  Future<void> test_all_singleLine() async {
     await resolveTestUnit('''
 import 'dart:math'; import 'dart:math'; import 'dart:math';
 main() {
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_anotherImportOnLine() async {
+  Future<void> test_anotherImportOnLine() async {
     await resolveTestUnit('''
 import 'dart:math'; import 'dart:async';
 
@@ -86,7 +86,7 @@
 ''');
   }
 
-  test_duplicateImport() async {
+  Future<void> test_duplicateImport() async {
     await resolveTestUnit('''
 import 'dart:math';
 import 'dart:math';
@@ -104,7 +104,7 @@
 ''');
   }
 
-  test_multipleOfSame_all() async {
+  Future<void> test_multipleOfSame_all() async {
     await resolveTestUnit('''
 import 'dart:math';
 import 'dart:math';
@@ -118,7 +118,7 @@
 ''');
   }
 
-  test_severalLines() async {
+  Future<void> test_severalLines() async {
     await resolveTestUnit('''
 import
   'dart:math';
@@ -131,7 +131,7 @@
 ''');
   }
 
-  test_single() async {
+  Future<void> test_single() async {
     await resolveTestUnit('''
 import 'dart:math';
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_label_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_label_test.dart
index 3b0f339..a709788 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_label_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_label_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedLabelTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_LABEL;
 
-  test_unused_onWhile() async {
+  Future<void> test_unused_onWhile() async {
     await resolveTestUnit('''
 f() {
   x:
@@ -37,7 +37,7 @@
 ''');
   }
 
-  test_unused_onWhile_sameLine() async {
+  Future<void> test_unused_onWhile_sameLine() async {
     await resolveTestUnit('''
 f() {
   x: while (true) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart
index c05e4cc..cf625ca 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedLocalVariableTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_LOCAL_VARIABLE;
 
-  test_inArgumentList() async {
+  Future<void> test_inArgumentList() async {
     await resolveTestUnit(r'''
 main() {
   var v = 1;
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_inArgumentList2() async {
+  Future<void> test_inArgumentList2() async {
     await resolveTestUnit(r'''
 main() {
   var v = 1;
@@ -50,7 +50,7 @@
 ''');
   }
 
-  test_inArgumentList3() async {
+  Future<void> test_inArgumentList3() async {
     await resolveTestUnit(r'''
 main() {
   var v = 1;
@@ -66,7 +66,7 @@
 ''');
   }
 
-  test_inDeclarationList() async {
+  Future<void> test_inDeclarationList() async {
     await resolveTestUnit(r'''
 main() {
   var v = 1, v2 = 3;
@@ -82,7 +82,7 @@
 ''');
   }
 
-  test_inDeclarationList2() async {
+  Future<void> test_inDeclarationList2() async {
     await resolveTestUnit(r'''
 main() {
   var v = 1, v2 = 3;
@@ -97,7 +97,7 @@
 ''');
   }
 
-  test_withReferences() async {
+  Future<void> test_withReferences() async {
     await resolveTestUnit(r'''
 main() {
   var v = 1;
@@ -110,7 +110,7 @@
 ''');
   }
 
-  test_withReferences_beforeDeclaration() async {
+  Future<void> test_withReferences_beforeDeclaration() async {
     // CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION
     verifyNoTestUnitErrors = false;
     await resolveTestUnit(r'''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/rename_to_camel_case_test.dart b/pkg/analysis_server/test/src/services/correction/fix/rename_to_camel_case_test.dart
index 9c8715a..47d4102 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/rename_to_camel_case_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/rename_to_camel_case_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameToCamelCaseTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.non_constant_identifier_names;
 
-  test_localVariable() async {
+  Future<void> test_localVariable() async {
     await resolveTestUnit('''
 main() {
   int /*LINT*/my_integer_variable = 42;
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_parameter_closure() async {
+  Future<void> test_parameter_closure() async {
     await resolveTestUnit('''
 main() {
   [0, 1, 2].forEach((/*LINT*/my_integer_variable) {
@@ -59,7 +59,7 @@
 ''');
   }
 
-  test_parameter_function() async {
+  Future<void> test_parameter_function() async {
     await resolveTestUnit('''
 main(int /*LINT*/my_integer_variable) {
   print(my_integer_variable);
@@ -72,7 +72,7 @@
 ''');
   }
 
-  test_parameter_method() async {
+  Future<void> test_parameter_method() async {
     await resolveTestUnit('''
 class A {
   main(int /*LINT*/my_integer_variable) {
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_parameter_optionalNamed() async {
+  Future<void> test_parameter_optionalNamed() async {
     await resolveTestUnit('''
 foo({int /*LINT*/my_integer_variable}) {
   print(my_integer_variable);
@@ -98,7 +98,7 @@
     await assertNoFix();
   }
 
-  test_parameter_optionalPositional() async {
+  Future<void> test_parameter_optionalPositional() async {
     await resolveTestUnit('''
 main([int /*LINT*/my_integer_variable]) {
   print(my_integer_variable);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
index 29fe96e..d3e3acc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceBooleanWithBoolTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.REPLACE_BOOLEAN_WITH_BOOL;
 
-  test_all() async {
+  Future<void> test_all() async {
     await resolveTestUnit('''
 main() {
   boolean v;
@@ -35,7 +35,7 @@
 ''');
   }
 
-  test_single() async {
+  Future<void> test_single() async {
     await resolveTestUnit('''
 main() {
   boolean v;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart
index 01296a0..c7e3e59 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceColonWithEqualsTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_equal_for_default_values;
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 void f1({int a}) { }    
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_final_with_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_final_with_const_test.dart
index 48416db..60ea7bc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_final_with_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_final_with_const_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceFinalWithConstTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_const_declarations;
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 /*LINT*/final int a = 1;
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart
index ae07cfc..95d3073 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceNewWithConstTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_const_constructors;
 
-  test_basic() async {
+  Future<void> test_basic() async {
     await resolveTestUnit('''
 class C {
   const C();
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_not_present() async {
+  Future<void> test_not_present() async {
     await resolveTestUnit('''
 class C {
   const C();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_null_with_closure_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_null_with_closure_test.dart
index f2c38c9..4c6024c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_null_with_closure_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_null_with_closure_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceNullWithClosureTest);
   });
@@ -27,7 +27,7 @@
   /// where the fix (and lint) expect a NullLiteral.
   /// todo (pq): re-write FixProcessorLintTest to run the actual lints.
   @failingTest
-  test_null_closure_literal() async {
+  Future<void> test_null_closure_literal() async {
     await resolveTestUnit('''
 void f(dynamic x) { }
 main() {
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_null_closure_named_expression() async {
+  Future<void> test_null_closure_named_expression() async {
     await resolveTestUnit('''
 main() {
   [1, 3, 5].firstWhere((e) => e.isOdd, orElse: /*LINT*/null);
@@ -55,7 +55,7 @@
 ''');
   }
 
-  test_null_closure_named_expression_with_args() async {
+  Future<void> test_null_closure_named_expression_with_args() async {
     await resolveTestUnit('''
 void f({int closure(x, y)}) { }
 main() {
@@ -70,7 +70,7 @@
 ''');
   }
 
-  test_null_closure_named_expression_with_args_2() async {
+  Future<void> test_null_closure_named_expression_with_args_2() async {
     await resolveTestUnit('''
 void f({int closure(x, y, {z})}) { }
 main() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
index 244178e..c7f6976 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceReturnTypeFutureTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.REPLACE_RETURN_TYPE_FUTURE;
 
-  test_adjacentNodes_withImport() async {
+  Future<void> test_adjacentNodes_withImport() async {
     await resolveTestUnit('''
 import 'dart:async';
 var v;int main() async => 0;
@@ -33,7 +33,7 @@
     });
   }
 
-  test_adjacentNodes_withoutImport() async {
+  Future<void> test_adjacentNodes_withoutImport() async {
     await resolveTestUnit('''
 var v;int main() async => 0;
 ''');
@@ -44,7 +44,7 @@
     });
   }
 
-  test_complexTypeName_withImport() async {
+  Future<void> test_complexTypeName_withImport() async {
     await resolveTestUnit('''
 import 'dart:async';
 List<int> main() async {
@@ -60,7 +60,7 @@
   }
 
   @failingTest
-  test_complexTypeName_withoutImport() async {
+  Future<void> test_complexTypeName_withoutImport() async {
     await resolveTestUnit('''
 List<int> main() async {
 }
@@ -75,7 +75,7 @@
     });
   }
 
-  test_importedWithPrefix() async {
+  Future<void> test_importedWithPrefix() async {
     await resolveTestUnit('''
 import 'dart:async' as al;
 int main() async {
@@ -90,7 +90,7 @@
     });
   }
 
-  test_simpleTypeName_withImport() async {
+  Future<void> test_simpleTypeName_withImport() async {
     await resolveTestUnit('''
 import 'dart:async';
 int main() async => 0;
@@ -104,7 +104,7 @@
   }
 
   @failingTest
-  test_simpleTypeName_withoutImport() async {
+  Future<void> test_simpleTypeName_withoutImport() async {
     await resolveTestUnit('''
 int main() async => 0;
 ''');
@@ -117,7 +117,7 @@
     });
   }
 
-  test_withLibraryDirective_withImport() async {
+  Future<void> test_withLibraryDirective_withImport() async {
     await resolveTestUnit('''
 library main;
 import 'dart:async';
@@ -134,7 +134,7 @@
     });
   }
 
-  test_withLibraryDirective_withoutImport() async {
+  Future<void> test_withLibraryDirective_withoutImport() async {
     await resolveTestUnit('''
 library main;
 int main() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart
index f0463c8..39f3c9f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceVarWithDynamicTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.REPLACE_VAR_WITH_DYNAMIC;
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 class A {
   Map<String, var> m;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_brackets_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_brackets_test.dart
index bac5617..1d5ddaf 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_brackets_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_brackets_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithBracketsTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.empty_statements;
 
-  test_outOfBlock_otherLine() async {
+  Future<void> test_outOfBlock_otherLine() async {
     await resolveTestUnit('''
 void foo() {
   while(true)
@@ -39,7 +39,7 @@
 ''');
   }
 
-  test_outOfBlock_sameLine() async {
+  Future<void> test_outOfBlock_sameLine() async {
     await resolveTestUnit('''
 void foo() {
   while(true)/*LINT*/;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_conditional_assignment_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_conditional_assignment_test.dart
index cfca8d5..c54e29a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_conditional_assignment_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_conditional_assignment_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithConditionalAssignmentTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_conditional_assignment;
 
-  test_withCodeBeforeAndAfter() async {
+  Future<void> test_withCodeBeforeAndAfter() async {
     await resolveTestUnit('''
 class Person {
   String _fullName;
@@ -48,7 +48,7 @@
 ''');
   }
 
-  test_withOneBlock() async {
+  Future<void> test_withOneBlock() async {
     await resolveTestUnit('''
 class Person {
   String _fullName;
@@ -69,7 +69,7 @@
 ''');
   }
 
-  test_withoutBlock() async {
+  Future<void> test_withoutBlock() async {
     await resolveTestUnit('''
 class Person {
   String _fullName;
@@ -89,7 +89,7 @@
 ''');
   }
 
-  test_withTwoBlock() async {
+  Future<void> test_withTwoBlock() async {
     await resolveTestUnit('''
 class Person {
   String _fullName;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart
index b31de86..bd4dfcd 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithExtensionNameTest);
   });
@@ -26,7 +26,7 @@
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
   }
 
-  test_getter() async {
+  Future<void> test_getter() async {
     await resolveTestUnit('''
 extension E on String {
   static int get g => 0;
@@ -47,7 +47,7 @@
 ''');
   }
 
-  test_method() async {
+  Future<void> test_method() async {
     await resolveTestUnit('''
 extension E on String {
   static int m() => 0;
@@ -68,7 +68,7 @@
 ''');
   }
 
-  test_qualified() async {
+  Future<void> test_qualified() async {
     newFile('/home/test/lib/ext.dart', content: '''
 extension E on String {
   static int m() => 0;
@@ -90,7 +90,7 @@
 ''');
   }
 
-  test_setter() async {
+  Future<void> test_setter() async {
     await resolveTestUnit('''
 extension E on String {
   static set s(int i) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_identifier_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_identifier_test.dart
index a4cc442..5a5b9c3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_identifier_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_identifier_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithIdentifierTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.avoid_types_on_closure_parameters;
 
-  test_functionTypedFormalParameter() async {
+  Future<void> test_functionTypedFormalParameter() async {
     await resolveTestUnit('''
 var functionWithFunction = (/*LINT*/int f(int x)) => f(0);
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_empty_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_empty_test.dart
index 909b335..1ecf23e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_empty_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_empty_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithIsEmptyTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_is_empty;
 
-  test_constantOnLeft_equal() async {
+  Future<void> test_constantOnLeft_equal() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/0 == c.length) {}
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_constantOnLeft_greaterThan() async {
+  Future<void> test_constantOnLeft_greaterThan() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/1 > c.length) {}
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_constantOnLeft_greaterThanOrEqual() async {
+  Future<void> test_constantOnLeft_greaterThanOrEqual() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/0 >= c.length) {}
@@ -62,7 +62,7 @@
 ''');
   }
 
-  test_constantOnRight_equal() async {
+  Future<void> test_constantOnRight_equal() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/c.length == 0) {}
@@ -75,7 +75,7 @@
 ''');
   }
 
-  test_constantOnRight_lessThan() async {
+  Future<void> test_constantOnRight_lessThan() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/c.length < 1) {}
@@ -88,7 +88,7 @@
 ''');
   }
 
-  test_constantOnRight_lessThanOrEqual() async {
+  Future<void> test_constantOnRight_lessThanOrEqual() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/c.length <= 0) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_not_empty_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_not_empty_test.dart
index 2fda33b..c26dbb6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_not_empty_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_is_not_empty_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithIsNotEmptyTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_is_empty;
 
-  test_constantOnLeft_lessThanOrEqual() async {
+  Future<void> test_constantOnLeft_lessThanOrEqual() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/1 <= c.length) {}
@@ -36,7 +36,7 @@
 ''');
   }
 
-  test_constantOnLeft_notEqual() async {
+  Future<void> test_constantOnLeft_notEqual() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/0 != c.length) {}
@@ -49,7 +49,7 @@
 ''');
   }
 
-  test_constantOnRight_greaterThanOrEqual() async {
+  Future<void> test_constantOnRight_greaterThanOrEqual() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/c.length >= 1) {}
@@ -62,7 +62,7 @@
 ''');
   }
 
-  test_constantOnRight_notEqual() async {
+  Future<void> test_constantOnRight_notEqual() async {
     await resolveTestUnit('''
 f(List c) {
   if (/*LINT*/c.length != 0) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart
index f758081..526cecc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_null_aware_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithNullAwareTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.REPLACE_WITH_NULL_AWARE;
 
-  test_chain() async {
+  Future<void> test_chain() async {
     await resolveTestUnit('''
 main(x) {
   x?.a.b.c;
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_methodInvocation() async {
+  Future<void> test_methodInvocation() async {
     await resolveTestUnit('''
 main(x) {
   x?.a.b();
@@ -45,7 +45,7 @@
 ''');
   }
 
-  test_propertyAccess() async {
+  Future<void> test_propertyAccess() async {
     await resolveTestUnit('''
 main(x) {
   x?.a().b;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_tear_off_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_tear_off_test.dart
index 88cc858..2199104 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_tear_off_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_tear_off_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithTearOffTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.unnecessary_lambdas;
 
-  test_function_oneParameter() async {
+  Future<void> test_function_oneParameter() async {
     await resolveTestUnit('''
 final x = /*LINT*/(name) {
   print(name);
@@ -34,7 +34,7 @@
 ''');
   }
 
-  test_function_zeroParameters() async {
+  Future<void> test_function_zeroParameters() async {
     await resolveTestUnit('''
 void foo(){}
 Function finalVar() {
@@ -51,7 +51,7 @@
 ''');
   }
 
-  test_lambda_asArgument() async {
+  Future<void> test_lambda_asArgument() async {
     await resolveTestUnit('''
 void foo() {
   bool isPair(int a) => a % 2 == 0;
@@ -69,7 +69,7 @@
 ''');
   }
 
-  test_method_oneParameter() async {
+  Future<void> test_method_oneParameter() async {
     await resolveTestUnit('''
 var a = /*LINT*/(x) => finalList.remove(x);
 ''');
@@ -78,7 +78,7 @@
 ''');
   }
 
-  test_method_zeroParameter() async {
+  Future<void> test_method_zeroParameter() async {
     await resolveTestUnit('''
 final Object a;
 Function finalVar() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_var_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_var_test.dart
index a657b44..b1b2d9c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_var_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_var_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithVarTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.omit_local_variable_types;
 
-  test_for() async {
+  Future<void> test_for() async {
     await resolveTestUnit('''
 void f(List<int> list) {
   for (/*LINT*/int i = 0; i < list.length; i++) {
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_forEach() async {
+  Future<void> test_forEach() async {
     await resolveTestUnit('''
 void f(List<int> list) {
   for (/*LINT*/int i in list) {
@@ -57,7 +57,7 @@
 ''');
   }
 
-  test_generic_instanceCreation_withArguments() async {
+  Future<void> test_generic_instanceCreation_withArguments() async {
     await resolveTestUnit('''
 C<int> f() {
   /*LINT*/C<int> c = C<int>();
@@ -74,7 +74,7 @@
 ''');
   }
 
-  test_generic_instanceCreation_withoutArguments() async {
+  Future<void> test_generic_instanceCreation_withoutArguments() async {
     await resolveTestUnit('''
 C<int> f() {
   /*LINT*/C<int> c = C();
@@ -91,7 +91,7 @@
 ''');
   }
 
-  test_generic_listLiteral() async {
+  Future<void> test_generic_listLiteral() async {
     await resolveTestUnit('''
 List f() {
   /*LINT*/List<int> l = [];
@@ -106,7 +106,7 @@
 ''');
   }
 
-  test_generic_mapLiteral() async {
+  Future<void> test_generic_mapLiteral() async {
     await resolveTestUnit('''
 Map f() {
   /*LINT*/Map<String, int> m = {};
@@ -121,7 +121,7 @@
 ''');
   }
 
-  test_generic_setLiteral() async {
+  Future<void> test_generic_setLiteral() async {
     await resolveTestUnit('''
 Set f() {
   /*LINT*/Set<int> s = {};
@@ -136,7 +136,7 @@
 ''');
   }
 
-  test_generic_setLiteral_ambiguous() async {
+  Future<void> test_generic_setLiteral_ambiguous() async {
     await resolveTestUnit('''
 Set f() {
   /*LINT*/Set s = {};
@@ -146,7 +146,7 @@
     await assertNoFix();
   }
 
-  test_simple() async {
+  Future<void> test_simple() async {
     await resolveTestUnit('''
 String f() {
   /*LINT*/String s = '';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/sort_child_property_last_test.dart b/pkg/analysis_server/test/src/services/correction/fix/sort_child_property_last_test.dart
index d9e72c7..035a6cf 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/sort_child_property_last_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/sort_child_property_last_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortChildPropertiesLastTest);
   });
@@ -24,7 +24,7 @@
   String get lintCode => LintNames.sort_child_properties_last;
 
   /// More coverage in the `sort_child_properties_last_test.dart` assist test.
-  test_sort() async {
+  Future<void> test_sort() async {
     addFlutterPackage();
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
index 3a8d4a1..cb1657b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
@@ -149,7 +149,7 @@
 import 'use_not_eq_null_test.dart' as use_not_eq_null;
 import 'use_rethrow_test.dart' as use_rethrow;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     add_async.main();
     add_await.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/update_sdk_constraints_test.dart b/pkg/analysis_server/test/src/services/correction/fix/update_sdk_constraints_test.dart
index f6f3724..7dc77c9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/update_sdk_constraints_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/update_sdk_constraints_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateSdkConstraintsTest);
   });
@@ -20,11 +20,11 @@
   @override
   FixKind get kind => DartFixKind.UPDATE_SDK_CONSTRAINTS;
 
-  test_any() async {
+  Future<void> test_any() async {
     await testUpdate(from: 'any', to: '^2.1.0');
   }
 
-  test_asInConstContext() async {
+  Future<void> test_asInConstContext() async {
     createAnalysisOptionsFile(experiments: [EnableString.constant_update_2018]);
     await testUpdate(content: '''
 const dynamic a = 2;
@@ -32,22 +32,22 @@
 ''', to: '^2.2.2');
   }
 
-  test_boolOperator() async {
+  Future<void> test_boolOperator() async {
     createAnalysisOptionsFile(experiments: [EnableString.constant_update_2018]);
     await testUpdate(content: '''
 const c = true & false;
 ''', to: '^2.2.2');
   }
 
-  test_caret() async {
+  Future<void> test_caret() async {
     await testUpdate(from: '^2.0.0', to: '^2.1.0');
   }
 
-  test_compound() async {
+  Future<void> test_compound() async {
     await testUpdate(from: "'>=2.0.0 <3.0.0'", to: "'>=2.1.0 <3.0.0'");
   }
 
-  test_eqEqOperatorInConstContext() async {
+  Future<void> test_eqEqOperatorInConstContext() async {
     await testUpdate(content: '''
 class A {
   const A();
@@ -57,15 +57,15 @@
 ''', to: '^2.2.2');
   }
 
-  test_gt() async {
+  Future<void> test_gt() async {
     await testUpdate(from: "'>2.0.0'", to: "'>=2.1.0'");
   }
 
-  test_gte() async {
+  Future<void> test_gte() async {
     await testUpdate(from: "'>=2.0.0'", to: "'>=2.1.0'");
   }
 
-  test_gtGtGtOperator() async {
+  Future<void> test_gtGtGtOperator() async {
     createAnalysisOptionsFile(experiments: [EnableString.triple_shift]);
     await testUpdate(content: '''
 class C {
@@ -74,7 +74,7 @@
 ''', to: '^2.2.2');
   }
 
-  test_isInConstContext() async {
+  Future<void> test_isInConstContext() async {
     createAnalysisOptionsFile(experiments: [EnableString.constant_update_2018]);
     await testUpdate(content: '''
 const a = 0;
@@ -82,13 +82,14 @@
 ''', to: '^2.2.2');
   }
 
-  test_setLiteral() async {
+  Future<void> test_setLiteral() async {
     await testUpdate(content: '''
 var s = <int>{};
 ''', to: '^2.2.0');
   }
 
-  testUpdate({String content, String from = '^2.0.0', String to}) async {
+  Future<void> testUpdate(
+      {String content, String from = '^2.0.0', String to}) async {
     updateTestPubspecFile('''
 environment:
   sdk: $from
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_const_test.dart
index 9ac1952..fca39ddf 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_const_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseConstTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.USE_CONST;
 
-  test_explicitNew() async {
+  Future<void> test_explicitNew() async {
     await resolveTestUnit('''
 class A {
   const A();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart
index 770f505..d47bc80 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart
@@ -8,7 +8,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseEffectiveIntegerDivisionTest);
   });
@@ -19,7 +19,7 @@
   @override
   FixKind get kind => DartFixKind.USE_EFFECTIVE_INTEGER_DIVISION;
 
-  test_normalDivision() async {
+  Future<void> test_normalDivision() async {
     await resolveTestUnit('''
 main() {
   var a = 5;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart
index de6b873..c2203bb 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseEqEqNullTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.USE_EQ_EQ_NULL;
 
-  test_isNull() async {
+  Future<void> test_isNull() async {
     await resolveTestUnit('''
 main(p) {
   p is Null;
@@ -33,7 +33,7 @@
 ''');
   }
 
-  test_isNull_all() async {
+  Future<void> test_isNull_all() async {
     await resolveTestUnit('''
 main(p, q) {
   p is Null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_is_not_empty_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_is_not_empty_test.dart
index b2e3bec..b413b49 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_is_not_empty_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_is_not_empty_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseIsNotEmptyTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_is_not_empty;
 
-  test_notIsEmpty() async {
+  Future<void> test_notIsEmpty() async {
     await resolveTestUnit('''
 f(c) {
   if (/*LINT*/!c.isEmpty) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart
index 3fdd82a..f4c8590 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseNotEqNullTest);
   });
@@ -20,7 +20,7 @@
   @override
   FixKind get kind => DartFixKind.USE_NOT_EQ_NULL;
 
-  test_isNotNull() async {
+  Future<void> test_isNotNull() async {
     await resolveTestUnit('''
 main(p) {
   p is! Null;
@@ -33,7 +33,7 @@
 ''');
   }
 
-  test_isNotNull_all() async {
+  Future<void> test_isNotNull_all() async {
     await resolveTestUnit('''
 main(p, q) {
   p is! Null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_rethrow_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_rethrow_test.dart
index 6ad46df..9a4eb7a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_rethrow_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_rethrow_test.dart
@@ -9,7 +9,7 @@
 
 import 'fix_processor.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseRethrowTest);
   });
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.use_rethrow_when_possible;
 
-  test_rethrow() async {
+  Future<void> test_rethrow() async {
     await resolveTestUnit('''
 void bad1() {
   try {} catch (e) {
diff --git a/pkg/analysis_server/test/src/services/correction/test_all.dart b/pkg/analysis_server/test/src/services/correction/test_all.dart
index 7c6c49d..abc5ddb 100644
--- a/pkg/analysis_server/test/src/services/correction/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/test_all.dart
@@ -7,7 +7,7 @@
 import 'assist/test_all.dart' as assist_all;
 import 'fix/test_all.dart' as fix_all;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     assist_all.main();
     fix_all.main();
diff --git a/pkg/analysis_server/test/src/services/flutter/container_properties_test.dart b/pkg/analysis_server/test/src/services/flutter/container_properties_test.dart
index 6968e64..5947dcc 100644
--- a/pkg/analysis_server/test/src/services/flutter/container_properties_test.dart
+++ b/pkg/analysis_server/test/src/services/flutter/container_properties_test.dart
@@ -9,7 +9,7 @@
 import 'constants.dart';
 import 'widget_description.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ContainerPropertiesTest);
     defineReflectiveTests(ContainerPropertyAlignmentTest);
@@ -19,7 +19,7 @@
 
 @reflectiveTest
 class ContainerPropertiesTest extends WidgetDescriptionBase {
-  test_container_existing() async {
+  Future<void> test_container_existing() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -48,7 +48,7 @@
     expect(childrenNames, isNot(contains('child')));
   }
 
-  test_container_virtual() async {
+  Future<void> test_container_virtual() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -81,7 +81,7 @@
 
 @reflectiveTest
 class ContainerPropertyAlignmentTest extends WidgetDescriptionBase {
-  test_read_hasAlign_notSimple() async {
+  Future<void> test_read_hasAlign_notSimple() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -98,7 +98,7 @@
     expect(alignmentProperty.expression, isNull);
   }
 
-  test_read_hasAlign_simple() async {
+  Future<void> test_read_hasAlign_simple() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -130,7 +130,7 @@
 ''');
   }
 
-  test_read_hasContainer() async {
+  Future<void> test_read_hasContainer() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -162,7 +162,7 @@
 ''');
   }
 
-  test_read_hasContainer_directional() async {
+  Future<void> test_read_hasContainer_directional() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -194,7 +194,7 @@
 ''');
   }
 
-  test_write_hasAlign_change() async {
+  Future<void> test_write_hasAlign_change() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -226,7 +226,7 @@
 ''');
   }
 
-  test_write_hasAlign_remove() async {
+  Future<void> test_write_hasAlign_remove() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -255,7 +255,7 @@
 ''');
   }
 
-  test_write_hasContainer_add() async {
+  Future<void> test_write_hasContainer_add() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -286,7 +286,7 @@
 ''');
   }
 
-  test_write_hasContainer_change() async {
+  Future<void> test_write_hasContainer_change() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -318,7 +318,7 @@
 ''');
   }
 
-  test_write_hasContainer_remove() async {
+  Future<void> test_write_hasContainer_remove() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -347,7 +347,7 @@
 ''');
   }
 
-  test_write_hasPadding_add() async {
+  Future<void> test_write_hasPadding_add() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -380,7 +380,7 @@
 ''');
   }
 
-  test_write_noContainer_add() async {
+  Future<void> test_write_noContainer_add() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -437,7 +437,7 @@
 
 @reflectiveTest
 class ContainerPropertyPaddingTest extends WidgetDescriptionBase {
-  test_read_hasContainer_all() async {
+  Future<void> test_read_hasContainer_all() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -515,7 +515,7 @@
 ''');
   }
 
-  test_read_hasContainer_fromLTRB() async {
+  Future<void> test_read_hasContainer_fromLTRB() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -593,7 +593,7 @@
 ''');
   }
 
-  test_read_hasContainer_only() async {
+  Future<void> test_read_hasContainer_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -663,7 +663,7 @@
 ''');
   }
 
-  test_read_hasContainer_symmetric() async {
+  Future<void> test_read_hasContainer_symmetric() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -741,7 +741,7 @@
 ''');
   }
 
-  test_read_hasPadding_only() async {
+  Future<void> test_read_hasPadding_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -811,7 +811,7 @@
 ''');
   }
 
-  test_write_hasAlign_add_only() async {
+  Future<void> test_write_hasAlign_add_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -845,7 +845,7 @@
 ''');
   }
 
-  test_write_hasContainer_add_only() async {
+  Future<void> test_write_hasContainer_add_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -877,7 +877,7 @@
 ''');
   }
 
-  test_write_hasContainer_change_all() async {
+  Future<void> test_write_hasContainer_change_all() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -910,7 +910,7 @@
 ''');
   }
 
-  test_write_hasContainer_change_only() async {
+  Future<void> test_write_hasContainer_change_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -943,7 +943,7 @@
 ''');
   }
 
-  test_write_hasContainer_change_remove() async {
+  Future<void> test_write_hasContainer_change_remove() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -975,7 +975,7 @@
 ''');
   }
 
-  test_write_hasContainer_change_symmetric_both() async {
+  Future<void> test_write_hasContainer_change_symmetric_both() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -1008,7 +1008,7 @@
 ''');
   }
 
-  test_write_hasContainer_change_symmetric_horizontal() async {
+  Future<void> test_write_hasContainer_change_symmetric_horizontal() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -1041,7 +1041,7 @@
 ''');
   }
 
-  test_write_hasContainer_change_symmetric_vertical() async {
+  Future<void> test_write_hasContainer_change_symmetric_vertical() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -1074,7 +1074,7 @@
 ''');
   }
 
-  test_write_hasPadding_change_only() async {
+  Future<void> test_write_hasPadding_change_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -1107,7 +1107,7 @@
 ''');
   }
 
-  test_write_noContainer_add_only() async {
+  Future<void> test_write_noContainer_add_only() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
diff --git a/pkg/analysis_server/test/src/services/flutter/test_all.dart b/pkg/analysis_server/test/src/services/flutter/test_all.dart
index 935e759..c35d704 100644
--- a/pkg/analysis_server/test/src/services/flutter/test_all.dart
+++ b/pkg/analysis_server/test/src/services/flutter/test_all.dart
@@ -7,7 +7,7 @@
 import 'container_properties_test.dart' as container_properties;
 import 'widget_descriptions_test.dart' as widget_descriptions;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     container_properties.main();
     widget_descriptions.main();
diff --git a/pkg/analysis_server/test/src/services/flutter/widget_descriptions_test.dart b/pkg/analysis_server/test/src/services/flutter/widget_descriptions_test.dart
index 980d4b4..4fcb4b3 100644
--- a/pkg/analysis_server/test/src/services/flutter/widget_descriptions_test.dart
+++ b/pkg/analysis_server/test/src/services/flutter/widget_descriptions_test.dart
@@ -8,7 +8,7 @@
 
 import 'widget_description.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetDescriptionTest);
     defineReflectiveTests(SetPropertyValueSelfTest);
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class GetDescriptionTest extends WidgetDescriptionBase {
-  test_kind_named_notSet() async {
+  Future<void> test_kind_named_notSet() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -40,7 +40,7 @@
 ''');
   }
 
-  test_kind_named_set() async {
+  Future<void> test_kind_named_set() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -67,7 +67,7 @@
 ''');
   }
 
-  test_kind_required() async {
+  Future<void> test_kind_required() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -94,7 +94,7 @@
 ''');
   }
 
-  test_nested_notSet() async {
+  Future<void> test_nested_notSet() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -118,7 +118,7 @@
 ''');
   }
 
-  test_nested_set() async {
+  Future<void> test_nested_set() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -171,7 +171,7 @@
 ''');
   }
 
-  test_notInstanceCreation() async {
+  Future<void> test_notInstanceCreation() async {
     await resolveTestUnit('''
 void main() {
   42;
@@ -181,7 +181,7 @@
     expect(description, isNull);
   }
 
-  test_type_double() async {
+  Future<void> test_type_double() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -203,7 +203,7 @@
 ''');
   }
 
-  test_type_enum() async {
+  Future<void> test_type_enum() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -261,7 +261,7 @@
 ''');
   }
 
-  test_type_int() async {
+  Future<void> test_type_int() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -283,7 +283,7 @@
 ''');
   }
 
-  test_unresolvedInstanceCreation() async {
+  Future<void> test_unresolvedInstanceCreation() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 void main() {
@@ -297,7 +297,7 @@
 
 @reflectiveTest
 class SetPropertyValueSelfTest extends WidgetDescriptionBase {
-  test_expression() async {
+  Future<void> test_expression() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -321,7 +321,7 @@
 ''');
   }
 
-  test_expression_formatError() async {
+  Future<void> test_expression_formatError() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -344,7 +344,7 @@
     expect(result.change, isNull);
   }
 
-  test_format_dontFormatOther() async {
+  Future<void> test_format_dontFormatOther() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -387,7 +387,7 @@
 ''');
   }
 
-  test_invalidId() async {
+  Future<void> test_invalidId() async {
     await resolveTestUnit('');
 
     var result = await descriptions.setPropertyValue(42, null);
@@ -399,7 +399,7 @@
     expect(result.change, isNull);
   }
 
-  test_named_addValue_beforeChild() async {
+  Future<void> test_named_addValue_beforeChild() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -436,7 +436,7 @@
 ''');
   }
 
-  test_named_addValue_beforeChildren() async {
+  Future<void> test_named_addValue_beforeChildren() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -473,7 +473,7 @@
 ''');
   }
 
-  test_named_addValue_hasComma() async {
+  Future<void> test_named_addValue_hasComma() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -500,7 +500,7 @@
 ''');
   }
 
-  test_named_addValue_noComma() async {
+  Future<void> test_named_addValue_noComma() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -527,7 +527,7 @@
 ''');
   }
 
-  test_named_addValue_sortedByName_first() async {
+  Future<void> test_named_addValue_sortedByName_first() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -564,7 +564,7 @@
 ''');
   }
 
-  test_named_addValue_sortedByName_last() async {
+  Future<void> test_named_addValue_sortedByName_last() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -601,7 +601,7 @@
 ''');
   }
 
-  test_named_addValue_sortedByName_middle() async {
+  Future<void> test_named_addValue_sortedByName_middle() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -640,7 +640,7 @@
 ''');
   }
 
-  test_named_changeValue() async {
+  Future<void> test_named_changeValue() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -664,7 +664,7 @@
 ''');
   }
 
-  test_named_removeValue_last() async {
+  Future<void> test_named_removeValue_last() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -685,7 +685,7 @@
 ''');
   }
 
-  test_named_removeValue_notLast() async {
+  Future<void> test_named_removeValue_notLast() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -706,7 +706,7 @@
 ''');
   }
 
-  test_nested_addValue() async {
+  Future<void> test_nested_addValue() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -737,7 +737,7 @@
 ''');
   }
 
-  test_nested_addValue_materialize() async {
+  Future<void> test_nested_addValue_materialize() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -768,7 +768,7 @@
 ''');
   }
 
-  test_required_changeValue() async {
+  Future<void> test_required_changeValue() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -792,7 +792,7 @@
 ''');
   }
 
-  test_required_removeValue() async {
+  Future<void> test_required_removeValue() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
@@ -811,7 +811,7 @@
     expect(result.change, isNull);
   }
 
-  test_type_enum_addValue() async {
+  Future<void> test_type_enum_addValue() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 
diff --git a/pkg/analysis_server/test/src/services/test_all.dart b/pkg/analysis_server/test/src/services/test_all.dart
index cc3293f..a2c9b81 100644
--- a/pkg/analysis_server/test/src/services/test_all.dart
+++ b/pkg/analysis_server/test/src/services/test_all.dart
@@ -7,7 +7,7 @@
 import 'correction/test_all.dart' as correction_all;
 import 'flutter/test_all.dart' as flutter_all;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     correction_all.main();
     flutter_all.main();
diff --git a/pkg/analysis_server/test/src/test_all.dart b/pkg/analysis_server/test/src/test_all.dart
index fa37c50..85107e0 100644
--- a/pkg/analysis_server/test/src/test_all.dart
+++ b/pkg/analysis_server/test/src/test_all.dart
@@ -14,10 +14,7 @@
 import 'services/test_all.dart' as services;
 import 'utilities/test_all.dart' as utilities;
 
-/**
- * Utility for manually running all tests.
- */
-main() {
+void main() {
   defineReflectiveSuite(() {
     computer.main();
     domain_abstract.main();
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index ee8db5f..1dd384d 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -9,7 +9,7 @@
 
 import '../../abstract_single_unit.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterTest);
   });
@@ -25,7 +25,7 @@
     addFlutterPackage();
   }
 
-  test_getWidgetPresentationText_icon() async {
+  Future<void> test_getWidgetPresentationText_icon() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 var w = const Icon(Icons.book);
@@ -34,7 +34,7 @@
     expect(flutter.getWidgetPresentationText(w), 'Icon(Icons.book)');
   }
 
-  test_getWidgetPresentationText_icon_withoutArguments() async {
+  Future<void> test_getWidgetPresentationText_icon_withoutArguments() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -44,7 +44,7 @@
     expect(flutter.getWidgetPresentationText(w), 'Icon');
   }
 
-  test_getWidgetPresentationText_notWidget() async {
+  Future<void> test_getWidgetPresentationText_notWidget() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 var w = new Object();
@@ -53,7 +53,7 @@
     expect(flutter.getWidgetPresentationText(w), isNull);
   }
 
-  test_getWidgetPresentationText_text() async {
+  Future<void> test_getWidgetPresentationText_text() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 var w = const Text('foo');
@@ -62,7 +62,7 @@
     expect(flutter.getWidgetPresentationText(w), "Text('foo')");
   }
 
-  test_getWidgetPresentationText_text_longText() async {
+  Future<void> test_getWidgetPresentationText_text_longText() async {
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
 var w = const Text('${'abc' * 100}');
@@ -74,7 +74,7 @@
     );
   }
 
-  test_getWidgetPresentationText_text_withoutArguments() async {
+  Future<void> test_getWidgetPresentationText_text_withoutArguments() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -84,7 +84,7 @@
     expect(flutter.getWidgetPresentationText(w), 'Text');
   }
 
-  test_getWidgetPresentationText_unresolved() async {
+  Future<void> test_getWidgetPresentationText_unresolved() async {
     verifyNoTestUnitErrors = false;
     await resolveTestUnit('''
 import 'package:flutter/material.dart';
@@ -94,7 +94,7 @@
     expect(flutter.getWidgetPresentationText(w), isNull);
   }
 
-  test_identifyWidgetExpression_node_instanceCreation() async {
+  Future<void> test_identifyWidgetExpression_node_instanceCreation() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -150,7 +150,7 @@
     }
   }
 
-  test_identifyWidgetExpression_node_invocation() async {
+  Future<void> test_identifyWidgetExpression_node_invocation() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -183,7 +183,7 @@
     }
   }
 
-  test_identifyWidgetExpression_node_namedExpression() async {
+  Future<void> test_identifyWidgetExpression_node_namedExpression() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -197,7 +197,8 @@
     expect(flutter.identifyWidgetExpression(childExpression), isNull);
   }
 
-  test_identifyWidgetExpression_node_prefixedIdentifier_identifier() async {
+  Future<void>
+      test_identifyWidgetExpression_node_prefixedIdentifier_identifier() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -213,7 +214,8 @@
     expect(flutter.identifyWidgetExpression(bar), bar.parent);
   }
 
-  test_identifyWidgetExpression_node_prefixedIdentifier_prefix() async {
+  Future<void>
+      test_identifyWidgetExpression_node_prefixedIdentifier_prefix() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -229,7 +231,7 @@
     expect(flutter.identifyWidgetExpression(foo), foo.parent);
   }
 
-  test_identifyWidgetExpression_node_simpleIdentifier() async {
+  Future<void> test_identifyWidgetExpression_node_simpleIdentifier() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -241,7 +243,7 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_null() async {
+  Future<void> test_identifyWidgetExpression_null() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -264,7 +266,7 @@
     }
   }
 
-  test_identifyWidgetExpression_parent_argumentList() async {
+  Future<void> test_identifyWidgetExpression_parent_argumentList() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -279,7 +281,8 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_parent_assignmentExpression() async {
+  Future<void>
+      test_identifyWidgetExpression_parent_assignmentExpression() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -309,7 +312,8 @@
     }
   }
 
-  test_identifyWidgetExpression_parent_conditionalExpression() async {
+  Future<void>
+      test_identifyWidgetExpression_parent_conditionalExpression() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -324,7 +328,8 @@
     expect(flutter.identifyWidgetExpression(elseWidget), elseWidget);
   }
 
-  test_identifyWidgetExpression_parent_expressionFunctionBody() async {
+  Future<void>
+      test_identifyWidgetExpression_parent_expressionFunctionBody() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -334,7 +339,8 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_parent_expressionStatement() async {
+  Future<void>
+      test_identifyWidgetExpression_parent_expressionStatement() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -346,7 +352,7 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_parent_forElement() async {
+  Future<void> test_identifyWidgetExpression_parent_forElement() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -362,7 +368,7 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_parent_ifElement() async {
+  Future<void> test_identifyWidgetExpression_parent_ifElement() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -384,7 +390,7 @@
     expect(flutter.identifyWidgetExpression(elseExpression), elseExpression);
   }
 
-  test_identifyWidgetExpression_parent_listLiteral() async {
+  Future<void> test_identifyWidgetExpression_parent_listLiteral() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -396,7 +402,7 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_parent_namedExpression() async {
+  Future<void> test_identifyWidgetExpression_parent_namedExpression() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -411,7 +417,7 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_identifyWidgetExpression_parent_returnStatement() async {
+  Future<void> test_identifyWidgetExpression_parent_returnStatement() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -423,7 +429,7 @@
     expect(flutter.identifyWidgetExpression(expression), expression);
   }
 
-  test_isWidget() async {
+  Future<void> test_isWidget() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -449,7 +455,7 @@
     expect(flutter.isWidget(notWidget), isFalse);
   }
 
-  test_isWidgetCreation() async {
+  Future<void> test_isWidgetCreation() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
@@ -465,7 +471,7 @@
     expect(flutter.isWidgetCreation(b), isTrue);
   }
 
-  test_isWidgetExpression() async {
+  Future<void> test_isWidgetExpression() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
 
diff --git a/pkg/analysis_server/test/src/utilities/profiling_test.dart b/pkg/analysis_server/test/src/utilities/profiling_test.dart
index ccc4c22..a846dd1 100644
--- a/pkg/analysis_server/test/src/utilities/profiling_test.dart
+++ b/pkg/analysis_server/test/src/utilities/profiling_test.dart
@@ -7,7 +7,7 @@
 import 'package:analysis_server/src/utilities/profiling.dart';
 import 'package:test/test.dart';
 
-main() {
+void main() {
   group('ProcessProfiler', () {
     // Skip on windows.
     if (Platform.isWindows) {
diff --git a/pkg/analysis_server/test/src/utilities/strings_test.dart b/pkg/analysis_server/test/src/utilities/strings_test.dart
index d1c51f4..0a7ce0d 100644
--- a/pkg/analysis_server/test/src/utilities/strings_test.dart
+++ b/pkg/analysis_server/test/src/utilities/strings_test.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart' hide isEmpty;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StringsTest);
   });
@@ -31,7 +31,7 @@
   }
 
   void test_computeSimpleDiff() {
-    assertDiff(String oldStr, String newStr) {
+    void assertDiff(String oldStr, String newStr) {
       SimpleDiff diff = computeSimpleDiff(oldStr, newStr);
       expect(diff.offset, isNonNegative);
       expect(diff.length, isNonNegative);
diff --git a/pkg/analysis_server/test/src/utilities/test_all.dart b/pkg/analysis_server/test/src/utilities/test_all.dart
index 1bfac03..a9cd96e 100644
--- a/pkg/analysis_server/test/src/utilities/test_all.dart
+++ b/pkg/analysis_server/test/src/utilities/test_all.dart
@@ -8,7 +8,7 @@
 import 'profiling_test.dart' as profiling_test;
 import 'strings_test.dart' as strings_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     flutter_test.main();
     profiling_test.main();
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 684a67b..e114f0d 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -290,7 +290,7 @@
   final List<SimpleIdentifier> identifiers = <SimpleIdentifier>[];
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     identifiers.add(node);
   }
 }
diff --git a/pkg/analysis_server/test/test_all.dart b/pkg/analysis_server/test/test_all.dart
index 9d87caa..9ed34eb 100644
--- a/pkg/analysis_server/test/test_all.dart
+++ b/pkg/analysis_server/test/test_all.dart
@@ -29,7 +29,7 @@
 import 'tool/test_all.dart' as tool;
 import 'verify_tests_test.dart' as verify_tests;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     analysis.main();
     analysis_server.main();
@@ -62,7 +62,7 @@
 
 @reflectiveTest
 class SpecTest {
-  test_specHasBeenGenerated() {
+  void test_specHasBeenGenerated() {
     check_spec.main();
   }
 }
diff --git a/pkg/analysis_server/test/tool/lsp_spec/dart_test.dart b/pkg/analysis_server/test/tool/lsp_spec/dart_test.dart
index 7a4f91e..9a3d26f 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/dart_test.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/dart_test.dart
@@ -6,7 +6,7 @@
 
 import '../../../tool/lsp_spec/typescript_parser.dart' as ast;
 
-main() {
+void main() {
   group('dartType mapping', () {
     test('handles basic types', () {
       expect(_simple('string').dartType, equals('String'));
diff --git a/pkg/analysis_server/test/tool/lsp_spec/json_test.dart b/pkg/analysis_server/test/tool/lsp_spec/json_test.dart
index 0ec2b14..37450f5 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/json_test.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/json_test.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/lsp/json_parsing.dart';
 import 'package:test/test.dart';
 
-main() {
+void main() {
   group('toJson', () {
     test('returns correct JSON for a union', () {
       final _num = Either2.t1(1);
diff --git a/pkg/analysis_server/test/tool/lsp_spec/markdown_test.dart b/pkg/analysis_server/test/tool/lsp_spec/markdown_test.dart
index 23afaca..834617f 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/markdown_test.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/markdown_test.dart
@@ -6,7 +6,7 @@
 
 import '../../../tool/lsp_spec/markdown.dart';
 
-main() {
+void main() {
   group('markdown parser', () {
     test('extracts a typescript fenced block from Markdown', () {
       final String input = '''
diff --git a/pkg/analysis_server/test/tool/lsp_spec/test_all.dart b/pkg/analysis_server/test/tool/lsp_spec/test_all.dart
index 1edfb80..1717817 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/test_all.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/test_all.dart
@@ -9,7 +9,7 @@
 import 'markdown_test.dart' as markdown_test;
 import 'typescript_test.dart' as typescript_test;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     dart_test.main();
     json_test.main();
diff --git a/pkg/analysis_server/test/tool/lsp_spec/typescript_test.dart b/pkg/analysis_server/test/tool/lsp_spec/typescript_test.dart
index e3e874e..9464b50 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/typescript_test.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/typescript_test.dart
@@ -7,7 +7,7 @@
 import '../../../tool/lsp_spec/typescript_parser.dart';
 import 'matchers.dart';
 
-main() {
+void main() {
   group('typescript parser', () {
     test('parses an interface', () {
       final String input = '''
diff --git a/pkg/analysis_server/test/tool/test_all.dart b/pkg/analysis_server/test/tool/test_all.dart
index 8f79e7d..e70aa9b 100644
--- a/pkg/analysis_server/test/tool/test_all.dart
+++ b/pkg/analysis_server/test/tool/test_all.dart
@@ -6,7 +6,7 @@
 
 import 'lsp_spec/test_all.dart' as lsp_spec;
 
-main() {
+void main() {
   defineReflectiveSuite(() {
     lsp_spec.main();
   }, name: 'tool');
diff --git a/pkg/analysis_server/test/verify_tests_test.dart b/pkg/analysis_server/test/verify_tests_test.dart
index d84d489..73ad1dc 100644
--- a/pkg/analysis_server/test/verify_tests_test.dart
+++ b/pkg/analysis_server/test/verify_tests_test.dart
@@ -14,7 +14,7 @@
 
 import 'utils/package_root.dart' as package_root;
 
-main() {
+void main() {
   PhysicalResourceProvider provider = PhysicalResourceProvider.INSTANCE;
   String packageRoot = provider.pathContext.normalize(package_root.packageRoot);
   String analysisServerPath =
diff --git a/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart b/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
index 629549a..e3cbbcb 100644
--- a/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
+++ b/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
@@ -14,17 +14,20 @@
 import 'package:analysis_server/src/status/pages.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
+import 'package:analyzer/error/error.dart' as err;
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/services/available_declarations.dart';
 
 import 'metrics_util.dart';
+import 'relevance_analyzers.dart';
 import 'visitors.dart';
 
 // TODO(jwren) have the analysis root and verbose option be configurable via a
 //  command line UX
-main() async {
+Future<void> main() async {
   await CompletionMetricsComputer('', true).computeCompletionMetrics();
 }
 
@@ -39,11 +42,14 @@
   /// stdout.
   final bool _verbose;
 
+  final RelevanceAnalyzer _relevanceAnalyzer = null;
+
   CompletionMetricsComputer(this._rootPath, this._verbose);
 
   Future computeCompletionMetrics() async {
     int includedCount = 0;
     int notIncludedCount = 0;
+    var completionMissedTokenCounter = Counter('missing completion counter');
     var completionKindCounter = Counter('completion kind counter');
     var completionElementKindCounter =
         Counter('completion element kind counter');
@@ -75,8 +81,18 @@
           try {
             final resolvedUnitResult =
                 await context.currentSession.getResolvedUnit(filePath);
-            final visitor = ExpectedCompletionsVisitor();
 
+            var error = _getFirstErrorOrNull(resolvedUnitResult);
+            if (error != null) {
+              print('File $filePath skipped due to errors such as:');
+              print('  ${error.toString()}');
+              print('');
+              continue;
+            }
+
+            // Use the ExpectedCompletionsVisitor to compute the set of expected
+            // completions for this CompilationUnit.
+            final visitor = ExpectedCompletionsVisitor();
             resolvedUnitResult.unit.accept(visitor);
 
             for (var expectedCompletion in visitor.expectedCompletions) {
@@ -90,11 +106,15 @@
 
               mRRComputer.addReciprocalRank(place);
 
+              _relevanceAnalyzer?.report(expectedCompletion);
+
               if (place.denominator != 0) {
                 includedCount++;
               } else {
                 notIncludedCount++;
 
+                completionMissedTokenCounter
+                    .count(expectedCompletion.completion);
                 completionKindCounter.count(expectedCompletion.kind.toString());
                 completionElementKindCounter
                     .count(expectedCompletion.elementKind.toString());
@@ -122,6 +142,9 @@
     final percentIncluded = includedCount / totalCompletionCount;
     final percentNotIncluded = 1 - percentIncluded;
 
+    completionMissedTokenCounter.printCounterValues();
+    print('');
+
     completionKindCounter.printCounterValues();
     print('');
 
@@ -140,9 +163,13 @@
 
     includedCount = 0;
     notIncludedCount = 0;
+    completionMissedTokenCounter.clear();
     completionKindCounter.clear();
     completionElementKindCounter.clear();
     mRRComputer.clear();
+
+    _relevanceAnalyzer?.printData();
+    _relevanceAnalyzer?.clear();
   }
 
   Future<List<CompletionSuggestion>> _computeCompletionSuggestions(
@@ -185,6 +212,18 @@
     return suggestions;
   }
 
+  /// Given some [ResolvedUnitResult] return the first error of high severity
+  /// if such an error exists, null otherwise.
+  err.AnalysisError _getFirstErrorOrNull(
+      ResolvedUnitResult resolvedUnitResult) {
+    for (var error in resolvedUnitResult.errors) {
+      if (error.severity == Severity.error) {
+        return error;
+      }
+    }
+    return null;
+  }
+
   Place _placementInSuggestionList(List<CompletionSuggestion> suggestions,
       ExpectedCompletion expectedCompletion) {
     var placeCounter = 1;
diff --git a/pkg/analysis_server/tool/completion_metrics/relevance_analyzers.dart b/pkg/analysis_server/tool/completion_metrics/relevance_analyzers.dart
new file mode 100644
index 0000000..ff8fc20
--- /dev/null
+++ b/pkg/analysis_server/tool/completion_metrics/relevance_analyzers.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+
+import 'metrics_util.dart';
+import 'visitors.dart';
+
+abstract class RelevanceAnalyzer {
+  final String _name;
+  final Counter _counter;
+
+  RelevanceAnalyzer(this._name)
+      : _counter = Counter('$_name element kind counter');
+
+  String get name => _name;
+
+  void clear() => _counter.clear();
+
+  bool isApplicable(ExpectedCompletion expectedCompletion);
+
+  void printData() {
+    _counter.printCounterValues();
+  }
+
+  void report(ExpectedCompletion expectedCompletion) {
+    if (isApplicable(expectedCompletion)) {
+      _counter.count(expectedCompletion.elementKind.toString());
+    }
+  }
+}
+
+class RHSOfAsExpression extends RelevanceAnalyzer {
+  RHSOfAsExpression() : super('RHS Of AsExpression');
+
+  @override
+  bool isApplicable(ExpectedCompletion expectedCompletion) {
+    var entity = expectedCompletion.syntacticEntity;
+    if (entity is AstNode) {
+      var asExpression = entity.thisOrAncestorOfType<AsExpression>();
+      if (asExpression != null) {
+        var typeAnnotation = asExpression.type;
+        if (typeAnnotation is TypeName) {
+          return typeAnnotation.name == entity;
+        }
+      }
+    }
+    return false;
+  }
+}
diff --git a/pkg/analysis_server/tool/completion_metrics/visitors.dart b/pkg/analysis_server/tool/completion_metrics/visitors.dart
index f1c0f4e..dcb21a8 100644
--- a/pkg/analysis_server/tool/completion_metrics/visitors.dart
+++ b/pkg/analysis_server/tool/completion_metrics/visitors.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart' as element;
 
 class ExpectedCompletion {
   final SyntacticEntity _entity;
@@ -69,7 +70,7 @@
   }
 }
 
-class ExpectedCompletionsVisitor extends RecursiveAstVisitor {
+class ExpectedCompletionsVisitor extends RecursiveAstVisitor<void> {
   final List<ExpectedCompletion> expectedCompletions;
 
   CompilationUnit _enclosingCompilationUnit;
@@ -89,7 +90,7 @@
 
   ExpectedCompletionsVisitor() : expectedCompletions = <ExpectedCompletion>[];
 
-  safelyRecordEntity(SyntacticEntity entity,
+  void safelyRecordEntity(SyntacticEntity entity,
       {protocol.CompletionSuggestionKind kind,
       protocol.ElementKind elementKind}) {
     // Only record if this entity is not null, has a length, etc.
@@ -156,7 +157,7 @@
     }
   }
 
-  safelyRecordKeywordCompletion(SyntacticEntity entity) {
+  void safelyRecordKeywordCompletion(SyntacticEntity entity) {
     if (_doExpectKeywordCompletions) {
       safelyRecordEntity(entity,
           kind: protocol.CompletionSuggestionKind.KEYWORD);
@@ -164,39 +165,39 @@
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node) {
     safelyRecordKeywordCompletion(node.asOperator);
     return super.visitAsExpression(node);
   }
 
   @override
-  visitAwaitExpression(AwaitExpression node) {
+  void visitAwaitExpression(AwaitExpression node) {
     safelyRecordKeywordCompletion(node.awaitKeyword);
     return super.visitAwaitExpression(node);
   }
 
   @override
-  visitBlockFunctionBody(BlockFunctionBody node) {
+  void visitBlockFunctionBody(BlockFunctionBody node) {
     // 'async' | 'async' '*' | 'sync' '*':
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitBlockFunctionBody(node);
   }
 
   @override
-  visitBooleanLiteral(BooleanLiteral node) {
+  void visitBooleanLiteral(BooleanLiteral node) {
     // 'false' | 'true'
     safelyRecordKeywordCompletion(node.literal);
     return super.visitBooleanLiteral(node);
   }
 
   @override
-  visitBreakStatement(BreakStatement node) {
+  void visitBreakStatement(BreakStatement node) {
     safelyRecordKeywordCompletion(node.breakKeyword);
     return super.visitBreakStatement(node);
   }
 
   @override
-  visitCatchClause(CatchClause node) {
+  void visitCatchClause(CatchClause node) {
     // Should we 'catch', it won't be suggested when it already exists as a
     // keyword in the file?
     safelyRecordKeywordCompletion(node.catchKeyword);
@@ -205,33 +206,33 @@
   }
 
   @override
-  visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(ClassDeclaration node) {
     safelyRecordKeywordCompletion(node.abstractKeyword);
     safelyRecordKeywordCompletion(node.classKeyword);
     return super.visitClassDeclaration(node);
   }
 
   @override
-  visitClassTypeAlias(ClassTypeAlias node) {
+  void visitClassTypeAlias(ClassTypeAlias node) {
     safelyRecordKeywordCompletion(node.abstractKeyword);
     safelyRecordKeywordCompletion(node.typedefKeyword);
     return super.visitClassTypeAlias(node);
   }
 
   @override
-  visitCompilationUnit(CompilationUnit node) {
+  void visitCompilationUnit(CompilationUnit node) {
     _enclosingCompilationUnit = node;
     return super.visitCompilationUnit(node);
   }
 
   @override
-  visitConfiguration(Configuration node) {
+  void visitConfiguration(Configuration node) {
     safelyRecordKeywordCompletion(node.ifKeyword);
     return super.visitConfiguration(node);
   }
 
   @override
-  visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
     safelyRecordKeywordCompletion(node.externalKeyword);
     safelyRecordKeywordCompletion(node.constKeyword);
     safelyRecordKeywordCompletion(node.factoryKeyword);
@@ -239,77 +240,77 @@
   }
 
   @override
-  visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
+  void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
     safelyRecordKeywordCompletion(node.thisKeyword);
     return super.visitConstructorFieldInitializer(node);
   }
 
   @override
-  visitContinueStatement(ContinueStatement node) {
+  void visitContinueStatement(ContinueStatement node) {
     safelyRecordKeywordCompletion(node.continueKeyword);
     return super.visitContinueStatement(node);
   }
 
   @override
-  visitDeclaredIdentifier(DeclaredIdentifier node) {
+  void visitDeclaredIdentifier(DeclaredIdentifier node) {
     // 'final', 'const' or 'var'
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitDeclaredIdentifier(node);
   }
 
   @override
-  visitDoStatement(DoStatement node) {
+  void visitDoStatement(DoStatement node) {
     safelyRecordKeywordCompletion(node.doKeyword);
     safelyRecordKeywordCompletion(node.whileKeyword);
     return super.visitDoStatement(node);
   }
 
   @override
-  visitEnumDeclaration(EnumDeclaration node) {
+  void visitEnumDeclaration(EnumDeclaration node) {
     safelyRecordKeywordCompletion(node.enumKeyword);
     return super.visitEnumDeclaration(node);
   }
 
   @override
-  visitExportDirective(ExportDirective node) {
+  void visitExportDirective(ExportDirective node) {
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitExportDirective(node);
   }
 
   @override
-  visitExpressionFunctionBody(ExpressionFunctionBody node) {
+  void visitExpressionFunctionBody(ExpressionFunctionBody node) {
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitExpressionFunctionBody(node);
   }
 
   @override
-  visitExtendsClause(ExtendsClause node) {
+  void visitExtendsClause(ExtendsClause node) {
     safelyRecordKeywordCompletion(node.extendsKeyword);
     return super.visitExtendsClause(node);
   }
 
   @override
-  visitExtensionDeclaration(ExtensionDeclaration node) {
+  void visitExtensionDeclaration(ExtensionDeclaration node) {
     safelyRecordKeywordCompletion(node.extensionKeyword);
     safelyRecordKeywordCompletion(node.onKeyword);
     return super.visitExtensionDeclaration(node);
   }
 
   @override
-  visitExtensionOverride(ExtensionOverride node) {
+  void visitExtensionOverride(ExtensionOverride node) {
     node.visitChildren(this);
     return null;
   }
 
   @override
-  visitFieldDeclaration(FieldDeclaration node) {
+  void visitFieldDeclaration(FieldDeclaration node) {
     safelyRecordKeywordCompletion(node.covariantKeyword);
     safelyRecordKeywordCompletion(node.staticKeyword);
     return super.visitFieldDeclaration(node);
   }
 
   @override
-  visitFieldFormalParameter(FieldFormalParameter node) {
+  void visitFieldFormalParameter(FieldFormalParameter node) {
     // 'final', 'const' or 'var'
     safelyRecordKeywordCompletion(node.keyword);
     safelyRecordKeywordCompletion(node.thisKeyword);
@@ -317,33 +318,33 @@
   }
 
   @override
-  visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
+  void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     safelyRecordKeywordCompletion(node.inKeyword);
     return super.visitForEachPartsWithDeclaration(node);
   }
 
   @override
-  visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
+  void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     safelyRecordKeywordCompletion(node.inKeyword);
     return super.visitForEachPartsWithIdentifier(node);
   }
 
   @override
-  visitForElement(ForElement node) {
+  void visitForElement(ForElement node) {
     safelyRecordKeywordCompletion(node.awaitKeyword);
     safelyRecordKeywordCompletion(node.forKeyword);
     return super.visitForElement(node);
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     safelyRecordKeywordCompletion(node.awaitKeyword);
     safelyRecordKeywordCompletion(node.forKeyword);
     return super.visitForStatement(node);
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     safelyRecordKeywordCompletion(node.externalKeyword);
     // 'get' or 'set':
     safelyRecordKeywordCompletion(node.propertyKeyword);
@@ -351,58 +352,58 @@
   }
 
   @override
-  visitFunctionTypeAlias(FunctionTypeAlias node) {
+  void visitFunctionTypeAlias(FunctionTypeAlias node) {
     safelyRecordKeywordCompletion(node.typedefKeyword);
     return super.visitFunctionTypeAlias(node);
   }
 
   @override
-  visitGenericFunctionType(GenericFunctionType node) {
+  void visitGenericFunctionType(GenericFunctionType node) {
     safelyRecordKeywordCompletion(node.functionKeyword);
     return super.visitGenericFunctionType(node);
   }
 
   @override
-  visitGenericTypeAlias(GenericTypeAlias node) {
+  void visitGenericTypeAlias(GenericTypeAlias node) {
     safelyRecordKeywordCompletion(node.typedefKeyword);
     return super.visitGenericTypeAlias(node);
   }
 
   @override
-  visitHideCombinator(HideCombinator node) {
+  void visitHideCombinator(HideCombinator node) {
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitHideCombinator(node);
   }
 
   @override
-  visitIfElement(IfElement node) {
+  void visitIfElement(IfElement node) {
     safelyRecordKeywordCompletion(node.ifKeyword);
     safelyRecordKeywordCompletion(node.elseKeyword);
     return super.visitIfElement(node);
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  void visitIfStatement(IfStatement node) {
     safelyRecordKeywordCompletion(node.ifKeyword);
     safelyRecordKeywordCompletion(node.elseKeyword);
     return super.visitIfStatement(node);
   }
 
   @override
-  visitImplementsClause(ImplementsClause node) {
+  void visitImplementsClause(ImplementsClause node) {
     safelyRecordKeywordCompletion(node.implementsKeyword);
     return super.visitImplementsClause(node);
   }
 
   @override
-  visitImportDirective(ImportDirective node) {
+  void visitImportDirective(ImportDirective node) {
     safelyRecordKeywordCompletion(node.keyword);
     safelyRecordKeywordCompletion(node.asKeyword);
     return super.visitImportDirective(node);
   }
 
   @override
-  visitInstanceCreationExpression(InstanceCreationExpression node) {
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
     // Here we explicitly do not record 'new' as we don't suggest it in the
     // completion service.
     // https://dart-review.googlesource.com/c/sdk/+/131020
@@ -414,25 +415,25 @@
   }
 
   @override
-  visitIsExpression(IsExpression node) {
+  void visitIsExpression(IsExpression node) {
     safelyRecordKeywordCompletion(node.isOperator);
     return super.visitIsExpression(node);
   }
 
   @override
-  visitLibraryDirective(LibraryDirective node) {
+  void visitLibraryDirective(LibraryDirective node) {
     safelyRecordKeywordCompletion(node.libraryKeyword);
     return super.visitLibraryDirective(node);
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  void visitListLiteral(ListLiteral node) {
     safelyRecordKeywordCompletion(node.constKeyword);
     return super.visitListLiteral(node);
   }
 
   @override
-  visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(MethodDeclaration node) {
     safelyRecordKeywordCompletion(node.externalKeyword);
     safelyRecordKeywordCompletion(node.modifierKeyword);
     safelyRecordKeywordCompletion(node.operatorKeyword);
@@ -441,80 +442,81 @@
   }
 
   @override
-  visitMixinDeclaration(MixinDeclaration node) {
+  void visitMixinDeclaration(MixinDeclaration node) {
     safelyRecordKeywordCompletion(node.mixinKeyword);
     return super.visitMixinDeclaration(node);
   }
 
   @override
-  visitNativeClause(NativeClause node) {
+  void visitNativeClause(NativeClause node) {
     safelyRecordKeywordCompletion(node.nativeKeyword);
     return super.visitNativeClause(node);
   }
 
   @override
-  visitNativeFunctionBody(NativeFunctionBody node) {
+  void visitNativeFunctionBody(NativeFunctionBody node) {
     safelyRecordKeywordCompletion(node.nativeKeyword);
     return super.visitNativeFunctionBody(node);
   }
 
   @override
-  visitNullLiteral(NullLiteral node) {
+  void visitNullLiteral(NullLiteral node) {
     safelyRecordKeywordCompletion(node.literal);
     return super.visitNullLiteral(node);
   }
 
   @override
-  visitOnClause(OnClause node) {
+  void visitOnClause(OnClause node) {
     safelyRecordKeywordCompletion(node.onKeyword);
     return super.visitOnClause(node);
   }
 
   @override
-  visitPartDirective(PartDirective node) {
+  void visitPartDirective(PartDirective node) {
     safelyRecordKeywordCompletion(node.partKeyword);
     return super.visitPartDirective(node);
   }
 
   @override
-  visitPartOfDirective(PartOfDirective node) {
+  void visitPartOfDirective(PartOfDirective node) {
     safelyRecordKeywordCompletion(node.partKeyword);
     safelyRecordKeywordCompletion(node.ofKeyword);
     return super.visitPartOfDirective(node);
   }
 
   @override
-  visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+  void visitRedirectingConstructorInvocation(
+      RedirectingConstructorInvocation node) {
     safelyRecordKeywordCompletion(node.thisKeyword);
     return super.visitRedirectingConstructorInvocation(node);
   }
 
   @override
-  visitRethrowExpression(RethrowExpression node) {
+  void visitRethrowExpression(RethrowExpression node) {
     safelyRecordKeywordCompletion(node.rethrowKeyword);
     return super.visitRethrowExpression(node);
   }
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     safelyRecordKeywordCompletion(node.returnKeyword);
     return super.visitReturnStatement(node);
   }
 
   @override
-  visitSetOrMapLiteral(SetOrMapLiteral node) {
+  void visitSetOrMapLiteral(SetOrMapLiteral node) {
     safelyRecordKeywordCompletion(node.constKeyword);
     return super.visitSetOrMapLiteral(node);
   }
 
   @override
-  visitShowCombinator(ShowCombinator node) {
+  void visitShowCombinator(ShowCombinator node) {
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitShowCombinator(node);
   }
 
   @override
-  visitSimpleFormalParameter(SimpleFormalParameter node) {
+  void visitSimpleFormalParameter(SimpleFormalParameter node) {
     // 'final', 'const' or 'var'
     safelyRecordKeywordCompletion(node.keyword);
     safelyRecordKeywordCompletion(node.covariantKeyword);
@@ -522,7 +524,7 @@
   }
 
   @override
-  visitSimpleIdentifier(SimpleIdentifier node) {
+  void visitSimpleIdentifier(SimpleIdentifier node) {
     if (_doIncludeSimpleIdentifier(node)) {
       var elementKind;
       if (node.staticElement?.kind != null) {
@@ -541,6 +543,14 @@
         if (elementKind == protocol.ElementKind.PREFIX) {
           elementKind = protocol.ElementKind.LIBRARY;
         }
+
+        // For identifiers in a FieldFormalParameter, i.e. the 'foo' in some
+        // ClassName(this.foo), set the elementKind to FIELD which is what the
+        // completion engine does (elementKind before this if statement is a
+        // PARAMETER).
+        if (node.parent is FieldFormalParameter) {
+          elementKind = protocol.ElementKind.FIELD;
+        }
       }
       safelyRecordEntity(node, elementKind: elementKind);
     }
@@ -548,62 +558,62 @@
   }
 
   @override
-  visitSuperConstructorInvocation(SuperConstructorInvocation node) {
+  void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
     safelyRecordKeywordCompletion(node.superKeyword);
     return super.visitSuperConstructorInvocation(node);
   }
 
   @override
-  visitSuperExpression(SuperExpression node) {
+  void visitSuperExpression(SuperExpression node) {
     safelyRecordKeywordCompletion(node.superKeyword);
     return super.visitSuperExpression(node);
   }
 
   @override
-  visitSwitchCase(SwitchCase node) {
+  void visitSwitchCase(SwitchCase node) {
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitSwitchCase(node);
   }
 
   @override
-  visitSwitchDefault(SwitchDefault node) {
+  void visitSwitchDefault(SwitchDefault node) {
     safelyRecordKeywordCompletion(node.keyword);
     return super.visitSwitchDefault(node);
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     safelyRecordKeywordCompletion(node.switchKeyword);
     return super.visitSwitchStatement(node);
   }
 
   @override
-  visitThisExpression(ThisExpression node) {
+  void visitThisExpression(ThisExpression node) {
     safelyRecordKeywordCompletion(node.thisKeyword);
     return super.visitThisExpression(node);
   }
 
   @override
-  visitThrowExpression(ThrowExpression node) {
+  void visitThrowExpression(ThrowExpression node) {
     safelyRecordKeywordCompletion(node.throwKeyword);
     return super.visitThrowExpression(node);
   }
 
   @override
-  visitTryStatement(TryStatement node) {
+  void visitTryStatement(TryStatement node) {
     safelyRecordKeywordCompletion(node.tryKeyword);
     safelyRecordKeywordCompletion(node.finallyKeyword);
     return super.visitTryStatement(node);
   }
 
   @override
-  visitTypeParameter(TypeParameter node) {
+  void visitTypeParameter(TypeParameter node) {
     safelyRecordKeywordCompletion(node.extendsKeyword);
     return super.visitTypeParameter(node);
   }
 
   @override
-  visitVariableDeclarationList(VariableDeclarationList node) {
+  void visitVariableDeclarationList(VariableDeclarationList node) {
     // 'final', 'const' or 'var'
     safelyRecordKeywordCompletion(node.keyword);
     safelyRecordKeywordCompletion(node.lateKeyword);
@@ -611,19 +621,19 @@
   }
 
   @override
-  visitWhileStatement(WhileStatement node) {
+  void visitWhileStatement(WhileStatement node) {
     safelyRecordKeywordCompletion(node.whileKeyword);
     return super.visitWhileStatement(node);
   }
 
   @override
-  visitWithClause(WithClause node) {
+  void visitWithClause(WithClause node) {
     safelyRecordKeywordCompletion(node.withKeyword);
     return super.visitWithClause(node);
   }
 
   @override
-  visitYieldStatement(YieldStatement node) {
+  void visitYieldStatement(YieldStatement node) {
     safelyRecordKeywordCompletion(node.yieldKeyword);
     return super.visitYieldStatement(node);
   }
@@ -639,6 +649,28 @@
     if (node.thisOrAncestorOfType<CommentReference>() != null) {
       return _doExpectCommentRefs;
     }
+
+    // Ignore the SimpleIdentifiers that make up library directives.
+    if (node.thisOrAncestorOfType<LibraryDirective>() != null) {
+      return false;
+    }
+
+    // TODO (jwren) If there is a mode of completing at a token location where
+    //  the token is removed before the completion query happens, then this
+    //  should be disabled in such a case:
+    // Named arguments, i.e. the 'foo' in 'method_call(foo: 1)' should not be
+    // included, by design, the completion engine won't suggest named arguments
+    // already it the source.
+    if (node.staticElement?.kind == element.ElementKind.PARAMETER &&
+        node.parent is Label &&
+        node.thisOrAncestorOfType<ArgumentList>() != null) {
+      return false;
+    }
+
+    // If the type of the SimpleIdentifier is dynamic, don't include.
+    if (node.staticType != null && node.staticType.isDynamic) {
+      return false;
+    }
     return true;
   }
 }
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index 11c69dd..a830ba6 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -9,9 +9,9 @@
 
 final formatter = DartFormatter();
 Map<String, Interface> _interfaces = {};
-Map<String, List<String>> _subtypes = {};
-// TODO(dantup): Rename namespaces -> enums since they're always that now.
 Map<String, Namespace> _namespaces = {};
+// TODO(dantup): Rename namespaces -> enums since they're always that now.
+Map<String, List<String>> _subtypes = {};
 Map<String, TypeAlias> _typeAliases = {};
 
 /// Whether our enum class allows any value (eg. should always return true
@@ -34,6 +34,13 @@
       name != 'ResourceOperationKind';
 }
 
+String generateDartForTypes(List<AstNode> types) {
+  final buffer = IndentableStringBuffer();
+  _getSorted(types).forEach((t) => _writeType(buffer, t));
+  final formattedCode = _formatCode(buffer.toString());
+  return formattedCode.trim() + '\n'; // Ensure a single trailing newline.
+}
+
 void recordTypes(List<AstNode> types) {
   types
       .whereType<TypeAlias>()
@@ -52,13 +59,6 @@
       .forEach((namespace) => _namespaces[namespace.name] = namespace);
 }
 
-String generateDartForTypes(List<AstNode> types) {
-  final buffer = IndentableStringBuffer();
-  _getSorted(types).forEach((t) => _writeType(buffer, t));
-  final formattedCode = _formatCode(buffer.toString());
-  return formattedCode.trim() + '\n'; // Ensure a single trailing newline.
-}
-
 TypeBase resolveTypeAlias(TypeBase type, {resolveEnumClasses = false}) {
   if (type is Type && _typeAliases.containsKey(type.name)) {
     final alias = _typeAliases[type.name];
@@ -179,7 +179,7 @@
       buffer
         ..writeIndentedln("if (!obj.containsKey('${field.name}')) {")
         ..indent()
-        ..writeIndentedln('reporter.reportError("must not be undefined");')
+        ..writeIndentedln("reporter.reportError('must not be undefined');")
         ..writeIndentedln('return false;')
         ..outdent()
         ..writeIndentedln('}');
@@ -188,7 +188,7 @@
       buffer
         ..writeIndentedln("if (obj['${field.name}'] == null) {")
         ..indent()
-        ..writeIndentedln('reporter.reportError("must not be null");')
+        ..writeIndentedln("reporter.reportError('must not be null');")
         ..writeIndentedln('return false;')
         ..outdent()
         ..writeIndentedln('}');
@@ -204,7 +204,7 @@
       ..write(')) {')
       ..indent()
       ..writeIndentedln(
-          'reporter.reportError("must be of type ${field.type.dartTypeWithTypeArgs}");')
+          "reporter.reportError('must be of type ${field.type.dartTypeWithTypeArgs}');")
       ..writeIndentedln('return false;')
       ..outdent()
       ..writeIndentedln('}')
@@ -221,7 +221,7 @@
     ..writeIndentedln('} else {')
     ..indent()
     ..writeIndentedln(
-        'reporter.reportError("must be of type ${interface.nameWithTypeArgs}");')
+        "reporter.reportError('must be of type ${interface.nameWithTypeArgs}');")
     ..writeIndentedln('return false;')
     ..outdent()
     ..writeIndentedln('}')
@@ -266,15 +266,6 @@
   }
 }
 
-void _writeJsonHandler(IndentableStringBuffer buffer, Interface interface) {
-  buffer
-    ..writeIndented('static const jsonHandler = ')
-    ..write('LspJsonHandler(')
-    ..write('${interface.name}.canParse, ${interface.name}.fromJson')
-    ..writeln(');')
-    ..writeln();
-}
-
 void _writeDocCommentsAndAnnotations(
     IndentableStringBuffer buffer, AstNode node) {
   var comment = node.commentText?.trim();
@@ -343,7 +334,7 @@
     ..writeln()
     ..writeIndentedln('@override String toString() => _value.toString();')
     ..writeln()
-    ..writeIndentedln('@override get hashCode => _value.hashCode;')
+    ..writeIndentedln('@override int get hashCode => _value.hashCode;')
     ..writeln()
     ..writeIndentedln(
         'bool operator ==(Object o) => o is ${namespace.name} && o._value == _value;')
@@ -558,6 +549,15 @@
     ..writeln();
 }
 
+void _writeJsonHandler(IndentableStringBuffer buffer, Interface interface) {
+  buffer
+    ..writeIndented('static const jsonHandler = ')
+    ..write('LspJsonHandler(')
+    ..write('${interface.name}.canParse, ${interface.name}.fromJson')
+    ..writeln(');')
+    ..writeln();
+}
+
 void _writeJsonMapAssignment(
     IndentableStringBuffer buffer, Field field, String mapName) {
   // If we are allowed to be undefined, we'll only add the value if set.
@@ -593,29 +593,6 @@
   _getSorted(members).forEach((m) => _writeMember(buffer, m));
 }
 
-void _writeToJsonMethod(IndentableStringBuffer buffer, Interface interface) {
-  // It's important the name we use for the map here isn't in use in the object
-  // already. 'result' was, so we prefix it with some underscores.
-  buffer
-    ..writeIndentedln('Map<String, dynamic> toJson() {')
-    ..indent()
-    ..writeIndentedln('Map<String, dynamic> __result = {};');
-  // ResponseMessage must confirm to JSON-RPC which says only one of
-  // result/error can be included. Since this isn't encoded in the types we
-  // need to special-case it's toJson generation.
-  if (interface.name == 'ResponseMessage') {
-    _writeToJsonFieldsForResponseMessage(buffer, interface);
-  } else {
-    for (var field in _getAllFields(interface)) {
-      _writeJsonMapAssignment(buffer, field, '__result');
-    }
-  }
-  buffer
-    ..writeIndentedln('return __result;')
-    ..outdent()
-    ..writeIndentedln('}');
-}
-
 void _writeToJsonFieldsForResponseMessage(
     IndentableStringBuffer buffer, Interface interface) {
   const mapName = '__result';
@@ -645,6 +622,29 @@
     ..writeIndentedln('}');
 }
 
+void _writeToJsonMethod(IndentableStringBuffer buffer, Interface interface) {
+  // It's important the name we use for the map here isn't in use in the object
+  // already. 'result' was, so we prefix it with some underscores.
+  buffer
+    ..writeIndentedln('Map<String, dynamic> toJson() {')
+    ..indent()
+    ..writeIndentedln('Map<String, dynamic> __result = {};');
+  // ResponseMessage must confirm to JSON-RPC which says only one of
+  // result/error can be included. Since this isn't encoded in the types we
+  // need to special-case it's toJson generation.
+  if (interface.name == 'ResponseMessage') {
+    _writeToJsonFieldsForResponseMessage(buffer, interface);
+  } else {
+    for (var field in _getAllFields(interface)) {
+      _writeJsonMapAssignment(buffer, field, '__result');
+    }
+  }
+  buffer
+    ..writeIndentedln('return __result;')
+    ..outdent()
+    ..writeIndentedln('}');
+}
+
 void _writeToString(IndentableStringBuffer buffer, Interface interface) {
   buffer
     ..writeIndentedln('@override')
diff --git a/pkg/analysis_server/tool/lsp_spec/generate_all.dart b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
index 2155204..9f90859 100644
--- a/pkg/analysis_server/tool/lsp_spec/generate_all.dart
+++ b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
@@ -15,7 +15,7 @@
 import 'typescript.dart';
 import 'typescript_parser.dart';
 
-main(List<String> arguments) async {
+Future<void> main(List<String> arguments) async {
   final args = argParser.parse(arguments);
   if (args[argHelp]) {
     print(argParser.usage);
@@ -182,11 +182,11 @@
 ''';
 
 List<AstNode> getCustomClasses() {
-  interface(String name, List<Member> fields) {
+  Interface interface(String name, List<Member> fields) {
     return Interface(null, Token.identifier(name), [], [], fields);
   }
 
-  field(String name,
+  Field field(String name,
       {String type, array = false, canBeNull = false, canBeUndefined = false}) {
     var fieldType =
         array ? ArrayType(Type.identifier(type)) : Type.identifier(type);
diff --git a/pkg/analysis_server/tool/migration_runner.dart b/pkg/analysis_server/tool/migration_runner.dart
index 581f406..ce974de 100644
--- a/pkg/analysis_server/tool/migration_runner.dart
+++ b/pkg/analysis_server/tool/migration_runner.dart
@@ -34,7 +34,7 @@
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
-main(List<String> args) async {
+Future<void> main(List<String> args) async {
   if (args.length != 2) {
     throw StateError(
         'Exactly two arguments are required: the path to a JSON configuration '
diff --git a/pkg/analysis_server/tool/nnbd_migration/generate_resources.dart b/pkg/analysis_server/tool/nnbd_migration/generate_resources.dart
new file mode 100644
index 0000000..7e8fc56
--- /dev/null
+++ b/pkg/analysis_server/tool/nnbd_migration/generate_resources.dart
@@ -0,0 +1,105 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This script generates the
+// lib/src/edit/nnbd_migration/resources/resources.g.dart file from the contents
+// of the lib/src/edit/nnbd_migration/resources directory.
+
+import 'dart:convert';
+import 'dart:io';
+import 'dart:math' as math;
+
+import 'package:path/path.dart' as path;
+
+void main(List<String> args) {
+  if (FileSystemEntity.isFileSync(
+      path.join('tool', 'nnbd_migration', 'generate_resources.dart'))) {
+    // We're running from the project root - cd up two directories.
+    Directory.current = Directory.current.parent.parent;
+  } else if (!FileSystemEntity.isDirectorySync(
+      path.join('pkg', 'analysis_server'))) {
+    fail('Please run this tool from the root of the sdk repo.');
+  }
+
+  Directory resourceDir = Directory(path.join('pkg', 'analysis_server', 'lib',
+      'src', 'edit', 'nnbd_migration', 'resources'));
+
+  String content = generateResourceFile(resourceDir.listSync().where((entity) {
+    String name = path.basename(entity.path);
+    return entity is File && (name.endsWith('.js') || name.endsWith('.css'));
+  }).cast<File>());
+
+  // write the content
+  File resourcesFile = File(path.join('pkg', 'analysis_server', 'lib', 'src',
+      'edit', 'nnbd_migration', 'resources', 'resources.g.dart'));
+  resourcesFile.writeAsStringSync(content);
+}
+
+String generateResourceFile(Iterable<File> resources) {
+  String filePath = path.relative(Platform.script.toFilePath());
+  StringBuffer buf = StringBuffer('''
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file is generated; don't edit it directly.
+//
+// See $filePath for how
+// to edit the source content and for re-generation instructions.
+
+import 'dart:convert' as convert;
+''');
+
+  for (File resource in resources) {
+    String name = path.basename(resource.path).replaceAll('.', '_');
+    buf.writeln();
+    buf.writeln('String get $name {');
+    buf.writeln('  return _$name ??= _decode(_${name}_base64);');
+    buf.writeln('}');
+  }
+
+  buf.writeln(r'''
+
+String _decode(String data) {
+  data = data.replaceAll('\n', '').trim();
+  return String.fromCharCodes(convert.base64Decode(data));
+}''');
+
+  for (File resource in resources) {
+    String name = path.basename(resource.path).replaceAll('.', '_');
+    String source = resource.readAsStringSync();
+
+    String delimiter = "'''";
+
+    buf.writeln();
+    buf.writeln('String _$name;');
+    buf.writeln('String _${name}_base64 = $delimiter');
+    buf.writeln(base64Encode(source.codeUnits));
+    buf.writeln('$delimiter;');
+  }
+
+  return buf.toString();
+}
+
+String base64Encode(List<int> bytes) {
+  String encoded = base64.encode(bytes);
+
+  // Logic to cut lines into 80-character chunks
+  // – makes for prettier source code
+  var lines = <String>[];
+  var index = 0;
+
+  while (index < encoded.length) {
+    var line = encoded.substring(index, math.min(index + 80, encoded.length));
+    lines.add(line);
+    index += line.length;
+  }
+
+  return lines.join('\n');
+}
+
+void fail(String message) {
+  stderr.writeln(message);
+  exit(1);
+}
diff --git a/pkg/analysis_server/tool/spec/api.dart b/pkg/analysis_server/tool/spec/api.dart
index c21cb15..bbe6bd3 100644
--- a/pkg/analysis_server/tool/spec/api.dart
+++ b/pkg/analysis_server/tool/spec/api.dart
@@ -56,7 +56,7 @@
   /**
    * Dispatch the given [type] to the visitor.
    */
-  T visitTypeDecl(TypeDecl type) => type.accept(this) as T;
+  T visitTypeDecl(TypeDecl type) => type.accept(this);
   T visitTypeEnum(TypeEnum typeEnum);
   T visitTypeList(TypeList typeList);
   T visitTypeMap(TypeMap typeMap);
@@ -347,7 +347,7 @@
   TypeDecl(dom.Element html, bool experimental, bool deprecated)
       : super(html, experimental, deprecated);
 
-  accept(ApiVisitor visitor);
+  T accept<T>(ApiVisitor<T> visitor);
 }
 
 /**
@@ -375,7 +375,7 @@
       : super(html, experimental, deprecated);
 
   @override
-  accept(ApiVisitor visitor) => visitor.visitTypeEnum(this);
+  T accept<T>(ApiVisitor<T> visitor) => visitor.visitTypeEnum(this);
 }
 
 /**
@@ -399,7 +399,7 @@
       : super(html, experimental, false);
 
   @override
-  accept(ApiVisitor visitor) => visitor.visitTypeList(this);
+  T accept<T>(ApiVisitor<T> visitor) => visitor.visitTypeList(this);
 }
 
 /**
@@ -422,7 +422,7 @@
       : super(html, experimental, false);
 
   @override
-  accept(ApiVisitor visitor) => visitor.visitTypeMap(this);
+  T accept<T>(ApiVisitor<T> visitor) => visitor.visitTypeMap(this);
 }
 
 /**
@@ -436,7 +436,7 @@
       : super(html, experimental, deprecated);
 
   @override
-  accept(ApiVisitor visitor) => visitor.visitTypeObject(this);
+  T accept<T>(ApiVisitor<T> visitor) => visitor.visitTypeObject(this);
 
   /**
    * Return the field with the given [name], or null if there is no such field.
@@ -484,7 +484,7 @@
   }
 
   @override
-  accept(ApiVisitor visitor) => visitor.visitTypeReference(this);
+  T accept<T>(ApiVisitor<T> visitor) => visitor.visitTypeReference(this);
 }
 
 /**
@@ -523,5 +523,5 @@
       : super(html, experimental, false);
 
   @override
-  accept(ApiVisitor visitor) => visitor.visitTypeUnion(this);
+  T accept<T>(ApiVisitor<T> visitor) => visitor.visitTypeUnion(this);
 }
diff --git a/pkg/analysis_server/tool/spec/check_all_test.dart b/pkg/analysis_server/tool/spec/check_all_test.dart
index e37d58f..c390d6f 100644
--- a/pkg/analysis_server/tool/spec/check_all_test.dart
+++ b/pkg/analysis_server/tool/spec/check_all_test.dart
@@ -13,7 +13,7 @@
  * Check that all targets have been code generated.  If they haven't tell the
  * user to run generate_all.dart.
  */
-main() async {
+void main() async {
   String script = Platform.script.toFilePath(windows: Platform.isWindows);
   List<String> components = split(script);
   int index = components.indexOf('analysis_server');
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart b/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart
index e8892a8..1d152ae 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart
@@ -20,7 +20,7 @@
   });
 }
 
-_capitalize(String name) =>
+String _capitalize(String name) =>
     '${name.substring(0, 1).toUpperCase()}${name.substring(1)}';
 
 List<String> _generateDartDoc(Element html) => html.children
@@ -110,7 +110,7 @@
   }
 
   @override
-  visitApi() {
+  void visitApi() {
     outputHeader(year: '2018');
     writeln();
     emitImports();
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index bfe7954..e5a3080 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -1197,7 +1197,7 @@
   }
 
   @override
-  visitApi() {
+  void visitApi() {
     outputHeader(year: '2017');
     writeln();
     emitImports();
diff --git a/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart b/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
index 1e1088c..f0aecd6 100644
--- a/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
+++ b/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
@@ -97,7 +97,7 @@
   }
 
   @override
-  visitApi() {
+  void visitApi() {
     outputHeader(year: '2017');
     writeln();
     writeln('/// Convenience methods for running integration tests.');
@@ -157,7 +157,7 @@
   }
 
   @override
-  visitNotification(Notification notification) {
+  void visitNotification(Notification notification) {
     String streamName =
         camelJoin(['on', notification.domainName, notification.event]);
     String className = camelJoin(
@@ -197,7 +197,7 @@
   }
 
   @override
-  visitRequest(Request request) {
+  void visitRequest(Request request) {
     String methodName = camelJoin(['send', request.domainName, request.method]);
     List<String> args = <String>[];
     List<String> optionalArgs = <String>[];
diff --git a/pkg/analysis_server/tool/spec/codegen_matchers.dart b/pkg/analysis_server/tool/spec/codegen_matchers.dart
index 73cb89b..49805e1 100644
--- a/pkg/analysis_server/tool/spec/codegen_matchers.dart
+++ b/pkg/analysis_server/tool/spec/codegen_matchers.dart
@@ -96,7 +96,7 @@
   }
 
   @override
-  visitApi() {
+  void visitApi() {
     outputHeader(year: '2017');
     writeln();
     writeln('/// Matchers for data types defined in the analysis server API.');
@@ -113,7 +113,7 @@
   }
 
   @override
-  visitTypeEnum(TypeEnum typeEnum) {
+  void visitTypeEnum(TypeEnum typeEnum) {
     writeln("MatchesEnum('$context', [");
     indent(() {
       bool commaNeeded = false;
@@ -130,14 +130,14 @@
   }
 
   @override
-  visitTypeList(TypeList typeList) {
+  void visitTypeList(TypeList typeList) {
     write('isListOf(');
     visitTypeDecl(typeList.itemType);
     write(')');
   }
 
   @override
-  visitTypeMap(TypeMap typeMap) {
+  void visitTypeMap(TypeMap typeMap) {
     write('isMapOf(');
     visitTypeDecl(typeMap.keyType);
     write(', ');
diff --git a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
index 7d4ef33..efa6638 100644
--- a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
+++ b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
@@ -96,7 +96,7 @@
   }
 
   @override
-  visitApi() {
+  void visitApi() {
     outputHeader(year: '2017');
     writeln();
     generateConstants();
diff --git a/pkg/analysis_server/tool/spec/generate_all.dart b/pkg/analysis_server/tool/spec/generate_all.dart
index 000b487..5066956 100644
--- a/pkg/analysis_server/tool/spec/generate_all.dart
+++ b/pkg/analysis_server/tool/spec/generate_all.dart
@@ -20,7 +20,7 @@
 /**
  * Generate all targets.
  */
-main() async {
+void main() async {
   String script = Platform.script.toFilePath(windows: Platform.isWindows);
   String pkgPath = normalize(join(dirname(script), '..', '..'));
   await GeneratedContent.generateAll(pkgPath, allTargets);
diff --git a/pkg/analysis_server/tool/spec/implied_types.dart b/pkg/analysis_server/tool/spec/implied_types.dart
index 068590f..22380a9 100644
--- a/pkg/analysis_server/tool/spec/implied_types.dart
+++ b/pkg/analysis_server/tool/spec/implied_types.dart
@@ -59,13 +59,13 @@
   }
 
   @override
-  visitNotification(Notification notification) {
+  void visitNotification(Notification notification) {
     storeType(notification.longEvent, 'params', notification.params,
         'notificationParams', notification);
   }
 
   @override
-  visitRefactoring(Refactoring refactoring) {
+  void visitRefactoring(Refactoring refactoring) {
     String camelKind = camelJoin(refactoring.kind.toLowerCase().split('_'));
     storeType(camelKind, 'feedback', refactoring.feedback,
         'refactoringFeedback', refactoring);
@@ -74,7 +74,7 @@
   }
 
   @override
-  visitRequest(Request request) {
+  void visitRequest(Request request) {
     storeType(
         request.longMethod, 'params', request.params, 'requestParams', request);
     storeType(
@@ -82,7 +82,7 @@
   }
 
   @override
-  visitTypeDefinition(TypeDefinition typeDefinition) {
+  void visitTypeDefinition(TypeDefinition typeDefinition) {
     storeType(typeDefinition.name, null, typeDefinition.type, 'typeDefinition',
         typeDefinition);
   }
diff --git a/pkg/analysis_server/tool/spec/to_html.dart b/pkg/analysis_server/tool/spec/to_html.dart
index 95cf23a..6da5abf 100644
--- a/pkg/analysis_server/tool/spec/to_html.dart
+++ b/pkg/analysis_server/tool/spec/to_html.dart
@@ -559,7 +559,7 @@
   }
 
   @override
-  visitRefactoring(Refactoring refactoring) {
+  void visitRefactoring(Refactoring refactoring) {
     dt('refactoring', () {
       write(refactoring.kind);
     });
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 1ab825e..89511e8 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -642,6 +642,7 @@
   ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE,
   ParserErrorCode.TYPE_BEFORE_FACTORY,
   ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR,
+  ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR,
   ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
   ParserErrorCode.UNEXPECTED_TOKEN,
   ParserErrorCode.VAR_AND_TYPE,
@@ -731,6 +732,8 @@
   StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
   StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2,
   StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS,
+  StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES,
+  StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
   StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED,
   // ignore: deprecated_member_use_from_same_package
   StaticWarningCode.IMPORT_OF_NON_LIBRARY,
@@ -741,7 +744,6 @@
   StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
   StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
   StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
-  StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES,
   StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
   // ignore: deprecated_member_use_from_same_package
   StaticWarningCode.MIXED_RETURN_TYPES,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index ceabe27..d94e3f8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -89,7 +89,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 95;
+  static const int DATA_VERSION = 96;
 
   /// The length of the list returned by [_computeDeclaredVariablesSignature].
   static const int _declaredVariablesSignatureLength = 4;
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 9bdc1cc..09d57b4 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -704,18 +704,21 @@
       if (node.staticElement == importElement.prefix) {
         AstNode parent = node.parent;
         if (parent is PrefixedIdentifier && parent.prefix == node) {
-          if (importedElements.contains(parent.staticElement)) {
+          var element = parent.staticElement?.declaration;
+          if (importedElements.contains(element)) {
             _addResultForPrefix(node, parent.identifier);
           }
         }
         if (parent is MethodInvocation && parent.target == node) {
-          if (importedElements.contains(parent.methodName.staticElement)) {
+          var element = parent.methodName.staticElement?.declaration;
+          if (importedElements.contains(element)) {
             _addResultForPrefix(node, parent.methodName);
           }
         }
       }
     } else {
-      if (importedElements.contains(node.staticElement)) {
+      var element = node.staticElement?.declaration;
+      if (importedElements.contains(element)) {
         _addResult(node.offset, 0);
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index d0de664..401e022 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -6960,6 +6960,7 @@
 ///        ([Expression] '.')? [SimpleIdentifier] [TypeArgumentList]?
 ///        [ArgumentList]
 class MethodInvocationImpl extends InvocationExpressionImpl
+    with NullShortableExpressionImpl
     implements MethodInvocation {
   /// The expression producing the object on which the method is defined, or
   /// `null` if there is no target (that is, the target is implicitly `this`).
@@ -7078,6 +7079,9 @@
   }
 
   @override
+  AstNode get _nullShortingExtensionCandidate => parent;
+
+  @override
   E accept<E>(AstVisitor<E> visitor) => visitor.visitMethodInvocation(this);
 
   @override
@@ -7087,6 +7091,9 @@
     _typeArguments?.accept(visitor);
     _argumentList?.accept(visitor);
   }
+
+  @override
+  bool _extendsNullShorting(Expression child) => identical(child, _target);
 }
 
 /// The declaration of a mixin.
diff --git a/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart b/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart
new file mode 100644
index 0000000..e49bcc5
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart
@@ -0,0 +1,201 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/dart/element/type_visitor.dart';
+import 'package:analyzer/src/generated/type_system.dart';
+
+class RuntimeTypeEqualityHelper {
+  final TypeSystemImpl _typeSystem;
+
+  RuntimeTypeEqualityHelper(TypeSystemImpl typeSystem)
+      : _typeSystem = typeSystem;
+
+  /// Return `true` if runtime types [T1] and [T2] are equal.
+  ///
+  /// nnbd/feature-specification.md#runtime-type-equality-operator
+  bool equal(DartType T1, DartType T2) {
+    var N1 = _typeSystem.normalize(T1);
+    var N2 = _typeSystem.normalize(T2);
+    return const RuntimeTypeEqualityVisitor().visit(N1, N2);
+  }
+}
+
+class RuntimeTypeEqualityVisitor extends DartTypeVisitor1<bool, DartType> {
+  const RuntimeTypeEqualityVisitor();
+
+  @override
+  bool defaultDartType(DartType T1, DartType T2) {
+    throw UnimplementedError('(${T1.runtimeType}) $T1');
+  }
+
+  bool visit(DartType T1, DartType T2) {
+    return DartTypeVisitor1.visit(T1, this, T2);
+  }
+
+  @override
+  bool visitDynamicType(DynamicTypeImpl T1, DartType T2) {
+    return identical(T1, T2);
+  }
+
+  @override
+  bool visitFunctionType(FunctionType T1, DartType T2) {
+    if (T2 is FunctionType) {
+      var typeParameters = _typeParameters(T1.typeFormals, T2.typeFormals);
+      if (typeParameters == null) {
+        return false;
+      }
+
+      bool equal(DartType T1, DartType T2) {
+        T1 = typeParameters.T1_substitution.substituteType(T1);
+        T2 = typeParameters.T2_substitution.substituteType(T2);
+        return visit(T1, T2);
+      }
+
+      if (!equal(T1.returnType, T2.returnType)) {
+        return false;
+      }
+
+      var T1_parameters = T1.parameters;
+      var T2_parameters = T2.parameters;
+      if (T1_parameters.length != T2_parameters.length) {
+        return false;
+      }
+
+      for (var i = 0; i < T1_parameters.length; i++) {
+        var T1_parameter = T1_parameters[i];
+        var T2_parameter = T2_parameters[i];
+
+        // ignore: deprecated_member_use_from_same_package
+        if (T1_parameter.parameterKind != T2_parameter.parameterKind) {
+          return false;
+        }
+
+        if (T1_parameter.isNamed) {
+          if (T1_parameter.name != T2_parameter.name) {
+            return false;
+          }
+        }
+
+        if (!equal(T1_parameter.type, T2_parameter.type)) {
+          return false;
+        }
+      }
+
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitInterfaceType(InterfaceType T1, DartType T2) {
+    if (T2 is InterfaceType &&
+        T1.element == T2.element &&
+        _compatibleNullability(T1, T2)) {
+      var T1_typeArguments = T1.typeArguments;
+      var T2_typeArguments = T2.typeArguments;
+      if (T1_typeArguments.length == T2_typeArguments.length) {
+        for (var i = 0; i < T1_typeArguments.length; i++) {
+          var T1_typeArgument = T1_typeArguments[i];
+          var T2_typeArgument = T2_typeArguments[i];
+          if (!visit(T1_typeArgument, T2_typeArgument)) {
+            return false;
+          }
+        }
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @override
+  bool visitNeverType(NeverTypeImpl T1, DartType T2) {
+    // Note, that all types are normalized before this visitor.
+    // So, `Never?` never happens, it is already `Null`.
+    assert(T1.nullabilitySuffix != NullabilitySuffix.question);
+    return T2 is NeverTypeImpl && _compatibleNullability(T1, T2);
+  }
+
+  @override
+  bool visitTypeParameterType(TypeParameterType T1, DartType T2) {
+    return T2 is TypeParameterType &&
+        _compatibleNullability(T1, T2) &&
+        T1.element == T2.element;
+  }
+
+  @override
+  bool visitVoidType(VoidType T1, DartType T2) {
+    return identical(T1, T2);
+  }
+
+  bool _compatibleNullability(DartType T1, DartType T2) {
+    var T1_nullability = T1.nullabilitySuffix;
+    var T2_nullability = T2.nullabilitySuffix;
+    return T1_nullability == T2_nullability ||
+        T1_nullability == NullabilitySuffix.star &&
+            T2_nullability == NullabilitySuffix.none ||
+        T2_nullability == NullabilitySuffix.star &&
+            T1_nullability == NullabilitySuffix.none;
+  }
+
+  /// Determines if the two lists of type parameters are equal.  If they are,
+  /// returns a [_TypeParametersResult] indicating the substitutions necessary
+  /// to demonstrate their equality.  If they aren't, returns `null`.
+  _TypeParametersResult _typeParameters(
+    List<TypeParameterElement> T1_parameters,
+    List<TypeParameterElement> T2_parameters,
+  ) {
+    if (T1_parameters.length != T2_parameters.length) {
+      return null;
+    }
+
+    var newParameters = <TypeParameterElementImpl>[];
+    var newTypes = <TypeParameterType>[];
+    for (var i = 0; i < T1_parameters.length; i++) {
+      var name = T1_parameters[i].name;
+      var newParameter = TypeParameterElementImpl.synthetic(name);
+      newParameters.add(newParameter);
+
+      var newType = newParameter.instantiate(
+        nullabilitySuffix: NullabilitySuffix.none,
+      );
+      newTypes.add(newType);
+    }
+
+    var T1_substitution = Substitution.fromPairs(T1_parameters, newTypes);
+    var T2_substitution = Substitution.fromPairs(T2_parameters, newTypes);
+    for (var i = 0; i < T1_parameters.length; i++) {
+      var T1_parameter = T1_parameters[i];
+      var T2_parameter = T2_parameters[i];
+
+      var T1_bound = T1_parameter.bound;
+      var T2_bound = T2_parameter.bound;
+      if (T1_bound == null && T2_bound == null) {
+        // OK, no bound.
+      } else if (T1_bound != null && T2_bound != null) {
+        T1_bound = T1_substitution.substituteType(T1_bound);
+        T2_bound = T2_substitution.substituteType(T2_bound);
+        if (!visit(T1_bound, T2_bound)) {
+          return null;
+        }
+      } else {
+        return null;
+      }
+    }
+
+    return _TypeParametersResult(T1_substitution, T2_substitution);
+  }
+}
+
+class _TypeParametersResult {
+  final Substitution T1_substitution;
+  final Substitution T2_substitution;
+
+  _TypeParametersResult(this.T1_substitution, this.T2_substitution);
+}
diff --git a/pkg/analyzer/lib/src/dart/element/type_schema_elimination.dart b/pkg/analyzer/lib/src/dart/element/type_schema_elimination.dart
index cbd52e8..e313b5c 100644
--- a/pkg/analyzer/lib/src/dart/element/type_schema_elimination.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_schema_elimination.dart
@@ -5,57 +5,25 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
-import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/generated/type_system.dart';
-
-/// Returns the greatest closure of the given type [schema] with respect to `?`.
-///
-/// The greatest closure of a type schema `P` with respect to `?` is defined as
-/// `P` with every covariant occurrence of `?` replaced with `Null`, and every
-/// contravariant occurrence of `?` replaced with `Object`.
-///
-/// If the schema contains no instances of `?`, the original schema object is
-/// returned to avoid unnecessary allocation.
-///
-/// Note that the closure of a type schema is a proper type.
-///
-/// Note that the greatest closure of a type schema is always a supertype of any
-/// type which matches the schema.
-DartType greatestClosure(TypeProviderImpl typeProvider, DartType schema) {
-  return _TypeSchemaEliminationVisitor.run(typeProvider, false, schema);
-}
-
-/// Returns the least closure of the given type [schema] with respect to `?`.
-///
-/// The least closure of a type schema `P` with respect to `?` is defined as
-/// `P` with every covariant occurrence of `?` replaced with `Object`, and every
-/// contravariant occurrence of `?` replaced with `Null`.
-///
-/// If the schema contains no instances of `?`, the original schema object is
-/// returned to avoid unnecessary allocation.
-///
-/// Note that the closure of a type schema is a proper type.
-///
-/// Note that the least closure of a type schema is always a subtype of any type
-/// which matches the schema.
-DartType leastClosure(TypeProviderImpl typeProvider, DartType schema) {
-  return _TypeSchemaEliminationVisitor.run(typeProvider, true, schema);
-}
+import 'package:meta/meta.dart';
 
 /// Visitor that computes least and greatest closures of a type schema.
 ///
 /// Each visitor method returns `null` if there are no `?`s contained in the
-/// type, otherwise it returns the result of substituting `?` with `Null` or
-/// `Object`, as appropriate.
+/// type, otherwise it returns the result of substituting `?` with [_bottomType]
+/// or [_topType], as appropriate.
 ///
 /// TODO(scheglov) Rewrite using `ReplacementVisitor`, once we have it.
-class _TypeSchemaEliminationVisitor extends InternalTypeSubstitutor {
-  final TypeProviderImpl _typeProvider;
+class TypeSchemaEliminationVisitor extends InternalTypeSubstitutor {
+  final DartType _topType;
+  final DartType _bottomType;
 
   bool _isLeastClosure;
 
-  _TypeSchemaEliminationVisitor(
-    this._typeProvider,
+  TypeSchemaEliminationVisitor._(
+    this._topType,
+    this._bottomType,
     this._isLeastClosure,
   ) : super(null);
 
@@ -79,18 +47,23 @@
   @override
   DartType visitUnknownInferredType(UnknownInferredType type) {
     useCounter++;
-    return _isLeastClosure ? _typeProvider.nullType : _typeProvider.dynamicType;
+    return _isLeastClosure ? _bottomType : _topType;
   }
 
   /// Runs an instance of the visitor on the given [schema] and returns the
   /// resulting type.  If the schema contains no instances of `?`, the original
   /// schema object is returned to avoid unnecessary allocation.
-  static DartType run(
-    TypeProviderImpl typeProvider,
-    bool isLeastClosure,
-    DartType schema,
-  ) {
-    var visitor = _TypeSchemaEliminationVisitor(typeProvider, isLeastClosure);
+  static DartType run({
+    @required DartType topType,
+    @required DartType bottomType,
+    @required bool isLeastClosure,
+    @required DartType schema,
+  }) {
+    var visitor = TypeSchemaEliminationVisitor._(
+      topType,
+      bottomType,
+      isLeastClosure,
+    );
     var result = visitor.visit(schema);
     assert(visitor._isLeastClosure == isLeastClosure);
     return result ?? schema;
diff --git a/pkg/analyzer/lib/src/dart/element/type_visitor.dart b/pkg/analyzer/lib/src/dart/element/type_visitor.dart
index 60ce66d..eff54ee 100644
--- a/pkg/analyzer/lib/src/dart/element/type_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_visitor.dart
@@ -62,3 +62,76 @@
     throw UnimplementedError('(${type.runtimeType}) $type');
   }
 }
+
+class DartTypeVisitor1<R, T> {
+  const DartTypeVisitor1();
+
+  R defaultDartType(DartType type, T arg) => null;
+
+  R visitDynamicType(DynamicTypeImpl type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitFunctionType(FunctionType type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitFunctionTypeBuilder(FunctionTypeBuilder type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitInterfaceType(InterfaceType type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitNamedTypeBuilder(NamedTypeBuilder type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitNeverType(NeverTypeImpl type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitTypeParameterType(TypeParameterType type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitUnknownInferredType(UnknownInferredType type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  R visitVoidType(VoidType type, T arg) {
+    return defaultDartType(type, arg);
+  }
+
+  static R visit<R, T>(DartType type, DartTypeVisitor1<R, T> visitor, T arg) {
+    if (type is NeverTypeImpl) {
+      return visitor.visitNeverType(type, arg);
+    }
+    if (type is DynamicTypeImpl) {
+      return visitor.visitDynamicType(type, arg);
+    }
+    if (type is FunctionType) {
+      return visitor.visitFunctionType(type, arg);
+    }
+    if (type is FunctionTypeBuilder) {
+      return visitor.visitFunctionTypeBuilder(type, arg);
+    }
+    if (type is InterfaceType) {
+      return visitor.visitInterfaceType(type, arg);
+    }
+    if (type is NamedTypeBuilder) {
+      return visitor.visitNamedTypeBuilder(type, arg);
+    }
+    if (type is TypeParameterType) {
+      return visitor.visitTypeParameterType(type, arg);
+    }
+    if (type is UnknownInferredType) {
+      return visitor.visitUnknownInferredType(type, arg);
+    }
+    if (type is VoidType) {
+      return visitor.visitVoidType(type, arg);
+    }
+    throw UnimplementedError('(${type.runtimeType}) $type');
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index c3b76ba..3d72df4 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -820,6 +820,15 @@
       _TYPE_PARAMETER_ON_CONSTRUCTOR;
 
   /**
+   * 7.1.1 Operators: Type parameters are not syntactically supported on an
+   * operator.
+   */
+  static const ParserErrorCode TYPE_PARAMETER_ON_OPERATOR = ParserErrorCode(
+      'TYPE_PARAMETERS_ON_OPERATOR',
+      "Types parameters aren't allowed when defining an operator.",
+      correction: "Try removing the type parameters.");
+
+  /**
    * Parameters:
    * 0: the starting character that was missing
    */
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index 4275f25..9ac8a76 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -190,6 +190,7 @@
     if (inferredElement == null || inferredElement.isStatic) {
       return false;
     }
+    inferredElement = _resolver.toLegacyElement(inferredElement);
     DartType inferredType =
         _elementTypeProvider.getExecutableType(inferredElement);
     if (inferredType is FunctionType) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 3540a44..d59be4a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -549,11 +549,12 @@
       var imports = _definingLibrary.getImportsWithPrefix(prefix);
       if (imports.length == 1 && imports[0].isDeferred) {
         var importedLibrary = imports[0].importedLibrary;
-        var loadLibraryFunction = importedLibrary?.loadLibraryFunction;
-        if (loadLibraryFunction is ExecutableElement) {
-          nameNode.staticElement = loadLibraryFunction;
-          return _setResolution(node,
-              _elementTypeProvider.getExecutableType(loadLibraryFunction));
+        var element = importedLibrary?.loadLibraryFunction;
+        element = _resolver.toLegacyElement(element);
+        if (element is ExecutableElement) {
+          nameNode.staticElement = element;
+          return _setResolution(
+              node, _elementTypeProvider.getExecutableType(element));
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 5439b11..a371761 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -6719,15 +6719,12 @@
   // ```dart
   // int f(String s) => s.length;
   // ```
-  static const StaticTypeWarningCode UNDEFINED_GETTER =
-      // TODO(brianwilkerson) When the "target" is an enum, report
-      //  UNDEFINED_ENUM_CONSTANT instead.
-      StaticTypeWarningCode('UNDEFINED_GETTER',
-          "The getter '{0}' isn't defined for the class '{1}'.",
-          correction: "Try importing the library that defines '{0}', "
-              "correcting the name to the name of an existing getter, or "
-              "defining a getter or field named '{0}'.",
-          hasPublishedDocs: true);
+  static const StaticTypeWarningCode UNDEFINED_GETTER = StaticTypeWarningCode(
+      'UNDEFINED_GETTER', "The getter '{0}' isn't defined for the type '{1}'.",
+      correction: "Try importing the library that defines '{0}', "
+          "correcting the name to the name of an existing getter, or "
+          "defining a getter or field named '{0}'.",
+      hasPublishedDocs: true);
 
   /**
    * Parameters:
@@ -6759,7 +6756,7 @@
   // int f(List<int> l) => l.removeLast();
   // ```
   static const StaticTypeWarningCode UNDEFINED_METHOD = StaticTypeWarningCode(
-      'UNDEFINED_METHOD', "The method '{0}' isn't defined for the class '{1}'.",
+      'UNDEFINED_METHOD', "The method '{0}' isn't defined for the type '{1}'.",
       correction:
           "Try correcting the name to the name of an existing method, or "
           "defining a method named '{0}'.",
@@ -6799,7 +6796,7 @@
   // ```
   static const StaticTypeWarningCode UNDEFINED_OPERATOR = StaticTypeWarningCode(
       'UNDEFINED_OPERATOR',
-      "The operator '{0}' isn't defined for the class '{1}'.",
+      "The operator '{0}' isn't defined for the type '{1}'.",
       correction: "Try defining the operator '{0}'.",
       hasPublishedDocs: true);
 
@@ -6882,7 +6879,7 @@
   // }
   // ```
   static const StaticTypeWarningCode UNDEFINED_SETTER = StaticTypeWarningCode(
-      'UNDEFINED_SETTER', "The setter '{0}' isn't defined for the class '{1}'.",
+      'UNDEFINED_SETTER', "The setter '{0}' isn't defined for the type '{1}'.",
       correction: "Try importing the library that defines '{0}', "
           "correcting the name to the name of an existing setter, or "
           "defining a setter or field named '{0}'.",
@@ -7943,6 +7940,45 @@
           hasPublishedDocs: true);
 
   /**
+   * 10.3 Setters: It is a compile-time error if a class has a setter named
+   * `v=` with argument type `T` and a getter named `v` with return type `S`,
+   * and `S` may not be assigned to `T`.
+   *
+   * Parameters:
+   * 0: the name of the getter
+   * 1: the type of the getter
+   * 2: the type of the setter
+   * 3: the name of the setter
+   */
+  static const StaticWarningCode GETTER_NOT_ASSIGNABLE_SETTER_TYPES =
+      StaticWarningCode(
+          'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
+          "The return type of getter '{0}' is '{1}' which isn't assignable "
+              "to the type '{2}' of its setter '{3}'.",
+          correction: "Try changing the types so that they are compatible.");
+
+  /**
+   * nnbd/feature-specification.md
+   *
+   * It is an error if a class has a setter and a getter with the same basename
+   * where the return type of the getter is not a subtype of the argument type
+   * of the setter. Note that this error specifically requires subtyping and
+   * not assignability and hence makes no exception for `dynamic`.
+   *
+   * Parameters:
+   * 0: the name of the getter
+   * 1: the type of the getter
+   * 2: the type of the setter
+   * 3: the name of the setter
+   */
+  static const StaticWarningCode GETTER_NOT_SUBTYPE_SETTER_TYPES =
+      StaticWarningCode(
+          'GETTER_NOT_SUBTYPE_SETTER_TYPES',
+          "The return type of getter '{0}' is '{1}' which isn't a subtype "
+              "of the type '{2}' of its setter '{3}'.",
+          correction: "Try changing the types so that they are compatible.");
+
+  /**
    * 14.1 Imports: It is a static warning to import two different libraries with
    * the same name.
    *
@@ -8165,24 +8201,6 @@
               "'{1}'.");
 
   /**
-   * 10.3 Setters: It is a compile-time error if a class has a setter named
-   * `v=` with argument type `T` and a getter named `v` with return type `S`,
-   * and `S` may not be assigned to `T`.
-   *
-   * Parameters:
-   * 0: the name of the getter
-   * 1: the type of the getter
-   * 2: the type of the setter
-   * 3: the name of the setter
-   */
-  static const StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES =
-      StaticWarningCode(
-          'MISMATCHED_GETTER_AND_SETTER_TYPES',
-          "The return type of getter '{0}' is '{1}' which isn't assignable "
-              "to the type '{2}' of its setter '{3}'.",
-          correction: "Try changing the types so that they are compatible.");
-
-  /**
    * Parameters:
    * 0: the name of the constant that is missing
    */
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
new file mode 100644
index 0000000..a737b71
--- /dev/null
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -0,0 +1,207 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/resolver.dart' show TypeSystemImpl;
+import 'package:analyzer/src/generated/type_system.dart';
+import 'package:meta/meta.dart';
+
+class CorrectOverrideHelper {
+  final TypeSystemImpl _typeSystem;
+  final ErrorReporter _errorReporter;
+
+  final ExecutableElement _thisMember;
+  FunctionType _thisTypeForSubtype;
+
+  bool _hasCovariant = false;
+  Substitution _thisSubstitution;
+  Substitution _superSubstitution;
+
+  CorrectOverrideHelper({
+    @required TypeSystemImpl typeSystem,
+    @required ErrorReporter errorReporter,
+    @required ExecutableElement thisMember,
+  })  : _typeSystem = typeSystem,
+        _errorReporter = errorReporter,
+        _thisMember = thisMember {
+    _computeThisTypeForSubtype();
+  }
+
+  /// Return `true` if [_thisMember] is a correct override of [superMember].
+  bool isCorrectOverrideOf({
+    @required ExecutableElement superMember,
+  }) {
+    var superType = superMember.type;
+    if (!_typeSystem.isSubtypeOf(_thisTypeForSubtype, superType)) {
+      return false;
+    }
+
+    // If no covariant parameters, then the subtype checking above is enough.
+    if (!_hasCovariant) {
+      return true;
+    }
+
+    _initSubstitutions(superType);
+
+    var thisParameters = _thisMember.parameters;
+    for (var i = 0; i < thisParameters.length; i++) {
+      var thisParameter = thisParameters[i];
+      if (thisParameter.isCovariant) {
+        var superParameter = _correspondingParameter(
+          superType.parameters,
+          thisParameter,
+          i,
+        );
+        if (superParameter != null) {
+          var thisParameterType = thisParameter.type;
+          var superParameterType = superParameter.type;
+
+          if (_thisSubstitution != null) {
+            thisParameterType = _thisSubstitution.substituteType(
+              thisParameterType,
+            );
+            superParameterType = _superSubstitution.substituteType(
+              superParameterType,
+            );
+          }
+
+          if (!_typeSystem.isSubtypeOf(superParameterType, thisParameterType) &&
+              !_typeSystem.isSubtypeOf(thisParameterType, superParameterType)) {
+            return false;
+          }
+        }
+      }
+    }
+
+    return true;
+  }
+
+  /// If [_thisMember] is not a correct override of [superMember], report the
+  /// error.
+  void verify({
+    @required ExecutableElement superMember,
+    @required AstNode errorNode,
+  }) {
+    var isCorrect = isCorrectOverrideOf(superMember: superMember);
+    if (!isCorrect) {
+      _reportInvalidOverride(errorNode, _thisMember, superMember);
+    }
+  }
+
+  /// Fill [_thisTypeForSubtype]. If [_thisMember] has covariant formal
+  /// parameters, replace their types with `Object?` or `Object`.
+  void _computeThisTypeForSubtype() {
+    var parameters = _thisMember.parameters;
+
+    List<ParameterElement> newParameters;
+    for (var i = 0; i < parameters.length; i++) {
+      var parameter = parameters[i];
+      if (parameter.isCovariant) {
+        _hasCovariant = true;
+        newParameters ??= parameters.toList(growable: false);
+        newParameters[i] = ParameterElementImpl.synthetic(
+          parameter.name,
+          _typeSystem.isNonNullableByDefault
+              ? _typeSystem.objectQuestion
+              : _typeSystem.objectStar,
+          // ignore: deprecated_member_use_from_same_package
+          parameter.parameterKind,
+        );
+      }
+    }
+
+    var type = _thisMember.type;
+    if (newParameters != null) {
+      _thisTypeForSubtype = FunctionTypeImpl(
+        typeFormals: type.typeFormals,
+        parameters: newParameters,
+        returnType: type.returnType,
+        nullabilitySuffix: type.nullabilitySuffix,
+      );
+    } else {
+      _thisTypeForSubtype = type;
+    }
+  }
+
+  /// We know that [_thisMember] has a covariant parameter, which we need
+  /// to check against the corresponding parameters in [superType]. their types
+  /// should be compatible. If [_thisMember] (and correspondingly [superType])
+  /// has type parameters, we need to convert types of formal parameters in
+  /// both to the same type parameters.
+  void _initSubstitutions(FunctionType superType) {
+    var thisParameters = _thisMember.typeParameters;
+    var superParameters = superType.typeFormals;
+    if (thisParameters.isEmpty) {
+      return;
+    }
+
+    var newParameters = <TypeParameterElement>[];
+    var newTypes = <TypeParameterType>[];
+    for (var i = 0; i < thisParameters.length; i++) {
+      var newParameter = TypeParameterElementImpl.synthetic(
+        thisParameters[i].name,
+      );
+      newParameters.add(newParameter);
+
+      var newType = newParameter.instantiate(
+        nullabilitySuffix: NullabilitySuffix.none,
+      );
+      newTypes.add(newType);
+    }
+
+    _thisSubstitution = Substitution.fromPairs(thisParameters, newTypes);
+    _superSubstitution = Substitution.fromPairs(superParameters, newTypes);
+  }
+
+  void _reportInvalidOverride(
+    AstNode node,
+    ExecutableElement member,
+    ExecutableElement superMember,
+  ) {
+    _errorReporter.reportErrorForNode(
+      CompileTimeErrorCode.INVALID_OVERRIDE,
+      node,
+      [
+        member.name,
+        member.enclosingElement.name,
+        member.type,
+        superMember.enclosingElement.name,
+        superMember.type,
+      ],
+    );
+  }
+
+  /// Return an element of [parameters] that corresponds for the [proto],
+  /// or `null` if no such parameter exist.
+  static ParameterElement _correspondingParameter(
+    List<ParameterElement> parameters,
+    ParameterElement proto,
+    int protoIndex,
+  ) {
+    if (proto.isPositional) {
+      if (parameters.length > protoIndex) {
+        var parameter = parameters[protoIndex];
+        if (parameter.isPositional) {
+          return parameter;
+        }
+      }
+    } else {
+      assert(proto.isNamed);
+      for (var parameter in parameters) {
+        if (parameter.isNamed && parameter.name == proto.name) {
+          return parameter;
+        }
+      }
+    }
+    return null;
+  }
+}
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
new file mode 100644
index 0000000..c9287f4
--- /dev/null
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -0,0 +1,136 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/type_system.dart';
+import 'package:meta/meta.dart';
+
+/// Verifies that the return type of the getter matches the parameter type
+/// of the corresponding setter. Where "match" means "subtype" in non-nullable,
+/// and "assignable" in legacy.
+class GetterSetterTypesVerifier {
+  final TypeSystemImpl _typeSystem;
+  final ErrorReporter _errorReporter;
+
+  GetterSetterTypesVerifier({
+    @required TypeSystemImpl typeSystem,
+    @required ErrorReporter errorReporter,
+  })  : _typeSystem = typeSystem,
+        _errorReporter = errorReporter;
+
+  ErrorCode get _errorCode {
+    return _isNonNullableByDefault
+        ? StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES
+        : StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES;
+  }
+
+  bool get _isNonNullableByDefault => _typeSystem.isNonNullableByDefault;
+
+  void checkExtension(ExtensionDeclaration node) {
+    for (var getterNode in node.members) {
+      if (getterNode is MethodDeclaration && getterNode.isGetter) {
+        checkGetter(getterNode.name, getterNode.declaredElement);
+      }
+    }
+  }
+
+  void checkGetter(
+    SimpleIdentifier nameNode,
+    PropertyAccessorElement getter,
+  ) {
+    assert(getter.isGetter);
+
+    var setter = getter.correspondingSetter;
+    if (setter == null) {
+      return;
+    }
+
+    var getterType = _getGetterType(getter);
+    var setterType = _getSetterType(setter);
+    if (setterType == null) {
+      return;
+    }
+
+    if (!_match(getterType, setterType)) {
+      var name = nameNode.name;
+      _errorReporter.reportErrorForNode(
+        _errorCode,
+        nameNode,
+        [name, getterType, setterType, name],
+      );
+    }
+  }
+
+  void checkInterface(ClassElement classElement, Interface interface) {
+    var libraryUri = classElement.library.source.uri;
+
+    for (var name in interface.map.keys) {
+      if (!name.isAccessibleFor(libraryUri)) continue;
+
+      var getter = interface.map[name];
+      if (getter.kind == ElementKind.GETTER) {
+        var setter = interface.map[Name(libraryUri, '${name.name}=')];
+        if (setter != null && setter.parameters.length == 1) {
+          var getterType = getter.returnType;
+          var setterType = setter.parameters[0].type;
+          if (!_match(getterType, setterType)) {
+            Element errorElement;
+            if (getter.enclosingElement == classElement) {
+              errorElement = getter;
+            } else if (setter.enclosingElement == classElement) {
+              errorElement = setter;
+            } else {
+              errorElement = classElement;
+            }
+
+            var getterName = getter.displayName;
+            if (getter.enclosingElement != classElement) {
+              var getterClassName = getter.enclosingElement.displayName;
+              getterName = '$getterClassName.$getterName';
+            }
+
+            var setterName = setter.displayName;
+            if (setter.enclosingElement != classElement) {
+              var setterClassName = setter.enclosingElement.displayName;
+              setterName = '$setterClassName.$setterName';
+            }
+
+            _errorReporter.reportErrorForElement(
+              _errorCode,
+              errorElement,
+              [getterName, getterType, setterType, setterName],
+            );
+          }
+        }
+      }
+    }
+  }
+
+  bool _match(DartType getterType, DartType setterType) {
+    return _isNonNullableByDefault
+        ? _typeSystem.isSubtypeOf(getterType, setterType)
+        : _typeSystem.isAssignableTo(getterType, setterType);
+  }
+
+  /// Return the return type of the [getter].
+  static DartType _getGetterType(PropertyAccessorElement getter) {
+    return getter.returnType;
+  }
+
+  /// Return the type of the first parameter of the [setter].
+  static DartType _getSetterType(PropertyAccessorElement setter) {
+    var parameters = setter.parameters;
+    if (parameters.isNotEmpty) {
+      return parameters[0].type;
+    } else {
+      return null;
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 9d3bce8..9d4da67 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -14,6 +14,8 @@
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/error/correct_override.dart';
+import 'package:analyzer/src/error/getter_setter_types_verifier.dart';
 import 'package:analyzer/src/generated/resolver.dart' show TypeSystemImpl;
 import 'package:analyzer/src/generated/type_system.dart';
 
@@ -184,7 +186,10 @@
       _reportInconsistentInheritance(classNameNode, conflict);
     }
 
-    _checkForMismatchedAccessorTypes(interface);
+    GetterSetterTypesVerifier(
+      typeSystem: typeSystem,
+      errorReporter: reporter,
+    ).checkInterface(classElement, interface);
 
     if (!classElement.isAbstract) {
       List<ExecutableElement> inheritedAbstract;
@@ -226,20 +231,14 @@
         //  diagnostic should be reported on the name of the mixin defining the
         //  method. In other cases, it should be reported on the name of the
         //  overriding method. The classNameNode is always wrong.
-        if (!typeSystem.isOverrideSubtypeOf(
-            concreteElement.type, interfaceElement.type)) {
-          reporter.reportErrorForNode(
-            CompileTimeErrorCode.INVALID_OVERRIDE,
-            classNameNode,
-            [
-              name.name,
-              interfaceElement.enclosingElement.name,
-              interfaceElement.type,
-              concreteElement.enclosingElement.name,
-              concreteElement.type,
-            ],
-          );
-        }
+        CorrectOverrideHelper(
+          typeSystem: typeSystem,
+          errorReporter: reporter,
+          thisMember: concreteElement,
+        ).verify(
+          superMember: interfaceElement,
+          errorNode: classNameNode,
+        );
       }
 
       _reportInheritedAbstractMembers(inheritedAbstract);
@@ -271,35 +270,35 @@
     if (member.isStatic) return;
 
     var name = Name(libraryUri, member.name);
+    var correctOverrideHelper = CorrectOverrideHelper(
+      typeSystem: typeSystem,
+      errorReporter: reporter,
+      thisMember: member,
+    );
+
     for (var superInterface in allSuperinterfaces) {
       var superMember = superInterface.declared[name];
-      if (superMember != null) {
-        // The case when members have different kinds is reported in verifier.
-        // TODO(scheglov) Do it here?
-        if (member.kind != superMember.kind) {
-          continue;
-        }
+      if (superMember == null) {
+        continue;
+      }
 
-        if (!typeSystem.isOverrideSubtypeOf(member.type, superMember.type)) {
-          reporter.reportErrorForNode(
-            CompileTimeErrorCode.INVALID_OVERRIDE,
-            node,
-            [
-              name.name,
-              member.enclosingElement.name,
-              member.type,
-              superMember.enclosingElement.name,
-              superMember.type,
-            ],
-          );
-        }
-        if (methodParameterNodes != null) {
-          _checkForOptionalParametersDifferentDefaultValues(
-            superMember,
-            member,
-            methodParameterNodes,
-          );
-        }
+      // The case when members have different kinds is reported in verifier.
+      // TODO(scheglov) Do it here?
+      if (member.kind != superMember.kind) {
+        continue;
+      }
+
+      correctOverrideHelper.verify(
+        superMember: superMember,
+        errorNode: node,
+      );
+
+      if (methodParameterNodes != null) {
+        _checkForOptionalParametersDifferentDefaultValues(
+          superMember,
+          member,
+          methodParameterNodes,
+        );
       }
     }
   }
@@ -385,49 +384,6 @@
     return hasError;
   }
 
-  void _checkForMismatchedAccessorTypes(Interface interface) {
-    for (var name in interface.map.keys) {
-      if (!name.isAccessibleFor(libraryUri)) continue;
-
-      var getter = interface.map[name];
-      if (getter.kind == ElementKind.GETTER) {
-        // TODO(scheglov) We should separate getters and setters.
-        var setter = interface.map[Name(libraryUri, '${name.name}=')];
-        if (setter != null && setter.parameters.length == 1) {
-          var getterType = getter.returnType;
-          var setterType = setter.parameters[0].type;
-          if (!typeSystem.isAssignableTo(getterType, setterType)) {
-            Element errorElement;
-            if (getter.enclosingElement == classElement) {
-              errorElement = getter;
-            } else if (setter.enclosingElement == classElement) {
-              errorElement = setter;
-            } else {
-              errorElement = classElement;
-            }
-
-            String getterName = getter.displayName;
-            if (getter.enclosingElement != classElement) {
-              var getterClassName = getter.enclosingElement.displayName;
-              getterName = '$getterClassName.$getterName';
-            }
-
-            String setterName = setter.displayName;
-            if (setter.enclosingElement != classElement) {
-              var setterClassName = setter.enclosingElement.displayName;
-              setterName = '$setterClassName.$setterName';
-            }
-
-            reporter.reportErrorForElement(
-                StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES,
-                errorElement,
-                [getterName, getterType, setterType, setterName]);
-          }
-        }
-      }
-    }
-  }
-
   void _checkForOptionalParametersDifferentDefaultValues(
     ExecutableElement baseExecutable,
     ExecutableElement derivedExecutable,
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 4ab22f4..c612c30 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -21,6 +21,7 @@
         messageMissingAssignableSelector,
         messageNativeClauseShouldBeAnnotation,
         messageTypedefNotFunction,
+        messageOperatorWithTypeParameters,
         templateDuplicateLabelInSwitchStatement,
         templateExpectedButGot,
         templateExpectedIdentifier,
@@ -892,6 +893,10 @@
     } else if (name is _OperatorName) {
       operatorKeyword = name.operatorKeyword;
       nameId = name.name;
+      if (typeParameters != null) {
+        handleRecoverableError(messageOperatorWithTypeParameters,
+            typeParameters.beginToken, typeParameters.endToken);
+      }
     } else {
       throw UnimplementedError(
           'name is an instance of ${name.runtimeType} in endClassMethod');
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index e82aa1a..320a314 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -278,6 +278,10 @@
             offset,
             length);
         return;
+      case "TYPE_PARAMETER_ON_OPERATOR":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR, offset, length);
+        return;
       case "UNDEFINED_CLASS":
         errorReporter?.reportErrorForOffset(
             CompileTimeErrorCode.UNDEFINED_CLASS, offset, length);
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index d098560..03abc79 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -483,6 +483,7 @@
   @override
   void visitMethodInvocation(MethodInvocation node) {
     _methodInvocationResolver.resolve(node);
+    _resolver.nullShortingTermination(node);
   }
 
   @override
@@ -505,7 +506,9 @@
     if (identifier.name == FunctionElement.LOAD_LIBRARY_NAME &&
         _isDeferredPrefix(prefix)) {
       LibraryElement importedLibrary = _getImportedLibrary(prefix);
-      identifier.staticElement = importedLibrary?.loadLibraryFunction;
+      var element = importedLibrary?.loadLibraryFunction;
+      element = _resolver.toLegacyElement(element);
+      identifier.staticElement = element;
       return;
     }
     //
@@ -1367,8 +1370,11 @@
           propertyName.staticElement = element;
           _checkForStaticAccessToInstanceMember(propertyName, element);
         } else {
+          var code = typeReference.isEnum
+              ? StaticTypeWarningCode.UNDEFINED_ENUM_CONSTANT
+              : StaticTypeWarningCode.UNDEFINED_GETTER;
           _errorReporter.reportErrorForNode(
-            StaticTypeWarningCode.UNDEFINED_GETTER,
+            code,
             propertyName,
             [propertyName.name, typeReference.name],
           );
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 7577076..f070892 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -23,7 +23,9 @@
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/constructor_fields_verifier.dart';
+import 'package:analyzer/src/error/correct_override.dart';
 import 'package:analyzer/src/error/duplicate_definition_verifier.dart';
+import 'package:analyzer/src/error/getter_setter_types_verifier.dart';
 import 'package:analyzer/src/error/literal_element_verifier.dart';
 import 'package:analyzer/src/error/required_parameters_verifier.dart';
 import 'package:analyzer/src/error/type_arguments_verifier.dart';
@@ -624,7 +626,12 @@
     _enclosingExtension = node.declaredElement;
     _duplicateDefinitionVerifier.checkExtension(node);
     _checkForFinalNotInitializedInClass(node.members);
-    _checkForMismatchedAccessorTypesInExtension(node);
+
+    GetterSetterTypesVerifier(
+      typeSystem: _typeSystem,
+      errorReporter: _errorReporter,
+    ).checkExtension(node);
+
     final name = node.name;
     if (name != null) {
       _checkForBuiltInIdentifierAsName(
@@ -722,24 +729,21 @@
     ExecutableElement outerFunction = _enclosingFunction;
     try {
       SimpleIdentifier identifier = node.name;
-      String methodName = "";
-      if (identifier != null) {
-        methodName = identifier.name;
-      }
       _enclosingFunction = functionElement;
       TypeAnnotation returnType = node.returnType;
-      if (node.isSetter || node.isGetter) {
-        _checkForMismatchedAccessorTypes(node, methodName);
-        if (node.isSetter) {
-          FunctionExpression functionExpression = node.functionExpression;
-          if (functionExpression != null) {
-            _checkForWrongNumberOfParametersForSetter(
-                identifier, functionExpression.parameters);
-          }
-          _checkForNonVoidReturnTypeForSetter(returnType);
-        }
+      if (node.isGetter) {
+        GetterSetterTypesVerifier(
+          typeSystem: _typeSystem,
+          errorReporter: _errorReporter,
+        ).checkGetter(node.name, node.declaredElement);
       }
       if (node.isSetter) {
+        FunctionExpression functionExpression = node.functionExpression;
+        if (functionExpression != null) {
+          _checkForWrongNumberOfParametersForSetter(
+              identifier, functionExpression.parameters);
+        }
+        _checkForNonVoidReturnTypeForSetter(returnType);
         _checkForInvalidModifierOnBody(node.functionExpression.body,
             CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER);
       }
@@ -934,6 +938,12 @@
       _isInStaticMethod = node.isStatic;
       _enclosingFunction = node.declaredElement;
       TypeAnnotation returnType = node.returnType;
+      if (node.isStatic && node.isGetter) {
+        GetterSetterTypesVerifier(
+          typeSystem: _typeSystem,
+          errorReporter: _errorReporter,
+        ).checkGetter(node.name, node.declaredElement);
+      }
       if (node.isSetter) {
         _checkForInvalidModifierOnBody(
             node.body, CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER);
@@ -3374,86 +3384,6 @@
   }
 
   /**
-   * Check to make sure that all similarly typed accessors are of the same type
-   * (including inherited accessors).
-   *
-   * See [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES].
-   */
-  void _checkForMismatchedAccessorTypes(
-      Declaration accessorDeclaration, String accessorTextName) {
-    ExecutableElement accessorElement =
-        accessorDeclaration.declaredElement as ExecutableElement;
-    if (accessorElement is PropertyAccessorElement) {
-      PropertyAccessorElement counterpartAccessor;
-      if (accessorElement.isGetter) {
-        counterpartAccessor = accessorElement.correspondingSetter;
-      } else {
-        counterpartAccessor = accessorElement.correspondingGetter;
-        // If the setter and getter are in the same enclosing element, return,
-        // this prevents having MISMATCHED_GETTER_AND_SETTER_TYPES reported twice.
-        if (counterpartAccessor != null &&
-            identical(counterpartAccessor.enclosingElement,
-                accessorElement.enclosingElement)) {
-          return;
-        }
-      }
-      if (counterpartAccessor == null) {
-        return;
-      }
-      // Default of null == no accessor or no type (dynamic)
-      DartType getterType;
-      DartType setterType;
-      // Get an existing counterpart accessor if any.
-      if (accessorElement.isGetter) {
-        getterType = _getGetterType(accessorElement);
-        setterType = _getSetterType(counterpartAccessor);
-      } else if (accessorElement.isSetter) {
-        setterType = _getSetterType(accessorElement);
-        getterType = _getGetterType(counterpartAccessor);
-      }
-      // If either types are not assignable to each other, report an error
-      // (if the getter is null, it is dynamic which is assignable to everything).
-      if (setterType != null &&
-          getterType != null &&
-          !_typeSystem.isAssignableTo(getterType, setterType)) {
-        _errorReporter.reportErrorForNode(
-            StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES,
-            accessorDeclaration,
-            [accessorTextName, getterType, setterType, accessorTextName]);
-      }
-    }
-  }
-
-  /**
-   * Check whether all similarly named accessors have consistent types.
-   */
-  void _checkForMismatchedAccessorTypesInExtension(
-      ExtensionDeclaration extension) {
-    for (ClassMember member in extension.members) {
-      if (member is MethodDeclaration && member.isGetter) {
-        PropertyAccessorElement getterElement =
-            member.declaredElement as PropertyAccessorElement;
-        PropertyAccessorElement setterElement =
-            getterElement.correspondingSetter;
-        if (setterElement != null) {
-          DartType getterType = _getGetterType(getterElement);
-          DartType setterType = _getSetterType(setterElement);
-          if (setterType != null &&
-              getterType != null &&
-              !_typeSystem.isAssignableTo(getterType, setterType)) {
-            SimpleIdentifier nameNode = member.name;
-            String name = nameNode.name;
-            _errorReporter.reportErrorForNode(
-                StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES,
-                nameNode,
-                [name, getterType, setterType, name]);
-          }
-        }
-      }
-    }
-  }
-
-  /**
    * Check to make sure that the given switch [statement] whose static type is
    * an enum type either have a default case or include all of the enum
    * constants.
@@ -3643,15 +3573,23 @@
       ExecutableElement mixinMember =
           _inheritanceManager.getMember(mixinType, nameObject, forSuper: true);
 
-      if (mixinMember != null &&
-          !_typeSystem.isOverrideSubtypeOf(
-              superMember.type, mixinMember.type)) {
-        _errorReporter.reportErrorForNode(
+      if (mixinMember != null) {
+        var isCorrect = CorrectOverrideHelper(
+          typeSystem: _typeSystem,
+          errorReporter: _errorReporter,
+          thisMember: superMember,
+        ).isCorrectOverrideOf(
+          superMember: mixinMember,
+        );
+        if (!isCorrect) {
+          _errorReporter.reportErrorForNode(
             CompileTimeErrorCode
                 .MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE,
             mixinName.name,
-            [name, mixinMember.type, superMember.type]);
-        return true;
+            [name, mixinMember.type, superMember.type],
+          );
+          return true;
+        }
       }
     }
     return false;
@@ -5416,18 +5354,6 @@
   }
 
   /**
-   * Return the return type of the given [getter].
-   */
-  DartType _getGetterType(PropertyAccessorElement getter) {
-    FunctionType functionType = getter.type;
-    if (functionType != null) {
-      return functionType.returnType;
-    } else {
-      return null;
-    }
-  }
-
-  /**
    * Return a human-readable representation of the kind of the [element].
    */
   String _getKind(ExecutableElement element) {
@@ -5500,19 +5426,6 @@
     return buffer.toString();
   }
 
-  /**
-   * Return the type of the first and only parameter of the given [setter].
-   */
-  DartType _getSetterType(PropertyAccessorElement setter) {
-    // Get the parameters for MethodDeclaration or FunctionDeclaration
-    List<ParameterElement> setterParameters = setter.parameters;
-    // If there are no setter parameters, return no type.
-    if (setterParameters.isEmpty) {
-      return null;
-    }
-    return setterParameters[0].type;
-  }
-
   /// Returns whether [node] overrides a concrete method.
   bool _hasConcreteSuperMethod(MethodDeclaration node) {
     ClassElement classElement = node.declaredElement.enclosingElement;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 29fe5a7..90fa793 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2000,6 +2000,7 @@
       // TODO(jmesserly): should we store this earlier in resolution?
       // Or look it up, instead of jumping backwards through the Member?
       var rawElement = originalElement.declaration;
+      rawElement = toLegacyElement(rawElement);
 
       FunctionType constructorType =
           typeAnalyzer.constructorToGenericFunctionType(rawElement);
@@ -2019,15 +2020,20 @@
 
         // Update the static element as well. This is used in some cases, such
         // as computing constant values. It is stored in two places.
-        constructor.staticElement =
-            ConstructorMember.from(rawElement, inferred.returnType);
+        var constructorElement = ConstructorMember.from(
+          rawElement,
+          inferred.returnType,
+        );
+        constructorElement = toLegacyElement(constructorElement);
+        constructor.staticElement = constructorElement;
         node.staticElement = constructor.staticElement;
       }
     }
 
     if (inferred == null) {
-      InferenceContext.setType(node.argumentList,
-          _elementTypeProvider.safeExecutableType(originalElement));
+      var type = _elementTypeProvider.safeExecutableType(originalElement);
+      type = toLegacyTypeIfOptOut(type);
+      InferenceContext.setType(node.argumentList, type);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 52ef3d6..295cb6f 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -13,7 +13,6 @@
 import 'package:analyzer/src/dart/element/member.dart' show ConstructorMember;
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
-import 'package:analyzer/src/dart/element/type_schema_elimination.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/element_type_provider.dart';
@@ -165,7 +164,7 @@
         if (p.hasImplicitType &&
             (_elementTypeProvider.getVariableType(p) == null ||
                 _elementTypeProvider.getVariableType(p).isDynamic)) {
-          inferredType = greatestClosure(_typeProvider, inferredType);
+          inferredType = _typeSystem.greatestClosure(inferredType);
           if (inferredType.isDartCoreNull) {
             inferredType = _typeProvider.objectType;
           }
@@ -233,18 +232,9 @@
    */
   @override
   void visitAwaitExpression(AwaitExpression node) {
-    // Await the Future. This results in whatever type is (ultimately) returned.
-    DartType awaitType(DartType awaitedType) {
-      if (awaitedType == null) {
-        return null;
-      }
-      if (awaitedType.isDartAsyncFutureOr) {
-        return awaitType((awaitedType as InterfaceType).typeArguments[0]);
-      }
-      return _typeSystem.flatten(awaitedType);
-    }
-
-    _recordStaticType(node, awaitType(_getStaticType(node.expression)));
+    DartType resultType = _getStaticType(node.expression);
+    if (resultType != null) resultType = _typeSystem.flatten(resultType);
+    _recordStaticType(node, resultType);
   }
 
   /**
@@ -935,6 +925,7 @@
     // TODO(jmesserly): should we store this earlier in resolution?
     // Or look it up, instead of jumping backwards through the Member?
     var rawElement = originalElement.declaration;
+    rawElement = _resolver.toLegacyElement(rawElement);
 
     FunctionType constructorType = constructorToGenericFunctionType(rawElement);
 
@@ -957,8 +948,12 @@
       constructor.type.type = inferred.returnType;
       // Update the static element as well. This is used in some cases, such as
       // computing constant values. It is stored in two places.
-      constructor.staticElement =
-          ConstructorMember.from(rawElement, inferred.returnType);
+      var constructorElement = ConstructorMember.from(
+        rawElement,
+        inferred.returnType,
+      );
+      constructorElement = _resolver.toLegacyElement(constructorElement);
+      constructor.staticElement = constructorElement;
       node.staticElement = constructor.staticElement;
     }
   }
@@ -1032,6 +1027,7 @@
     if (inferredElement == null || inferredElement.isStatic) {
       return false;
     }
+    inferredElement = _resolver.toLegacyElement(inferredElement);
     DartType inferredType =
         _elementTypeProvider.getExecutableReturnType(inferredElement);
     if (nodeType != null &&
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index b984405..ed9acc4 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/dart/element/member.dart' show TypeParameterMember;
 import 'package:analyzer/src/dart/element/normalize.dart';
 import 'package:analyzer/src/dart/element/nullability_eliminator.dart';
+import 'package:analyzer/src/dart/element/runtime_type_equality.dart';
 import 'package:analyzer/src/dart/element/top_merge.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
@@ -85,6 +86,9 @@
   /// The cached instance of `Object?`.
   InterfaceTypeImpl _objectQuestionCached;
 
+  /// The cached instance of `Object*`.
+  InterfaceTypeImpl _objectStarCached;
+
   /// The cached instance of `Object!`.
   InterfaceTypeImpl _objectNoneCached;
 
@@ -110,6 +114,10 @@
       _objectQuestionCached ??= (typeProvider.objectType as TypeImpl)
           .withNullability(NullabilitySuffix.question);
 
+  InterfaceTypeImpl get objectStar =>
+      _objectStarCached ??= (typeProvider.objectType as TypeImpl)
+          .withNullability(NullabilitySuffix.star);
+
   InterfaceType get _interfaceTypeFunctionNone {
     return typeProvider.functionType.element.instantiate(
       typeArguments: const [],
@@ -138,6 +146,35 @@
     return ft.parameters.any((p) => predicate(p.type));
   }
 
+  /**
+   * Eliminates type variables from the context [type], replacing them with
+   * `Null` or `Object` as appropriate.
+   *
+   * For example in `List<T> list = const []`, the context type for inferring
+   * the list should be changed from `List<T>` to `List<Null>` so the constant
+   * doesn't depend on the type variables `T` (because it can't be canonicalized
+   * at compile time, as `T` is unknown).
+   *
+   * Conceptually this is similar to the "least closure", except instead of
+   * eliminating `?` ([UnknownInferredType]) it eliminates all type variables
+   * ([TypeParameterType]).
+   *
+   * The equivalent CFE code can be found in the `TypeVariableEliminator` class.
+   */
+  DartType eliminateTypeVariables(DartType type) {
+    if (isNonNullableByDefault) {
+      return _TypeVariableEliminator(
+        objectQuestion,
+        NeverTypeImpl.instance,
+      ).substituteType(type);
+    } else {
+      return _TypeVariableEliminator(
+        objectNone,
+        typeProvider.nullType,
+      ).substituteType(type);
+    }
+  }
+
   /// Given a type t, if t is an interface type with a call method
   /// defined, return the function type for the call method, otherwise
   /// return null.
@@ -669,7 +706,7 @@
 
     if (contextReturnType != null) {
       if (isConst) {
-        contextReturnType = _eliminateTypeVariables(contextReturnType);
+        contextReturnType = eliminateTypeVariables(contextReturnType);
       }
       inferrer.constrainReturnType(declaredReturnType, contextReturnType);
     }
@@ -1444,6 +1481,11 @@
 
   /// Return `true` for any type which is in the equivalence class of top types.
   bool isTop(DartType type) {
+    // TOP(?) is true
+    if (identical(type, UnknownInferredType.instance)) {
+      return true;
+    }
+
     // TOP(dynamic) is true
     if (identical(type, DynamicTypeImpl.instance)) {
       return true;
@@ -1486,6 +1528,13 @@
     return NormalizeHelper(this).normalize(T);
   }
 
+  /// Return `true` if runtime types [T1] and [T2] are equal.
+  ///
+  /// nnbd/feature-specification.md#runtime-type-equality-operator
+  bool runtimeTypesEqual(DartType T1, DartType T2) {
+    return RuntimeTypeEqualityHelper(this).equal(T1, T2);
+  }
+
   @override
   DartType refineBinaryExpressionType(DartType leftType, TokenType operator,
       DartType rightType, DartType currentType) {
@@ -1578,25 +1627,6 @@
   }
 
   /**
-   * Eliminates type variables from the context [type], replacing them with
-   * `Null` or `Object` as appropriate.
-   *
-   * For example in `List<T> list = const []`, the context type for inferring
-   * the list should be changed from `List<T>` to `List<Null>` so the constant
-   * doesn't depend on the type variables `T` (because it can't be canonicalized
-   * at compile time, as `T` is unknown).
-   *
-   * Conceptually this is similar to the "least closure", except instead of
-   * eliminating `?` ([UnknownInferredType]) it eliminates all type variables
-   * ([TypeParameterType]).
-   *
-   * The equivalent CFE code can be found in the `TypeVariableEliminator` class.
-   */
-  DartType _eliminateTypeVariables(DartType type) {
-    return TypeVariableEliminator(typeProvider).substituteType(type);
-  }
-
-  /**
    * Compute the greatest lower bound of function types [f] and [g].
    *
    * https://github.com/dart-lang/language
@@ -2400,14 +2430,10 @@
         return lower;
       }
       if (!identical(UnknownInferredType.instance, upper)) {
-        return toKnownType
-            ? greatestClosure(_typeSystem.typeProvider, upper)
-            : upper;
+        return toKnownType ? _typeSystem.greatestClosure(upper) : upper;
       }
       if (!identical(UnknownInferredType.instance, lower)) {
-        return toKnownType
-            ? leastClosure(_typeSystem.typeProvider, lower)
-            : lower;
+        return toKnownType ? _typeSystem.leastClosure(lower) : lower;
       }
       return upper;
     } else {
@@ -2418,14 +2444,10 @@
         return upper;
       }
       if (!identical(UnknownInferredType.instance, lower)) {
-        return toKnownType
-            ? leastClosure(_typeSystem.typeProvider, lower)
-            : lower;
+        return toKnownType ? _typeSystem.leastClosure(lower) : lower;
       }
       if (!identical(UnknownInferredType.instance, upper)) {
-        return toKnownType
-            ? greatestClosure(_typeSystem.typeProvider, upper)
-            : upper;
+        return toKnownType ? _typeSystem.greatestClosure(upper) : upper;
       }
       return lower;
     }
@@ -2503,7 +2525,6 @@
         // GLB(A, FutureOr<B>) ==  GLB(FutureOr<B>, A)
         return _getGreatestLowerBound(t2, t1);
       }
-      return typeProvider.nullType;
     }
     return result;
   }
@@ -3727,16 +3748,67 @@
           strictInference: strictInference,
           typeProvider: typeProvider,
         );
-}
 
-class TypeVariableEliminator extends Substitution {
-  final TypeProvider _typeProvider;
+  /// Returns the greatest closure of the given type [schema] with respect to `?`.
+  ///
+  /// The greatest closure of a type schema `P` with respect to `?` is defined as
+  /// `P` with every covariant occurrence of `?` replaced with `Null`, and every
+  /// contravariant occurrence of `?` replaced with `Object`.
+  ///
+  /// If the schema contains no instances of `?`, the original schema object is
+  /// returned to avoid unnecessary allocation.
+  ///
+  /// Note that the closure of a type schema is a proper type.
+  ///
+  /// Note that the greatest closure of a type schema is always a supertype of
+  /// any type which matches the schema.
+  DartType greatestClosure(DartType schema) {
+    if (isNonNullableByDefault) {
+      return TypeSchemaEliminationVisitor.run(
+        topType: objectQuestion,
+        bottomType: NeverTypeImpl.instance,
+        isLeastClosure: false,
+        schema: schema,
+      );
+    } else {
+      return TypeSchemaEliminationVisitor.run(
+        topType: DynamicTypeImpl.instance,
+        bottomType: typeProvider.nullType,
+        isLeastClosure: false,
+        schema: schema,
+      );
+    }
+  }
 
-  TypeVariableEliminator(this._typeProvider);
-
-  @override
-  DartType getSubstitute(TypeParameterElement parameter, bool upperBound) {
-    return upperBound ? _typeProvider.nullType : _typeProvider.objectType;
+  /// Returns the least closure of the given type [schema] with respect to `?`.
+  ///
+  /// The least closure of a type schema `P` with respect to `?` is defined as
+  /// `P` with every covariant occurrence of `?` replaced with `Object`, an
+  /// every contravariant occurrence of `?` replaced with `Null`.
+  ///
+  /// If the schema contains no instances of `?`, the original schema object is
+  /// returned to avoid unnecessary allocation.
+  ///
+  /// Note that the closure of a type schema is a proper type.
+  ///
+  /// Note that the least closure of a type schema is always a subtype of any
+  /// type which matches the schema.
+  DartType leastClosure(DartType schema) {
+    if (isNonNullableByDefault) {
+      return TypeSchemaEliminationVisitor.run(
+        topType: objectQuestion,
+        bottomType: NeverTypeImpl.instance,
+        isLeastClosure: true,
+        schema: schema,
+      );
+    } else {
+      return TypeSchemaEliminationVisitor.run(
+        topType: DynamicTypeImpl.instance,
+        bottomType: typeProvider.nullType,
+        isLeastClosure: true,
+        schema: schema,
+      );
+    }
   }
 }
 
@@ -4055,3 +4127,18 @@
   @override
   String toString() => format('(type)', withNullability: true);
 }
+
+class _TypeVariableEliminator extends Substitution {
+  final DartType _topType;
+  final DartType _bottomType;
+
+  _TypeVariableEliminator(
+    this._topType,
+    this._bottomType,
+  );
+
+  @override
+  DartType getSubstitute(TypeParameterElement parameter, bool upperBound) {
+    return upperBound ? _bottomType : _topType;
+  }
+}
diff --git a/pkg/analyzer/lib/src/lint/pub.dart b/pkg/analyzer/lib/src/lint/pub.dart
index def9287..5b85e71 100644
--- a/pkg/analyzer/lib/src/lint/pub.dart
+++ b/pkg/analyzer/lib/src/lint/pub.dart
@@ -77,6 +77,7 @@
   PSGitRepo get git;
   PSHost get host;
   PSNode get name;
+  PSEntry get path;
   PSEntry get version;
 }
 
@@ -150,6 +151,8 @@
   @override
   PSNode name;
   @override
+  PSEntry path;
+  @override
   PSEntry version;
   @override
   PSHost host;
@@ -181,6 +184,9 @@
         }
         YamlScalar key = k;
         switch (key.toString()) {
+          case 'path':
+            dep.path = _processScalar(key, v);
+            break;
           case 'version':
             dep.version = _processScalar(key, v);
             break;
diff --git a/pkg/analyzer/lib/src/summary2/default_value_resolver.dart b/pkg/analyzer/lib/src/summary2/default_value_resolver.dart
index f879cd1..3a68f9e 100644
--- a/pkg/analyzer/lib/src/summary2/default_value_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/default_value_resolver.dart
@@ -16,6 +16,7 @@
 class DefaultValueResolver {
   final Linker _linker;
   final LibraryElementImpl _libraryElement;
+  final TypeSystemImpl _typeSystem;
 
   ClassElement _classElement;
   CompilationUnitElement _unitElement;
@@ -24,7 +25,8 @@
 
   AstResolver _astResolver;
 
-  DefaultValueResolver(this._linker, this._libraryElement);
+  DefaultValueResolver(this._linker, this._libraryElement)
+      : _typeSystem = _libraryElement.typeSystem;
 
   void resolve() {
     for (CompilationUnitElementImpl unit in _libraryElement.units) {
@@ -100,8 +102,7 @@
     var node = _defaultParameter(parameter);
     if (node == null) return;
 
-    var contextType = TypeVariableEliminator(_libraryElement.typeProvider)
-        .substituteType(parameter.type);
+    var contextType = _typeSystem.eliminateTypeVariables(parameter.type);
 
     _astResolver ??= AstResolver(_linker, _unitElement, _scope);
     _astResolver.resolve(
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index d611abf..95d38f6 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -14,6 +14,21 @@
 import 'package:meta/meta.dart';
 
 mixin ElementsTypesMixin {
+  InterfaceType get boolNone {
+    var element = typeProvider.boolElement;
+    return interfaceTypeNone(element);
+  }
+
+  InterfaceType get boolQuestion {
+    var element = typeProvider.boolElement;
+    return interfaceTypeQuestion(element);
+  }
+
+  InterfaceType get boolStar {
+    var element = typeProvider.boolElement;
+    return interfaceTypeStar(element);
+  }
+
   InterfaceType get doubleNone {
     var element = typeProvider.doubleType.element;
     return interfaceTypeNone(element);
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 7903489..11645ae 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -3528,16 +3528,6 @@
 ''');
   }
 
-  @failingTest
-  test_undefinedEnumConstant() async {
-    await assertNoErrorsInCode(r'''
-enum E { ONE }
-E e() {
-  return E.TWO;
-}
-''');
-  }
-
   test_undefinedSuperMethod_field() async {
     await assertNoErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 37a9f11..fc78f6a 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -652,20 +652,6 @@
     );
   }
 
-  test_getterAndSetterWithDifferentTypes() async {
-    await assertErrorsInCode(r'''
-class A {
-  int get f => 0;
-  void set f(String s) {}
-}
-g (A a) {
-  a.f = a.f.toString();
-}''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 20, 1),
-    ]);
-    verifyTestResolved();
-  }
-
   test_hasReferenceToSuper() async {
     await assertNoErrorsInCode(r'''
 class A {}
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index d388a8a..9e1de0d 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -1173,18 +1173,6 @@
     ]);
   }
 
-  test_undefinedEnumConstant() async {
-    // We should be reporting UNDEFINED_ENUM_CONSTANT here.
-    await assertErrorsInCode(r'''
-enum E { ONE }
-E e() {
-  return E.TWO;
-}
-''', [
-      error(StaticTypeWarningCode.UNDEFINED_GETTER, 34, 3),
-    ]);
-  }
-
   test_unqualifiedReferenceToNonLocalStaticMember_getter() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 016cab85..06c9a55 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -2584,7 +2584,13 @@
     var invocation = findNode.methodInvocation('codeUnitAt');
     assertType(invocation, 'int');
     assertInvokeType(invocation, 'int Function(int)');
-    assertElement(invocation.methodName, stringElement.getMethod('codeUnitAt'));
+    assertElement(
+      invocation.methodName,
+      elementMatcher(
+        stringElement.getMethod('codeUnitAt'),
+        isLegacy: isNullSafetySdkAndLegacyLibrary,
+      ),
+    );
 
     var aRef = invocation.target;
     assertElement(aRef, findElement.topGet('a'));
@@ -8373,7 +8379,7 @@
     expect(result.errors, isNotEmpty);
 
     PropertyAccessorElement objectHashCode =
-        typeProvider.objectType.getGetter('hashCode');
+        objectElement.getGetter('hashCode');
     TopLevelVariableElement foo = _getTopLevelVariable(result, 'foo');
 
     List<Statement> statements = _getMainStatements(result);
@@ -8384,16 +8390,28 @@
 
     {
       PrefixedIdentifier prefixed = propertyAccess.target;
-      expect(prefixed.staticElement, same(objectHashCode));
-      expect(prefixed.staticType, typeProvider.intType);
+      assertPrefixedIdentifier(
+        prefixed,
+        element: elementMatcher(
+          objectHashCode,
+          isLegacy: isNullSafetySdkAndLegacyLibrary,
+        ),
+        type: 'int',
+      );
 
       SimpleIdentifier prefix = prefixed.prefix;
       expect(prefix.staticElement, same(foo.getter));
       expect(prefix.staticType, typeProvider.objectType);
 
       SimpleIdentifier identifier = prefixed.identifier;
-      expect(identifier.staticElement, same(objectHashCode));
-      expect(identifier.staticType, typeProvider.intType);
+      assertSimpleIdentifier(
+        identifier,
+        element: elementMatcher(
+          objectHashCode,
+          isLegacy: isNullSafetySdkAndLegacyLibrary,
+        ),
+        type: 'int',
+      );
     }
 
     SimpleIdentifier property = propertyAccess.propertyName;
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 3cd4c5d..9da9fb7 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -23,6 +23,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchTest);
     defineReflectiveTests(SearchWithExtensionMethodsTest);
+    defineReflectiveTests(SearchWithNnbdTest);
   });
 }
 
@@ -1791,3 +1792,72 @@
     await _verifyReferences(element, expected);
   }
 }
+
+@reflectiveTest
+class SearchWithNnbdTest extends SearchTest {
+  @override
+  AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
+    ..contextFeatures = FeatureSet.forTesting(
+        sdkVersion: '2.7.0', additionalFeatures: [Feature.non_nullable]);
+
+  test_searchReferences_ImportElement_noPrefix_optIn_fromOptOut() async {
+    newFile('/test/lib/a.dart', content: r'''
+class N1 {}
+void N2() {}
+int get N3 => 0;
+set N4(int _) {}
+''');
+
+    await _resolveTestUnit('''
+// @dart = 2.7
+import 'a.dart';
+
+main() {
+  N1;
+  N2();
+  N3;
+}
+''');
+    ImportElement element = testLibraryElement.imports[0];
+    Element mainElement = _findElement('main');
+    var kind = SearchResultKind.REFERENCE;
+    var expected = [
+      _expectId(mainElement, kind, 'N1;', length: 0),
+      _expectId(mainElement, kind, 'N2();', length: 0),
+      _expectId(mainElement, kind, 'N3;', length: 0),
+//      _expectId(mainElement, kind, 'N4 =', length: 0),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ImportElement_withPrefix_optIn_fromOptOut() async {
+    newFile('/test/lib/a.dart', content: r'''
+class N1 {}
+void N2() {}
+int get N3 => 0;
+set N4(int _) {}
+''');
+
+    await _resolveTestUnit('''
+// @dart = 2.7
+import 'a.dart' as a;
+
+main() {
+  a.N1;
+  a.N2();
+  a.N3;
+}
+''');
+    ImportElement element = testLibraryElement.imports[0];
+    Element mainElement = _findElement('main');
+    var kind = SearchResultKind.REFERENCE;
+    var length = 'a.'.length;
+    var expected = [
+      _expectId(mainElement, kind, 'a.N1;', length: length),
+      _expectId(mainElement, kind, 'a.N2()', length: length),
+      _expectId(mainElement, kind, 'a.N3', length: length),
+//      _expectId(mainElement, kind, 'a.N4', length: length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/element/runtime_type_equality_test.dart b/pkg/analyzer/test/src/dart/element/runtime_type_equality_test.dart
new file mode 100644
index 0000000..8a1b16f
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/element/runtime_type_equality_test.dart
@@ -0,0 +1,360 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/generated/resolver.dart' show TypeSystemImpl;
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../generated/elements_types_mixin.dart';
+import '../../../generated/test_analysis_context.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RuntimeTypeEqualityTypeTest);
+  });
+}
+
+@reflectiveTest
+class RuntimeTypeEqualityTypeTest with ElementsTypesMixin {
+  @override
+  TypeProvider typeProvider;
+
+  TypeSystemImpl typeSystem;
+
+  FeatureSet get testFeatureSet {
+    return FeatureSet.forTesting(
+      additionalFeatures: [Feature.non_nullable],
+    );
+  }
+
+  void setUp() {
+    var analysisContext = TestAnalysisContext(
+      featureSet: testFeatureSet,
+    );
+    typeProvider = analysisContext.typeProviderNonNullableByDefault;
+    typeSystem = analysisContext.typeSystemNonNullableByDefault;
+  }
+
+  test_dynamic() {
+    _equal(dynamicNone, dynamicNone);
+    _notEqual(dynamicNone, voidNone);
+    _notEqual(dynamicNone, intNone);
+
+    _notEqual(dynamicNone, neverNone);
+    _notEqual(dynamicNone, neverQuestion);
+    _notEqual(dynamicNone, neverStar);
+  }
+
+  test_functionType_parameters() {
+    void check(
+      ParameterElement T1_parameter,
+      ParameterElement T2_parameter,
+      bool expected,
+    ) {
+      var T1 = functionTypeNone(
+        returnType: voidNone,
+        parameters: [T1_parameter],
+      );
+      var T2 = functionTypeNone(
+        returnType: voidNone,
+        parameters: [T2_parameter],
+      );
+      _check(T1, T2, expected);
+    }
+
+    {
+      void checkRequiredParameter(
+        DartType T1_type,
+        DartType T2_type,
+        bool expected,
+      ) {
+        check(
+          requiredParameter(type: T1_type),
+          requiredParameter(type: T2_type),
+          expected,
+        );
+      }
+
+      checkRequiredParameter(intNone, intNone, true);
+      checkRequiredParameter(intNone, intQuestion, false);
+      checkRequiredParameter(intNone, intStar, true);
+
+      checkRequiredParameter(intQuestion, intNone, false);
+      checkRequiredParameter(intQuestion, intQuestion, true);
+      checkRequiredParameter(intQuestion, intStar, false);
+
+      checkRequiredParameter(intStar, intNone, true);
+      checkRequiredParameter(intStar, intQuestion, false);
+      checkRequiredParameter(intStar, intStar, true);
+
+      check(
+        requiredParameter(type: intNone, name: 'a'),
+        requiredParameter(type: intNone, name: 'b'),
+        true,
+      );
+
+      check(
+        requiredParameter(type: intNone),
+        positionalParameter(type: intNone),
+        false,
+      );
+
+      check(
+        requiredParameter(type: intNone),
+        namedParameter(type: intNone, name: 'a'),
+        false,
+      );
+
+      check(
+        requiredParameter(type: intNone),
+        namedRequiredParameter(type: intNone, name: 'a'),
+        false,
+      );
+    }
+
+    {
+      check(
+        namedParameter(type: intNone, name: 'a'),
+        namedParameter(type: intNone, name: 'a'),
+        true,
+      );
+
+      check(
+        namedParameter(type: intNone, name: 'a'),
+        namedParameter(type: boolNone, name: 'a'),
+        false,
+      );
+
+      check(
+        namedParameter(type: intNone, name: 'a'),
+        namedParameter(type: intNone, name: 'b'),
+        false,
+      );
+
+      check(
+        namedParameter(type: intNone, name: 'a'),
+        namedRequiredParameter(type: intNone, name: 'a'),
+        false,
+      );
+    }
+
+    {
+      check(
+        namedRequiredParameter(type: intNone, name: 'a'),
+        namedRequiredParameter(type: intNone, name: 'a'),
+        true,
+      );
+
+      check(
+        namedRequiredParameter(type: intNone, name: 'a'),
+        namedRequiredParameter(type: boolNone, name: 'a'),
+        false,
+      );
+
+      check(
+        namedRequiredParameter(type: intNone, name: 'a'),
+        namedRequiredParameter(type: intNone, name: 'b'),
+        false,
+      );
+
+      check(
+        namedRequiredParameter(type: intNone, name: 'a'),
+        namedParameter(type: intNone, name: 'a'),
+        false,
+      );
+    }
+  }
+
+  test_functionType_returnType() {
+    void check(
+      DartType T1_returnType,
+      DartType T2_returnType,
+      bool expected,
+    ) {
+      var T1 = functionTypeNone(
+        returnType: T1_returnType,
+      );
+      var T2 = functionTypeNone(
+        returnType: T2_returnType,
+      );
+      _check(T1, T2, expected);
+    }
+
+    check(intNone, intNone, true);
+    check(intNone, intQuestion, false);
+    check(intNone, intStar, true);
+  }
+
+  test_functionType_typeParameters() {
+    {
+      var T1_T = typeParameter('T', bound: numNone);
+      _check(
+        functionTypeNone(
+          typeFormals: [T1_T],
+          returnType: voidNone,
+        ),
+        functionTypeNone(
+          returnType: voidNone,
+        ),
+        false,
+      );
+    }
+
+    {
+      var T1_T = typeParameter('T', bound: numNone);
+      var T2_U = typeParameter('U');
+      _check(
+        functionTypeNone(
+          typeFormals: [T1_T],
+          returnType: voidNone,
+        ),
+        functionTypeNone(
+          typeFormals: [T2_U],
+          returnType: voidNone,
+        ),
+        false,
+      );
+    }
+
+    {
+      var T1_T = typeParameter('T');
+      var T2_U = typeParameter('U');
+      _check(
+        functionTypeNone(
+          typeFormals: [T1_T],
+          returnType: typeParameterTypeNone(T1_T),
+          parameters: [
+            requiredParameter(
+              type: typeParameterTypeNone(T1_T),
+            )
+          ],
+        ),
+        functionTypeNone(
+          typeFormals: [T2_U],
+          returnType: typeParameterTypeNone(T2_U),
+          parameters: [
+            requiredParameter(
+              type: typeParameterTypeNone(T2_U),
+            )
+          ],
+        ),
+        true,
+      );
+    }
+  }
+
+  test_interfaceType() {
+    _notEqual(intNone, boolNone);
+
+    _equal(intNone, intNone);
+    _notEqual(intNone, intQuestion);
+    _equal(intNone, intStar);
+
+    _notEqual(intQuestion, intNone);
+    _equal(intQuestion, intQuestion);
+    _notEqual(intQuestion, intStar);
+
+    _equal(intStar, intNone);
+    _notEqual(intStar, intQuestion);
+    _equal(intStar, intStar);
+  }
+
+  test_interfaceType_typeArguments() {
+    void _equal(DartType T1, DartType T2) {
+      this._equal(listNone(T1), listNone(T2));
+    }
+
+    void _notEqual(DartType T1, DartType T2) {
+      this._notEqual(listNone(T1), listNone(T2));
+    }
+
+    _notEqual(intNone, boolNone);
+
+    _equal(intNone, intNone);
+    _notEqual(intNone, intQuestion);
+    _equal(intNone, intStar);
+
+    _notEqual(intQuestion, intNone);
+    _equal(intQuestion, intQuestion);
+    _notEqual(intQuestion, intStar);
+
+    _equal(intStar, intNone);
+    _notEqual(intStar, intQuestion);
+    _equal(intStar, intStar);
+  }
+
+  test_never() {
+    _equal(neverNone, neverNone);
+    _notEqual(neverNone, neverQuestion);
+    _equal(neverNone, neverStar);
+    _notEqual(neverNone, intNone);
+
+    _notEqual(neverQuestion, neverNone);
+    _equal(neverQuestion, neverQuestion);
+    _notEqual(neverQuestion, neverStar);
+    _notEqual(neverQuestion, intNone);
+    _equal(neverQuestion, nullNone);
+
+    _equal(neverStar, neverNone);
+    _notEqual(neverStar, neverQuestion);
+    _equal(neverStar, neverStar);
+    _notEqual(neverStar, intNone);
+  }
+
+  test_norm() {
+    _equal(futureOrNone(objectNone), objectNone);
+    _equal(futureOrNone(neverNone), futureNone(neverNone));
+    _equal(neverQuestion, nullNone);
+  }
+
+  test_void() {
+    _equal(voidNone, voidNone);
+    _notEqual(voidNone, dynamicNone);
+    _notEqual(voidNone, intNone);
+
+    _notEqual(voidNone, neverNone);
+    _notEqual(voidNone, neverQuestion);
+    _notEqual(voidNone, neverStar);
+  }
+
+  void _check(DartType T1, DartType T2, bool expected) {
+    bool result;
+
+    result = typeSystem.runtimeTypesEqual(T1, T2);
+    if (result != expected) {
+      fail('''
+Expected ${expected ? 'equal' : 'not equal'}.
+T1: ${_typeString(T1)}
+T2: ${_typeString(T2)}
+''');
+    }
+
+    result = typeSystem.runtimeTypesEqual(T2, T1);
+    if (result != expected) {
+      fail('''
+Expected ${expected ? 'equal' : 'not equal'}.
+T1: ${_typeString(T1)}
+T2: ${_typeString(T2)}
+''');
+    }
+  }
+
+  void _equal(DartType T1, DartType T2) {
+    _check(T1, T2, true);
+  }
+
+  void _notEqual(DartType T1, DartType T2) {
+    _check(T1, T2, false);
+  }
+
+  String _typeString(TypeImpl type) {
+    if (type == null) return null;
+    return type.getDisplayString(withNullability: true);
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/element/test_all.dart b/pkg/analyzer/test/src/dart/element/test_all.dart
index 8c6df5f..3f89e34 100644
--- a/pkg/analyzer/test/src/dart/element/test_all.dart
+++ b/pkg/analyzer/test/src/dart/element/test_all.dart
@@ -11,6 +11,7 @@
 import 'normalize_type_test.dart' as normalize_type;
 import 'nullability_eliminator_test.dart' as nullability_eliminator;
 import 'nullable_test.dart' as nullable;
+import 'runtime_type_equality_test.dart' as runtime_type_equality;
 import 'subtype_test.dart' as subtype;
 import 'top_merge_test.dart' as top_merge;
 import 'type_algebra_test.dart' as type_algebra;
@@ -27,6 +28,7 @@
     normalize_type.main();
     nullability_eliminator.main();
     nullable.main();
+    runtime_type_equality.main();
     subtype.main();
     top_merge.main();
     type_algebra.main();
diff --git a/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart b/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
index 78fd11a..b7a32e6 100644
--- a/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
+++ b/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_visitor.dart';
 import 'package:analyzer/src/generated/resolver.dart' show TypeSystemImpl;
+import 'package:analyzer/src/generated/type_system.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -488,6 +489,7 @@
 
     // TOP(dynamic) is true
     isTop(dynamicNone);
+    isTop(UnknownInferredType.instance);
 
     // TOP(void) is true
     isTop(voidNone);
@@ -2226,5 +2228,8 @@
   }
 
   @override
+  void visitUnknownInferredType(UnknownInferredType type) {}
+
+  @override
   void visitVoidType(VoidType type) {}
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 72deb9d..953b08a 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -456,155 +456,6 @@
     expect(method.isStatic, isTrue);
   }
 
-  test_error_mismatchedGetterAndSetterTypes_class() async {
-    await assertErrorsInCode(r'''
-class C {
-  int get foo => 0;
-  set foo(String _) {}
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 20, 3),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_interfaces() async {
-    await assertErrorsInCode(r'''
-class A {
-  int get foo {
-    return 0;
-  }
-}
-
-class B {
-  set foo(String _) {}
-}
-
-abstract class X implements A, B {}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 98, 1),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_OK_private_getter() async {
-    newFile('/test/lib/a.dart', content: r'''
-class A {
-  int get _foo => 0;
-}
-''');
-    await assertErrorsInCode(r'''
-import 'a.dart';
-
-class B extends A {
-  set _foo(String _) {}
-}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 44, 4),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_OK_private_interfaces() async {
-    newFile('/test/lib/a.dart', content: r'''
-class A {
-  int get _foo => 0;
-}
-''');
-    newFile('/test/lib/b.dart', content: r'''
-class B {
-  set _foo(String _) {}
-}
-''');
-    await assertNoErrorsInCode(r'''
-import 'a.dart';
-import 'b.dart';
-
-class X implements A, B {}
-''');
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_OK_private_interfaces2() async {
-    newFile('/test/lib/a.dart', content: r'''
-class A {
-  int get _foo => 0;
-}
-
-class B {
-  set _foo(String _) {}
-}
-''');
-    await assertNoErrorsInCode(r'''
-import 'a.dart';
-
-class X implements A, B {}
-''');
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_OK_private_setter() async {
-    newFile('/test/lib/a.dart', content: r'''
-class A {
-  set _foo(String _) {}
-}
-''');
-    await assertErrorsInCode(r'''
-import 'a.dart';
-
-class B extends A {
-  int get _foo => 0;
-}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 48, 4),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_OK_setterParameter_0() async {
-    await assertErrorsInCode(r'''
-class C {
-  int get foo => 0;
-  set foo() {}
-}
-''', [
-      error(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER, 36, 3),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_OK_setterParameter_2() async {
-    await assertErrorsInCode(r'''
-class C {
-  int get foo => 0;
-  set foo(String p1, String p2) {}
-}
-''', [
-      error(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER, 36, 3),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_superGetter() async {
-    await assertErrorsInCode(r'''
-class A {
-  int get foo => 0;
-}
-
-class B extends A {
-  set foo(String _) {}
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 59, 3),
-    ]);
-  }
-
-  test_error_mismatchedGetterAndSetterTypes_superSetter() async {
-    await assertErrorsInCode(r'''
-class A {
-  set foo(String _) {}
-}
-
-class B extends A {
-  int get foo => 0;
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 66, 3),
-    ]);
-  }
-
   test_inconsistentInheritance_parameterType() async {
     await assertErrorsInCode(r'''
 abstract class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 396b5f0..510112c 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/engine.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -12,12 +14,13 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ConstantDriverTest);
+    defineReflectiveTests(ConstantResolutionTest);
+    defineReflectiveTests(ConstantResolutionWithNnbdTest);
   });
 }
 
 @reflectiveTest
-class ConstantDriverTest extends DriverResolutionTest {
+class ConstantResolutionTest extends DriverResolutionTest {
   test_constantValue_defaultParameter_noDefaultValue() async {
     newFile('/test/lib/a.dart', content: r'''
 class A {
@@ -79,6 +82,27 @@
     ]);
   }
 
+  test_context_eliminateTypeVariables() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  const A({List<T> a = const []});
+}
+''');
+    assertType(findNode.listLiteral('const []'), 'List<Null>');
+  }
+
+  test_context_eliminateTypeVariables_functionType() async {
+    await assertNoErrorsInCode(r'''
+class A<T, U> {
+  const A({List<T Function(U)> a = const []});
+}
+''');
+    assertType(
+      findNode.listLiteral('const []'),
+      'List<Null Function(Object)>',
+    );
+  }
+
   test_functionType_element_typeArguments() async {
     newFile('/test/lib/a.dart', content: r'''
 typedef F<T> = T Function(int);
@@ -177,3 +201,35 @@
     expect(a.computeConstantValue().toIntValue(), 42);
   }
 }
+
+@reflectiveTest
+class ConstantResolutionWithNnbdTest extends DriverResolutionTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..enabledExperiments = [EnableString.non_nullable]
+    ..implicitCasts = false;
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  test_context_eliminateTypeVariables() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  const A({List<T> a = const []});
+}
+''');
+    assertType(findNode.listLiteral('const []'), 'List<Never>');
+  }
+
+  test_context_eliminateTypeVariables_functionType() async {
+    await assertNoErrorsInCode(r'''
+class A<T, U> {
+  const A({List<T Function(U)> a = const []});
+}
+''');
+    assertType(
+      findNode.listLiteral('const []'),
+      'List<Never Function(Object?)>',
+    );
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 8bedd48..a195ee3 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -1699,6 +1699,32 @@
   AnalysisOptionsImpl get analysisOptions =>
       AnalysisOptionsImpl()..enabledExperiments = [EnableString.non_nullable];
 
+  test_hasReceiver_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart' deferred as a;
+
+main() {
+  a.loadLibrary();
+}
+''');
+
+    var import = findElement.importFind('package:test/a.dart');
+
+    var invocation = findNode.methodInvocation('loadLibrary()');
+    assertImportPrefix(invocation.target, import.prefix);
+
+    assertMethodInvocation(
+      invocation,
+      import.importedLibrary.loadLibraryFunction,
+      'Future<dynamic> Function()',
+    );
+  }
+
   test_hasReceiver_interfaceTypeQ_defined() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index fda3a9e..74fb1e9 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -53,9 +53,9 @@
 
   test_inc_property_differentTypes() async {
     await assertNoErrorsInCode(r'''
-dynamic get x => 0;
+int get x => 0;
 
-set x(Object _) {}
+set x(num _) {}
 
 f() {
   x++;
@@ -65,13 +65,16 @@
     assertSimpleIdentifier(
       findNode.simple('x++'),
       element: findElement.topSet('x'),
-      type: 'Object',
+      type: 'num',
     );
 
     assertPostfixExpression(
       findNode.postfix('x++'),
-      element: null,
-      type: 'dynamic',
+      element: elementMatcher(
+        numElement.getMethod('+'),
+        isLegacy: isNullSafetySdkAndLegacyLibrary,
+      ),
+      type: 'int',
     );
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index 8000e7e..a47b170 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -54,6 +54,32 @@
   @override
   bool get typeToStringWithNullability => true;
 
+  test_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart' deferred as a;
+
+main() {
+  a.loadLibrary;
+}
+''');
+
+    var import = findElement.importFind('package:test/a.dart');
+
+    assertPrefixedIdentifier(
+      findNode.prefixed('a.loadLibrary'),
+      element: elementMatcher(
+        import.importedLibrary.loadLibraryFunction,
+        isLegacy: true,
+      ),
+      type: 'Future<dynamic>* Function()*',
+    );
+  }
+
   test_implicitCall_tearOff_nullable() async {
     newFile('/test/lib/a.dart', content: r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 368064b..459660e 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -502,6 +502,15 @@
     assertType(node, type);
   }
 
+  void assertPrefixedIdentifier(
+    PrefixedIdentifier node, {
+    @required Object element,
+    @required String type,
+  }) {
+    assertElement(node.staticElement, element);
+    assertType(node, type);
+  }
+
   void assertPrefixExpression(
     PrefixExpression node, {
     @required Object element,
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
index ada9374..33f1c6b 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
@@ -35,7 +35,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Stream<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Stream<Object?> Function()');
   }
 
   test_list_awaitForIn_int_downward() async {
@@ -69,7 +69,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Iterable<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Iterable<Object?> Function()');
   }
 
   test_list_forIn_int_downward() async {
@@ -93,7 +93,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Stream<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Stream<Object?> Function()');
   }
 
   test_map_awaitForIn_int_downward() async {
@@ -127,7 +127,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Iterable<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Iterable<Object?> Function()');
   }
 
   test_map_forIn_int_downward() async {
@@ -151,7 +151,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Stream<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Stream<Object?> Function()');
   }
 
   test_set_awaitForIn_int_downward() async {
@@ -185,7 +185,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Iterable<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Iterable<Object?> Function()');
   }
 
   test_set_forIn_int_downward() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
index 5848d62..025800d 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
@@ -78,7 +78,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Stream<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Stream<Object?> Function()');
   }
 
   test_awaitForIn_int_downward() async {
@@ -109,7 +109,7 @@
 T a<T>() => throw '';
 ''');
     assertInvokeType(
-        findNode.methodInvocation('a('), 'Iterable<dynamic> Function()');
+        findNode.methodInvocation('a('), 'Iterable<Object?> Function()');
   }
 
   test_forIn_int_downward() async {
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
new file mode 100644
index 0000000..6bb253e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
@@ -0,0 +1,254 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(GetterNotAssignableSetterTypesTest);
+  });
+}
+
+@reflectiveTest
+class GetterNotAssignableSetterTypesTest extends DriverResolutionTest {
+  test_class_instance_dynamicGetter() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  get foo => 0;
+  set foo(String v) {}
+}
+''');
+  }
+
+  test_class_instance_dynamicSetter() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(v) {}
+}
+''');
+  }
+
+  test_class_instance_interfaces() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+class B {
+  set foo(String _) {}
+}
+
+abstract class X implements A, B {}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 84, 1),
+    ]);
+  }
+
+  test_class_instance_private_getter() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  int get _foo => 0;
+}
+''');
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  set _foo(String _) {}
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 44, 4),
+    ]);
+  }
+
+  test_class_instance_private_interfaces() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  int get _foo => 0;
+}
+''');
+    newFile('/test/lib/b.dart', content: r'''
+class B {
+  set _foo(String _) {}
+}
+''');
+    await assertNoErrorsInCode(r'''
+import 'a.dart';
+import 'b.dart';
+
+class X implements A, B {}
+''');
+  }
+
+  test_class_instance_private_interfaces2() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  int get _foo => 0;
+}
+
+class B {
+  set _foo(String _) {}
+}
+''');
+    await assertNoErrorsInCode(r'''
+import 'a.dart';
+
+class X implements A, B {}
+''');
+  }
+
+  test_class_instance_private_setter() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  set _foo(String _) {}
+}
+''');
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  int get _foo => 0;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 48, 4),
+    ]);
+  }
+
+  test_class_instance_sameClass() async {
+    await assertErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(String _) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 20, 3),
+    ]);
+  }
+
+  test_class_instance_sameTypes() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(int v) {}
+}
+''');
+  }
+
+  test_class_instance_setterParameter_0() async {
+    await assertErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER, 36, 3),
+    ]);
+  }
+
+  test_class_instance_setterParameter_2() async {
+    await assertErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(String p1, String p2) {}
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER, 36, 3),
+    ]);
+  }
+
+  test_class_instance_superGetter() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  set foo(String _) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 59, 3),
+    ]);
+  }
+
+  test_class_instance_superSetter() async {
+    await assertErrorsInCode(r'''
+class A {
+  set foo(String _) {}
+}
+
+class B extends A {
+  int get foo => 0;
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 66, 3),
+    ]);
+  }
+
+  test_class_static() async {
+    await assertErrorsInCode(r'''
+class C {
+  static int get foo => 0;
+  static set foo(String _) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 27, 3),
+    ]);
+  }
+
+  test_extension_instance() async {
+    await assertErrorsInCode('''
+extension E on Object {
+  int get foo { return 0; }
+  set foo(String v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 34, 3),
+    ]);
+  }
+
+  test_extension_static() async {
+    await assertErrorsInCode('''
+extension E on Object {
+  static int get foo { return 0; }
+  static set foo(String v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 41, 3),
+    ]);
+  }
+
+  test_topLevel() async {
+    await assertErrorsInCode('''
+int get foo { return 0; }
+set foo(String v) {}
+''', [
+      error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 8, 3),
+    ]);
+  }
+
+  test_topLevel_dynamicGetter() async {
+    await assertNoErrorsInCode(r'''
+get foo => 0;
+set foo(String v) {}
+''');
+  }
+
+  test_topLevel_dynamicSetter() async {
+    await assertNoErrorsInCode(r'''
+int get foo => 0;
+set foo(v) {}
+''');
+  }
+
+  test_topLevel_sameTypes() async {
+    await assertNoErrorsInCode(r'''
+int get foo => 0;
+set foo(int v) {}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
new file mode 100644
index 0000000..8cbbe24
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
@@ -0,0 +1,279 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(GetterNotSubtypeSetterTypesTest);
+  });
+}
+
+@reflectiveTest
+class GetterNotSubtypeSetterTypesTest extends DriverResolutionTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = FeatureSet.forTesting(
+        sdkVersion: '2.7.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  test_class_instance() async {
+    await assertErrorsInCode('''
+class C {
+  num get foo => 0;
+  set foo(int v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 3),
+    ]);
+  }
+
+  test_class_instance_dynamicGetter() async {
+    await assertErrorsInCode(r'''
+class C {
+  get foo => 0;
+  set foo(String v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 16, 3),
+    ]);
+  }
+
+  test_class_instance_dynamicSetter() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(v) {}
+}
+''');
+  }
+
+  test_class_instance_interfaces() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+class B {
+  set foo(String _) {}
+}
+
+abstract class X implements A, B {}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 84, 1),
+    ]);
+  }
+
+  test_class_instance_private_getter() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  int get _foo => 0;
+}
+''');
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  set _foo(String _) {}
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 44, 4),
+    ]);
+  }
+
+  test_class_instance_private_interfaces() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  int get _foo => 0;
+}
+''');
+    newFile('/test/lib/b.dart', content: r'''
+class B {
+  set _foo(String _) {}
+}
+''');
+    await assertNoErrorsInCode(r'''
+import 'a.dart';
+import 'b.dart';
+
+class X implements A, B {}
+''');
+  }
+
+  test_class_instance_private_interfaces2() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  int get _foo => 0;
+}
+
+class B {
+  set _foo(String _) {}
+}
+''');
+    await assertNoErrorsInCode(r'''
+import 'a.dart';
+
+class X implements A, B {}
+''');
+  }
+
+  test_class_instance_private_setter() async {
+    newFile('/test/lib/a.dart', content: r'''
+class A {
+  set _foo(String _) {}
+}
+''');
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  int get _foo => 0;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 48, 4),
+    ]);
+  }
+
+  test_class_instance_sameClass() async {
+    await assertErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(String _) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 3),
+    ]);
+  }
+
+  test_class_instance_sameTypes() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(int v) {}
+}
+''');
+  }
+
+  test_class_instance_setterParameter_0() async {
+    await assertErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER, 36, 3),
+    ]);
+  }
+
+  test_class_instance_setterParameter_2() async {
+    await assertErrorsInCode(r'''
+class C {
+  int get foo => 0;
+  set foo(String p1, String p2) {}
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER, 36, 3),
+    ]);
+  }
+
+  test_class_instance_superGetter() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  set foo(String _) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 59, 3),
+    ]);
+  }
+
+  test_class_instance_superSetter() async {
+    await assertErrorsInCode(r'''
+class A {
+  set foo(String _) {}
+}
+
+class B extends A {
+  int get foo => 0;
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 66, 3),
+    ]);
+  }
+
+  test_class_static() async {
+    await assertErrorsInCode('''
+class C {
+  static num get foo => 0;
+  static set foo(int v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 27, 3),
+    ]);
+  }
+
+  test_extension_instance() async {
+    await assertErrorsInCode('''
+extension E on Object {
+  int get foo => 0;
+  set foo(String v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 34, 3),
+    ]);
+  }
+
+  test_extension_static() async {
+    await assertErrorsInCode('''
+extension E on Object {
+  static int get foo => 0;
+  static set foo(String v) {}
+}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 41, 3),
+    ]);
+  }
+
+  test_topLevel() async {
+    await assertErrorsInCode('''
+int get foo => 0;
+set foo(String v) {}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 8, 3),
+    ]);
+  }
+
+  test_topLevel_dynamicGetter() async {
+    await assertErrorsInCode(r'''
+get foo => 0;
+set foo(int v) {}
+''', [
+      error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 4, 3),
+    ]);
+  }
+
+  test_topLevel_dynamicSetter() async {
+    await assertNoErrorsInCode(r'''
+int get foo => 0;
+set foo(v) {}
+''');
+  }
+
+  test_topLevel_sameTypes() async {
+    await assertNoErrorsInCode(r'''
+int get foo => 0;
+set foo(int v) {}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
index 85628c7..d9209a9 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
@@ -23,20 +23,6 @@
     ..contextFeatures = FeatureSet.forTesting(
         sdkVersion: '2.7.0', additionalFeatures: [Feature.non_nullable]);
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/38200')
-  test_defaultValue_list_inferredTypeVariable() async {
-    // We have a test somewhere that verifies that we infer `<Null>` type
-    // arguments in constant contexts, probably somewhere in
-    // `ResynthesizeTestCases`. We need a similar test nearby for NNBD enabled.
-    await assertNoErrorsInCode('''
-class Vector<T> {
-  bool contains([List<T> elements = const []]) {
-    return true;
-  }
-}
-''');
-  }
-
   @override
   test_ifNullAssignment_sameType() async {
     // This test is overridden solely to make [j] nullable.
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index 8ca6262..aad1f2d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
@@ -92,6 +92,34 @@
     ]);
   }
 
+  test_method_covariant_1() async {
+    await assertNoErrorsInCode(r'''
+abstract class A<T> {
+  A<U> foo<U>(covariant A<Map<T, U>> a);
+}
+
+abstract class B<U, T> extends A<T> {
+  B<U, V> foo<V>(B<U, Map<T, V>> a);
+}
+''');
+  }
+
+  test_method_covariant_2() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  R foo<R>(VA<R> v);
+}
+
+abstract class B implements A {
+  R foo<R>(covariant VB<R> v);
+}
+
+abstract class VA<T> {}
+
+abstract class VB<T> implements VA<T> {}
+''');
+  }
+
   test_method_named_fewerNamedParameters() async {
     await assertErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/mismatched_getter_and_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/mismatched_getter_and_setter_types_test.dart
deleted file mode 100644
index 1bf2690..0000000
--- a/pkg/analyzer/test/src/diagnostics/mismatched_getter_and_setter_types_test.dart
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/driver_resolution.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(MismatchedGetterAndSetterTypesTest);
-    defineReflectiveTests(
-        MismatchedGetterAndSetterTypesWithExtensionMethodsTest);
-    defineReflectiveTests(MismatchedGetterAndSetterTypesWithNNBDTest);
-  });
-}
-
-@reflectiveTest
-class MismatchedGetterAndSetterTypesTest extends DriverResolutionTest {
-  test_topLevel() async {
-    await assertErrorsInCode('''
-int get g { return 0; }
-set g(String v) {}''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 0, 23),
-    ]);
-  }
-
-  test_instance_sameTypes() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  int get x => 0;
-  set x(int v) {}
-}
-''');
-  }
-
-  test_instance_unspecifiedGetter() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  get x => 0;
-  set x(String v) {}
-}
-''');
-  }
-
-  test_instance_unspecifiedSetter() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  int get x => 0;
-  set x(v) {}
-}
-''');
-  }
-
-  test_topLevel_sameTypes() async {
-    await assertNoErrorsInCode(r'''
-int get x => 0;
-set x(int v) {}
-''');
-  }
-
-  test_topLevel_unspecifiedGetter() async {
-    await assertNoErrorsInCode(r'''
-get x => 0;
-set x(String v) {}
-''');
-  }
-
-  test_topLevel_unspecifiedSetter() async {
-    await assertNoErrorsInCode(r'''
-int get x => 0;
-set x(v) {}
-''');
-  }
-}
-
-@reflectiveTest
-class MismatchedGetterAndSetterTypesWithExtensionMethodsTest
-    extends MismatchedGetterAndSetterTypesTest {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
-
-  test_extensionMembers_instance() async {
-    await assertErrorsInCode('''
-extension E on Object {
-  int get g { return 0; }
-  set g(String v) {}
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 34, 1),
-    ]);
-  }
-
-  test_extensionMembers_static() async {
-    await assertErrorsInCode('''
-extension E on Object {
-  static int get g { return 0; }
-  static set g(String v) {}
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 41, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
-class MismatchedGetterAndSetterTypesWithNNBDTest
-    extends MismatchedGetterAndSetterTypesTest {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..contextFeatures = FeatureSet.forTesting(
-        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
-
-  test_classMembers_instance() async {
-    await assertErrorsInCode('''
-class C {
-  num get g { return 0; }
-  set g(int v) {}
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 20, 1),
-    ]);
-  }
-
-  @failingTest
-  test_classMembers_static() async {
-    await assertErrorsInCode('''
-class C {
-  static num get g { return 0; }
-  static set g(int v) {}
-}
-''', [
-      error(StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, 12, 30),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 14347e0..5879733 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -139,6 +139,10 @@
 import 'for_in_of_invalid_type_test.dart' as for_in_of_invalid_type;
 import 'for_in_with_const_variable_test.dart' as for_in_with_const_variable;
 import 'generic_struct_subclass_test.dart' as generic_struct_subclass;
+import 'getter_not_assignable_setter_types_test.dart'
+    as getter_not_assignable_setter_types;
+import 'getter_not_subtype_setter_types_test.dart'
+    as getter_not_subtype_setter_types;
 import 'if_element_condition_from_deferred_library_test.dart'
     as if_element_condition_from_deferred_library;
 import 'illegal_async_return_type_test.dart' as illegal_async_return_type;
@@ -239,8 +243,6 @@
 import 'member_with_class_name_test.dart' as member_with_class_name;
 import 'mismatched_annotation_on_struct_field_test.dart'
     as mismatched_annotation_on_struct_field;
-import 'mismatched_getter_and_setter_types_test.dart'
-    as mismatched_getter_and_setter_types;
 import 'missing_annotation_on_struct_field_test.dart'
     as missing_annotation_on_struct_field;
 import 'missing_default_value_for_parameter_test.dart'
@@ -435,6 +437,7 @@
     as undefined_constructor_in_initializer_default;
 import 'undefined_constructor_in_initializer_test.dart'
     as undefined_constructor_in_initializer;
+import 'undefined_enum_constant_test.dart' as undefined_enum_constant;
 import 'undefined_extension_getter_test.dart' as undefined_extension_getter;
 import 'undefined_extension_method_test.dart' as undefined_extension_method;
 import 'undefined_extension_operator_test.dart' as undefined_extension_operator;
@@ -576,6 +579,8 @@
     for_in_of_invalid_type.main();
     for_in_with_const_variable.main();
     generic_struct_subclass.main();
+    getter_not_assignable_setter_types.main();
+    getter_not_subtype_setter_types.main();
     if_element_condition_from_deferred_library.main();
     illegal_async_return_type.main();
     implements_disallowed_class.main();
@@ -643,7 +648,6 @@
     map_value_type_not_assignable.main();
     member_with_class_name.main();
     mismatched_annotation_on_struct_field.main();
-    mismatched_getter_and_setter_types.main();
     missing_annotation_on_struct_field.main();
     missing_default_value_for_parameter.main();
     missing_enum_value_in_switch.main();
@@ -775,6 +779,7 @@
     undefined_class.main();
     undefined_constructor_in_initializer_default.main();
     undefined_constructor_in_initializer.main();
+    undefined_enum_constant.main();
     undefined_extension_getter.main();
     undefined_extension_method.main();
     undefined_extension_operator.main();
diff --git a/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart
index 26be039..ee9d7e7 100644
--- a/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart
@@ -874,6 +874,34 @@
 ''');
   }
 
+  test_nullable_dotQ_propertyAccess_dot_methodInvocation() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+void f(A? a) {
+  a?.foo.abs();
+}
+''');
+    assertType(findNode.propertyAccess('.foo'), 'int');
+    assertType(findNode.methodInvocation('.abs()'), 'int?');
+  }
+
+  test_nullable_dotQ_propertyAccess_dot_propertyAccess() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+void f(A? a) {
+  a?.foo.isEven;
+}
+''');
+    assertType(findNode.propertyAccess('.foo'), 'int');
+    assertType(findNode.propertyAccess('.isEven'), 'bool?');
+  }
+
   test_operatorMinus_nonNullable() async {
     await assertNoErrorsInCode(r'''
 m() {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_test.dart
new file mode 100644
index 0000000..1d6ca2b
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedEnumConstantTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedEnumConstantTest extends DriverResolutionTest {
+  test_defined() async {
+    await assertNoErrorsInCode(r'''
+enum E { ONE }
+E e() {
+  return E.ONE;
+}
+''');
+  }
+
+  test_undefined() async {
+    await assertErrorsInCode(r'''
+enum E { ONE }
+E e() {
+  return E.TWO;
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_ENUM_CONSTANT, 34, 3),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index 177bd1f..6a77a6a 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -142,6 +142,16 @@
     ]);
   }
 
+  test_instance_undefined_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  f() { return this.m; }
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_GETTER, 30, 1),
+    ]);
+  }
+
   test_nullMember_undefined() async {
     await assertErrorsInCode(r'''
 m() {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
index 97943ad..b399b33 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
@@ -68,6 +68,60 @@
     ]);
   }
 
+  test_method_undefined() async {
+    await assertErrorsInCode(r'''
+class C {
+  f() {
+    abs();
+  }
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_METHOD, 22, 3),
+    ]);
+  }
+
+  test_method_undefined_cascade() async {
+    await assertErrorsInCode(r'''
+class C {}
+f(C c) {
+  c..abs();
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_METHOD, 25, 3),
+    ]);
+  }
+
+  test_method_undefined_enum() async {
+    await assertErrorsInCode(r'''
+enum E { A }
+f() => E.abs();
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_METHOD, 22, 3),
+    ]);
+  }
+
+  test_method_undefined_mixin_cascade() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+f(M m) {
+  m..abs();
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_METHOD, 25, 3),
+    ]);
+  }
+
+  test_method_undefined_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+f(M m) {
+  m.abs();
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_METHOD, 24, 3),
+    ]);
+  }
+
   test_method_undefined_onNull() async {
     await assertErrorsInCode(r'''
 Null f(int x) => null;
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
index 02ea237..6ca4c67 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
@@ -45,6 +45,15 @@
     ]);
   }
 
+  test_binaryExpression_enum() async {
+    await assertErrorsInCode(r'''
+enum E { A }
+f(E e) => e + 1;
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 25, 1),
+    ]);
+  }
+
   test_binaryExpression_inSubtype() async {
     await assertErrorsInCode(r'''
 class A {}
@@ -61,6 +70,15 @@
     ]);
   }
 
+  test_binaryExpression_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+f(M m) => m + 1;
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 23, 1),
+    ]);
+  }
+
   test_index_both() async {
     await assertErrorsInCode(r'''
 class A {}
@@ -87,6 +105,17 @@
 ''');
   }
 
+  test_index_enum() async {
+    await assertErrorsInCode(r'''
+enum E { A }
+f(E e) {
+  e[0];
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 25, 3),
+    ]);
+  }
+
   test_index_getter() async {
     await assertErrorsInCode(r'''
 class A {}
@@ -99,6 +128,17 @@
     ]);
   }
 
+  test_index_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+f(M m) {
+  m[0];
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 23, 3),
+    ]);
+  }
+
   test_index_null() async {
     await assertErrorsInCode(r'''
 f(Null x) {
@@ -249,6 +289,17 @@
 ''');
   }
 
+  test_postfixExpression_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+f(M m) {
+  m++;
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 23, 2),
+    ]);
+  }
+
   test_postfixExpression_undefined() async {
     await assertErrorsInCode(r'''
 class A {}
@@ -309,6 +360,17 @@
 ''');
   }
 
+  test_prefixExpression_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+f(M m) {
+  -m;
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 22, 1),
+    ]);
+  }
+
   test_prefixExpression_undefined() async {
     await assertErrorsInCode(r'''
 class A {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index 38e017a..9179738 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -40,6 +40,16 @@
     ]);
   }
 
+  test_instance_undefined_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  f() { this.m = 0; }
+}
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_SETTER, 23, 1),
+    ]);
+  }
+
   test_inSubtype() async {
     await assertErrorsInCode(r'''
 class A {}
diff --git a/pkg/analyzer/test/src/lint/pub_test.dart b/pkg/analyzer/test/src/lint/pub_test.dart
index 3224300..da528d9 100644
--- a/pkg/analyzer/test/src/lint/pub_test.dart
+++ b/pkg/analyzer/test/src/lint/pub_test.dart
@@ -36,6 +36,8 @@
       url: git://github.com/munificent/kittens.git
       ref: some-branch
   foo: any
+  relative_path:
+    path: ../somewhere
 dev_dependencies:
   markdown: '>=0.7.1+2 <0.8.0'
   unittest: '>=0.11.0 <0.12.0'
@@ -89,6 +91,13 @@
         {'foo': '1.2.0'}
       ]);
 
+      group('path', () {
+        PSDependency dep =
+            findDependency(ps.dependencies, name: 'relative_path');
+        PSEntry depPath = dep.path;
+        testValue('path', depPath, equals('../somewhere'));
+      });
+
       group('hosted', () {
         PSDependency dep =
             findDependency(ps.dependencies, name: 'transmogrify');
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 41522fd..dd8c042 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -4954,6 +4954,39 @@
 ''');
   }
 
+  test_defaultValue_eliminateTypeParameters() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary('''
+class A<T> {
+  const X({List<T> a = const []});
+}
+''');
+    checkElementText(
+        library,
+        r'''
+class A<T> {
+  dynamic X({List<T> a: const /*typeArgs=Never*/[]});
+}
+''',
+        withTypes: true);
+  }
+
+  test_defaultValue_eliminateTypeParameters_legacy() async {
+    var library = await checkLibrary('''
+class A<T> {
+  const X({List<T> a = const []});
+}
+''');
+    checkElementText(
+        library,
+        r'''
+class A<T> {
+  dynamic X({List<T> a: const /*typeArgs=Null*/[]});
+}
+''',
+        withTypes: true);
+  }
+
   test_defaultValue_genericFunction() async {
     var library = await checkLibrary('''
 typedef void F<T>(T v);
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 8141c33..6d96e8d 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -2586,17 +2586,17 @@
 }
 
 class T1 extends Base {
-  B get /*error:INVALID_OVERRIDE, error:MISMATCHED_GETTER_AND_SETTER_TYPES*/f => null;
+  B get /*error:INVALID_OVERRIDE, error:GETTER_NOT_ASSIGNABLE_SETTER_TYPES*/f => null;
 }
 
 class T2 extends Base {
-  set /*error:INVALID_OVERRIDE, error:MISMATCHED_GETTER_AND_SETTER_TYPES*/f(
+  set /*error:INVALID_OVERRIDE, error:GETTER_NOT_ASSIGNABLE_SETTER_TYPES*/f(
       B b) => null;
 }
 
 class T3 extends Base {
   final B
-      /*error:FINAL_NOT_INITIALIZED, error:INVALID_OVERRIDE, error:MISMATCHED_GETTER_AND_SETTER_TYPES*/f;
+      /*error:FINAL_NOT_INITIALIZED, error:INVALID_OVERRIDE, error:GETTER_NOT_ASSIGNABLE_SETTER_TYPES*/f;
 }
 class T4 extends Base {
   // two: one for the getter one for the setter.
@@ -2604,15 +2604,15 @@
 }
 
 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER*/T5 implements Base {
-  /**/B get /*error:INVALID_OVERRIDE, error:MISMATCHED_GETTER_AND_SETTER_TYPES*/f => null;
+  /**/B get /*error:INVALID_OVERRIDE, error:GETTER_NOT_ASSIGNABLE_SETTER_TYPES*/f => null;
 }
 
 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER*/T6 implements Base {
-  set /*error:INVALID_OVERRIDE, error:MISMATCHED_GETTER_AND_SETTER_TYPES*/f(B b) => null;
+  set /*error:INVALID_OVERRIDE, error:GETTER_NOT_ASSIGNABLE_SETTER_TYPES*/f(B b) => null;
 }
 
 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER*/T7 implements Base {
-  final B /*error:INVALID_OVERRIDE, error:MISMATCHED_GETTER_AND_SETTER_TYPES*/f = null;
+  final B /*error:INVALID_OVERRIDE, error:GETTER_NOT_ASSIGNABLE_SETTER_TYPES*/f = null;
 }
 class T8 implements Base {
   // two: one for the getter one for the setter.
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 04c9f2d..dd2c150 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -5822,7 +5822,7 @@
 
 ### undefined_getter
 
-_The getter '{0}' isn't defined for the class '{1}'._
+_The getter '{0}' isn't defined for the type '{1}'._
 
 #### Description
 
@@ -5914,7 +5914,7 @@
 
 ### undefined_method
 
-_The method '{0}' isn't defined for the class '{1}'._
+_The method '{0}' isn't defined for the type '{1}'._
 
 #### Description
 
@@ -6012,7 +6012,7 @@
 
 ### undefined_operator
 
-_The operator '{0}' isn't defined for the class '{1}'._
+_The operator '{0}' isn't defined for the type '{1}'._
 
 #### Description
 
@@ -6076,7 +6076,7 @@
 
 ### undefined_setter
 
-_The setter '{0}' isn't defined for the class '{1}'._
+_The setter '{0}' isn't defined for the type '{1}'._
 
 #### Description
 
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index e302fd1..992fbe3 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -958,7 +958,7 @@
     StringBuffer sb = new StringBuffer();
     sb.write('ModularExpression(kind=$kind,data=');
     if (data is ConstantValue) {
-      sb.write((data as ConstantValue).toStructuredText());
+      sb.write((data as ConstantValue).toStructuredText(null));
     } else {
       sb.write(data);
     }
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index ca2c98e..9ddd6dd 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -20,6 +20,8 @@
 
 /// The common elements and types in Dart.
 abstract class CommonElements {
+  DartTypes get dartTypes;
+
   /// The `Object` class defined in 'dart:core'.
   ClassEntity get objectClass;
 
@@ -658,10 +660,12 @@
 
 class CommonElementsImpl
     implements CommonElements, KCommonElements, JCommonElements {
+  @override
+  final DartTypes dartTypes;
   final ElementEnvironment _env;
   final CompilerOptions _options;
 
-  CommonElementsImpl(this._env, this._options);
+  CommonElementsImpl(this.dartTypes, this._env, this._options);
 
   ClassEntity _objectClass;
   @override
@@ -1025,7 +1029,7 @@
 
   @override
   InterfaceType getConstantListTypeFor(InterfaceType sourceType) =>
-      sourceType.treatAsRaw
+      dartTypes.treatAsRawType(sourceType)
           ? _env.getRawType(jsArrayClass)
           : _env.createInterfaceType(jsArrayClass, sourceType.typeArguments);
 
@@ -1036,7 +1040,7 @@
         ? (hasProtoKey ? constantProtoMapClass : constantStringMapClass)
         : generalConstantMapClass;
     List<DartType> typeArgument = sourceType.typeArguments;
-    if (sourceType.treatAsRaw) {
+    if (dartTypes.treatAsRawType(sourceType)) {
       return _env.getRawType(classElement);
     } else {
       return _env.createInterfaceType(classElement, typeArgument);
@@ -1045,7 +1049,7 @@
 
   @override
   InterfaceType getConstantSetTypeFor(InterfaceType sourceType) =>
-      sourceType.treatAsRaw
+      dartTypes.treatAsRawType(sourceType)
           ? _env.getRawType(constSetLiteralClass)
           : _env.createInterfaceType(
               constSetLiteralClass, sourceType.typeArguments);
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index 566c2b9..afbb8f4 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -173,7 +173,7 @@
 
   bool hasProtoKey = (protoValue != null);
   InterfaceType keysType;
-  if (sourceType.treatAsRaw) {
+  if (commonElements.dartTypes.treatAsRawType(sourceType)) {
     keysType = commonElements.listType();
   } else {
     keysType = commonElements.listType(sourceType.typeArguments.first);
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 67b4c3f..76c3302 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -114,10 +114,10 @@
   /// For the synthetic constants, [DeferredConstantValue],
   /// [DeferredGlobalConstantValue], [SyntheticConstantValue],
   /// [InterceptorConstantValue] the unparse is descriptive only.
-  String toDartText();
+  String toDartText(DartTypes dartTypes);
 
   /// Returns a structured representation of this constant suited for debugging.
-  String toStructuredText();
+  String toStructuredText(DartTypes dartTypes);
 
   ConstantValueKind get kind;
 
@@ -126,7 +126,7 @@
     assertDebugMode("Use ConstantValue.toDartText() or "
         "ConstantValue.toStructuredText() "
         "instead of ConstantValue.toString().");
-    return toStructuredText();
+    return toStructuredText(null);
   }
 }
 
@@ -162,7 +162,7 @@
   ConstantValueKind get kind => ConstantValueKind.FUNCTION;
 
   @override
-  String toDartText() {
+  String toDartText(DartTypes dartTypes) {
     if (element.enclosingClass != null) {
       return '${element.enclosingClass.name}.${element.name}';
     } else {
@@ -171,8 +171,8 @@
   }
 
   @override
-  String toStructuredText() {
-    return 'FunctionConstant(${toDartText()})';
+  String toStructuredText(DartTypes dartTypes) {
+    return 'FunctionConstant(${toDartText(dartTypes)})';
   }
 }
 
@@ -224,10 +224,10 @@
   ConstantValueKind get kind => ConstantValueKind.NULL;
 
   @override
-  String toStructuredText() => 'NullConstant';
+  String toStructuredText(DartTypes dartTypes) => 'NullConstant';
 
   @override
-  String toDartText() => 'null';
+  String toDartText(DartTypes dartTypes) => 'null';
 }
 
 abstract class NumConstantValue extends PrimitiveConstantValue {
@@ -298,10 +298,11 @@
   ConstantValueKind get kind => ConstantValueKind.INT;
 
   @override
-  String toStructuredText() => 'IntConstant(${toDartText()})';
+  String toStructuredText(DartTypes dartTypes) =>
+      'IntConstant(${toDartText(dartTypes)})';
 
   @override
-  String toDartText() => intValue.toString();
+  String toDartText(DartTypes dartTypes) => intValue.toString();
 }
 
 class DoubleConstantValue extends NumConstantValue {
@@ -375,10 +376,11 @@
   ConstantValueKind get kind => ConstantValueKind.DOUBLE;
 
   @override
-  String toStructuredText() => 'DoubleConstant(${toDartText()})';
+  String toStructuredText(DartTypes dartTypes) =>
+      'DoubleConstant(${toDartText(dartTypes)})';
 
   @override
-  String toDartText() => doubleValue.toString();
+  String toDartText(DartTypes dartTypes) => doubleValue.toString();
 }
 
 abstract class BoolConstantValue extends PrimitiveConstantValue {
@@ -405,7 +407,8 @@
   ConstantValueKind get kind => ConstantValueKind.BOOL;
 
   @override
-  String toStructuredText() => 'BoolConstant(${toDartText()})';
+  String toStructuredText(DartTypes dartTypes) =>
+      'BoolConstant(${toDartText(dartTypes)})';
 }
 
 class TrueConstantValue extends BoolConstantValue {
@@ -431,7 +434,7 @@
   int get hashCode => 499;
 
   @override
-  String toDartText() => boolValue.toString();
+  String toDartText(DartTypes dartTypes) => boolValue.toString();
 }
 
 class FalseConstantValue extends BoolConstantValue {
@@ -457,7 +460,7 @@
   int get hashCode => 536555975;
 
   @override
-  String toDartText() => boolValue.toString();
+  String toDartText(DartTypes dartTypes) => boolValue.toString();
 }
 
 class StringConstantValue extends PrimitiveConstantValue {
@@ -498,10 +501,11 @@
 
   // TODO(johnniwinther): Ensure correct escaping.
   @override
-  String toDartText() => '"${stringValue}"';
+  String toDartText(DartTypes dartTypes) => '"${stringValue}"';
 
   @override
-  String toStructuredText() => 'StringConstant(${toDartText()})';
+  String toStructuredText(DartTypes dartTypes) =>
+      'StringConstant(${toDartText(dartTypes)})';
 }
 
 abstract class ObjectConstantValue extends ConstantValue {
@@ -515,8 +519,8 @@
   @override
   DartType getType(CommonElements types) => type;
 
-  void _unparseTypeArguments(StringBuffer sb) {
-    if (!type.treatAsRaw) {
+  void _unparseTypeArguments(DartTypes dartTypes, StringBuffer sb) {
+    if (dartTypes == null || !dartTypes.treatAsRawType(type)) {
       sb.write('<');
       sb.write(type.typeArguments.join(', '));
       sb.write('>');
@@ -552,10 +556,11 @@
   ConstantValueKind get kind => ConstantValueKind.TYPE;
 
   @override
-  String toDartText() => '$representedType';
+  String toDartText(DartTypes dartTypes) => '$representedType';
 
   @override
-  String toStructuredText() => 'TypeConstant(${representedType})';
+  String toStructuredText(DartTypes dartTypes) =>
+      'TypeConstant(${representedType})';
 }
 
 class ListConstantValue extends ObjectConstantValue {
@@ -597,27 +602,27 @@
   ConstantValueKind get kind => ConstantValueKind.LIST;
 
   @override
-  String toDartText() {
+  String toDartText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('[');
     for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(',');
-      sb.write(entries[i].toDartText());
+      sb.write(entries[i].toDartText(dartTypes));
     }
     sb.write(']');
     return sb.toString();
   }
 
   @override
-  String toStructuredText() {
+  String toStructuredText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
     sb.write('ListConstant(');
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('[');
     for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(', ');
-      sb.write(entries[i].toStructuredText());
+      sb.write(entries[i].toStructuredText(dartTypes));
     }
     sb.write('])');
     return sb.toString();
@@ -660,22 +665,26 @@
   accept(ConstantValueVisitor visitor, arg) => visitor.visitSet(this, arg);
 
   @override
-  String toDartText() {
+  String toDartText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
-    sb.writeAll(values.map((v) => v.toDartText()), ',');
+    sb.writeAll(values.map((v) => v.toDartText(dartTypes)), ',');
     sb.write('}');
     return sb.toString();
   }
 
   @override
-  String toStructuredText() {
+  String toStructuredText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
     sb.write('SetConstant(');
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
-    sb.writeAll(values.map((v) => v.toStructuredText()), ', ');
+    sb.writeAll(
+        values.map((v) => v.toStructuredText(
+              dartTypes,
+            )),
+        ', ');
     sb.write('})');
     return sb.toString();
   }
@@ -742,31 +751,31 @@
   ConstantValueKind get kind => ConstantValueKind.MAP;
 
   @override
-  String toDartText() {
+  String toDartText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
     for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(',');
-      sb.write(keys[i].toDartText());
+      sb.write(keys[i].toDartText(dartTypes));
       sb.write(':');
-      sb.write(values[i].toDartText());
+      sb.write(values[i].toDartText(dartTypes));
     }
     sb.write('}');
     return sb.toString();
   }
 
   @override
-  String toStructuredText() {
+  String toStructuredText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
     sb.write('MapConstant(');
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('{');
     for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(', ');
-      sb.write(keys[i].toStructuredText());
+      sb.write(keys[i].toStructuredText(dartTypes));
       sb.write(': ');
-      sb.write(values[i].toStructuredText());
+      sb.write(values[i].toStructuredText(dartTypes));
     }
     sb.write('})');
     return sb.toString();
@@ -806,12 +815,12 @@
   ConstantValueKind get kind => ConstantValueKind.INTERCEPTOR;
 
   @override
-  String toDartText() {
+  String toDartText(DartTypes dartTypes) {
     return 'interceptor($cls)';
   }
 
   @override
-  String toStructuredText() {
+  String toStructuredText(DartTypes dartTypes) {
     return 'InterceptorConstant(${cls.name})';
   }
 }
@@ -847,10 +856,10 @@
   ConstantValueKind get kind => ConstantValueKind.JS_NAME;
 
   @override
-  String toDartText() => 'js_name(${name})';
+  String toDartText(DartTypes dartTypes) => 'js_name(${name})';
 
   @override
-  String toStructuredText() => 'JsNameConstant(${name})';
+  String toStructuredText(DartTypes dartTypes) => 'JsNameConstant(${name})';
 }
 
 /// A constant used as the dummy interceptor value for intercepted calls with
@@ -887,10 +896,11 @@
   ConstantValueKind get kind => ConstantValueKind.DUMMY_INTERCEPTOR;
 
   @override
-  String toDartText() => 'dummy_interceptor($abstractValue)';
+  String toDartText(DartTypes dartTypes) => 'dummy_interceptor($abstractValue)';
 
   @override
-  String toStructuredText() => 'DummyInterceptorConstant($abstractValue)';
+  String toStructuredText(DartTypes dartTypes) =>
+      'DummyInterceptorConstant($abstractValue)';
 }
 
 // A constant with an empty type used in [HInstruction]s of an expression
@@ -916,10 +926,10 @@
   ConstantValueKind get kind => ConstantValueKind.UNREACHABLE;
 
   @override
-  String toDartText() => 'unreachable()';
+  String toDartText(DartTypes dartTypes) => 'unreachable()';
 
   @override
-  String toStructuredText() => 'UnreachableConstant()';
+  String toStructuredText(DartTypes dartTypes) => 'UnreachableConstant()';
 }
 
 class ConstructedConstantValue extends ObjectConstantValue {
@@ -972,10 +982,10 @@
   }
 
   @override
-  String toDartText() {
+  String toDartText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
     sb.write(type.element.name);
-    _unparseTypeArguments(sb);
+    _unparseTypeArguments(dartTypes, sb);
     sb.write('(');
     int i = 0;
     for (FieldEntity field in _fieldsSortedByName) {
@@ -983,7 +993,7 @@
       if (i > 0) sb.write(',');
       sb.write(field.name);
       sb.write('=');
-      sb.write(value.toDartText());
+      sb.write(value.toDartText(dartTypes));
       i++;
     }
     sb.write(')');
@@ -991,7 +1001,7 @@
   }
 
   @override
-  String toStructuredText() {
+  String toStructuredText(DartTypes dartTypes) {
     StringBuffer sb = new StringBuffer();
     sb.write('ConstructedConstant(');
     sb.write(type);
@@ -1002,7 +1012,7 @@
       if (i > 0) sb.write(',');
       sb.write(field.name);
       sb.write('=');
-      sb.write(value.toStructuredText());
+      sb.write(value.toStructuredText(dartTypes));
       i++;
     }
     sb.write('))');
@@ -1046,13 +1056,13 @@
   ConstantValueKind get kind => ConstantValueKind.INSTANTIATION;
 
   @override
-  String toDartText() =>
-      '<${typeArguments.join(', ')}>(${function.toDartText()})';
+  String toDartText(DartTypes dartTypes) =>
+      '<${typeArguments.join(', ')}>(${function.toDartText(dartTypes)})';
 
   @override
-  String toStructuredText() {
+  String toStructuredText(DartTypes dartTypes) {
     return 'InstantiationConstant($typeArguments,'
-        '${function.toStructuredText()})';
+        '${function.toStructuredText(dartTypes)})';
   }
 }
 
@@ -1100,11 +1110,12 @@
   ConstantValueKind get kind => ConstantValueKind.DEFERRED_GLOBAL;
 
   @override
-  String toDartText() => 'deferred_global(${referenced.toDartText()})';
+  String toDartText(DartTypes dartTypes) =>
+      'deferred_global(${referenced.toDartText(dartTypes)})';
 
   @override
-  String toStructuredText() {
-    return 'DeferredGlobalConstant(${referenced.toStructuredText()})';
+  String toStructuredText(DartTypes dartTypes) {
+    return 'DeferredGlobalConstant(${referenced.toStructuredText(dartTypes)})';
   }
 }
 
@@ -1130,8 +1141,8 @@
   ConstantValueKind get kind => ConstantValueKind.NON_CONSTANT;
 
   @override
-  String toStructuredText() => 'NonConstant';
+  String toStructuredText(DartTypes dartTypes) => 'NonConstant';
 
   @override
-  String toDartText() => '>>non-constant<<';
+  String toDartText(DartTypes dartTypes) => '>>non-constant<<';
 }
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 3823270..42aa893 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -148,6 +148,7 @@
       compiler.frontendStrategy.elementEnvironment;
 
   CommonElements get commonElements => compiler.frontendStrategy.commonElements;
+  DartTypes get dartTypes => commonElements.dartTypes;
 
   DiagnosticReporter get reporter => compiler.reporter;
 
@@ -416,8 +417,8 @@
           newSet != importSets.mainSet || oldSet != null,
           failedAt(
               NO_LOCATION_SPANNABLE,
-              "Tried to assign ${constant.toDartText()} to the main output "
-              "unit, but it was assigned to $currentSet."));
+              "Tried to assign ${constant.toDartText(closedWorld.dartTypes)} "
+              "to the main output unit, but it was assigned to $currentSet."));
       queue.addConstant(constant, newSet);
     }
   }
@@ -915,7 +916,7 @@
       if (value.isPrimitive) return;
       constantMap
           .putIfAbsent(importSet.unit, () => <String>[])
-          .add(value.toStructuredText());
+          .add(value.toStructuredText(dartTypes));
     });
 
     Map<OutputUnit, String> text = {};
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 72df23f..efc2f70 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -36,11 +36,10 @@
   DartType get unaliased => this;
 
   /// Is `true` if this type is a top type.
-  // TODO(fishythefish): Update this for NNBD.
-  bool get isTop => false;
+  bool _isTop(bool isLegacy) => false;
 
   /// Is `true` if this type has no non-top type arguments.
-  bool get treatAsRaw => true;
+  bool _treatAsRaw(bool isLegacy) => true;
 
   /// Whether this type contains a type variable.
   bool get containsTypeVariables => false;
@@ -83,21 +82,6 @@
 
   bool _equals(DartType other, _Assumptions assumptions);
 
-  /// Returns `true` if `this` is structurally equal to [other] up to renaming
-  /// of bound type variables (trivially true) and equating all top types.
-  ///
-  /// This method handles the common cases of identity and top types. Types
-  /// should add any additional logic by implementing
-  /// [_equalsModuloTopInternal].
-  bool _equalsModuloTop(DartType other) {
-    other = other.unaliased;
-    if (identical(this, other)) return true;
-    if (isTop) return other.isTop;
-    return _equalsModuloTopInternal(other);
-  }
-
-  bool _equalsModuloTopInternal(DartType other);
-
   @override
   String toString() => _DartTypeToStringVisitor().run(this);
 }
@@ -195,14 +179,6 @@
 
   bool _equalsInternal(LegacyType other, _Assumptions assumptions) =>
       baseType._equals(other.baseType, assumptions);
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is LegacyType) {
-      return baseType._equalsModuloTop(other.baseType);
-    }
-    return false;
-  }
 }
 
 class NullableType extends DartType {
@@ -211,6 +187,9 @@
   NullableType(this.baseType);
 
   @override
+  bool _isTop(bool isLegacy) => isLegacy ? false : baseType.isObject;
+
+  @override
   bool get containsTypeVariables => baseType.containsTypeVariables;
 
   @override
@@ -241,14 +220,6 @@
 
   bool _equalsInternal(NullableType other, _Assumptions assumptions) =>
       baseType._equals(other.baseType, assumptions);
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is NullableType) {
-      return baseType._equalsModuloTop(other.baseType);
-    }
-    return false;
-  }
 }
 
 class InterfaceType extends DartType {
@@ -259,7 +230,7 @@
       : assert(typeArguments.every((e) => e != null));
 
   @override
-  bool get isTop => isObject;
+  bool _isTop(bool isLegacy) => isLegacy ? isObject : false;
 
   @override
   bool get isObject =>
@@ -280,9 +251,9 @@
   }
 
   @override
-  bool get treatAsRaw {
+  bool _treatAsRaw(bool isLegacy) {
     for (DartType type in typeArguments) {
-      if (!type.isTop) return false;
+      if (!type._isTop(isLegacy)) return false;
     }
     return true;
   }
@@ -319,15 +290,6 @@
     return identical(element, other.element) &&
         _equalTypes(typeArguments, other.typeArguments, assumptions);
   }
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is InterfaceType) {
-      return identical(element, other.element) &&
-          _equalTypesModuloTop(typeArguments, other.typeArguments);
-    }
-    return false;
-  }
 }
 
 class TypedefType extends DartType {
@@ -339,7 +301,7 @@
   TypedefType(this.element, this.typeArguments, this.unaliased);
 
   @override
-  bool get isTop => unaliased.isTop;
+  bool _isTop(bool isLegacy) => unaliased._isTop(isLegacy);
 
   @override
   bool get containsTypeVariables =>
@@ -351,9 +313,9 @@
   }
 
   @override
-  bool get treatAsRaw {
+  bool _treatAsRaw(bool isLegacy) {
     for (DartType type in typeArguments) {
-      if (!type.isTop) return false;
+      if (!type._isTop(isLegacy)) return false;
     }
     return true;
   }
@@ -390,12 +352,6 @@
     return identical(element, other.element) &&
         _equalTypes(typeArguments, other.typeArguments, assumptions);
   }
-
-  @override
-  bool _equalsModuloTop(DartType other) => unaliased._equalsModuloTop(other);
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) => false;
 }
 
 class TypeVariableType extends DartType {
@@ -431,14 +387,6 @@
     }
     return false;
   }
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is TypeVariableType) {
-      return identical(other.element, element);
-    }
-    return false;
-  }
 }
 
 /// A type variable declared on a function type.
@@ -489,14 +437,6 @@
   }
 
   @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is FunctionTypeVariable) {
-      return index == other.index;
-    }
-    return false;
-  }
-
-  @override
   R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
       visitor.visitFunctionTypeVariable(this, argument);
 }
@@ -516,9 +456,6 @@
   @override
   bool _equals(DartType other, _Assumptions assumptions) =>
       identical(this, other);
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) => false;
 }
 
 class VoidType extends DartType {
@@ -527,7 +464,7 @@
   factory VoidType() => const VoidType._();
 
   @override
-  bool get isTop => true;
+  bool _isTop(bool isLegacy) => true;
 
   @override
   R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
@@ -540,9 +477,6 @@
   bool _equals(DartType other, _Assumptions assumptions) {
     return identical(this, other);
   }
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) => false;
 }
 
 class DynamicType extends DartType {
@@ -551,7 +485,7 @@
   factory DynamicType() => const DynamicType._();
 
   @override
-  bool get isTop => true;
+  bool _isTop(bool isLegacy) => true;
 
   @override
   R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
@@ -564,9 +498,6 @@
   bool _equals(DartType other, _Assumptions assumptions) {
     return identical(this, other);
   }
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) => false;
 }
 
 class ErasedType extends DartType {
@@ -575,7 +506,7 @@
   factory ErasedType() => const ErasedType._();
 
   @override
-  bool get isTop => true;
+  bool _isTop(bool isLegacy) => true;
 
   @override
   R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
@@ -587,9 +518,6 @@
   @override
   bool _equals(DartType other, _Assumptions assumptions) =>
       identical(this, other);
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) => false;
 }
 
 /// Represents a type which is simultaneously top and bottom.
@@ -609,7 +537,7 @@
   factory AnyType() => const AnyType._();
 
   @override
-  bool get isTop => true;
+  bool _isTop(bool isLegacy) => true;
 
   @override
   R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
@@ -621,9 +549,6 @@
   @override
   bool _equals(DartType other, _Assumptions assumptions) =>
       identical(this, other);
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) => false;
 }
 
 class FunctionType extends DartType {
@@ -750,21 +675,6 @@
     }
     return result;
   }
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is FunctionType) {
-      return returnType._equalsModuloTop(other.returnType) &&
-          _equalTypesModuloTop(parameterTypes, other.parameterTypes) &&
-          _equalTypesModuloTop(
-              optionalParameterTypes, other.optionalParameterTypes) &&
-          equalElements(namedParameters, other.namedParameters) &&
-          _equalTypesModuloTop(
-              namedParameterTypes, other.namedParameterTypes) &&
-          _equalTypesModuloTop(typeVariableBounds, other.typeVariableBounds);
-    }
-    return false;
-  }
 }
 
 class FutureOrType extends DartType {
@@ -773,7 +683,7 @@
   FutureOrType(this.typeArgument);
 
   @override
-  bool get isTop => typeArgument.isTop;
+  bool _isTop(bool isLegacy) => typeArgument._isTop(isLegacy);
 
   @override
   bool get containsTypeVariables => typeArgument.containsTypeVariables;
@@ -807,14 +717,6 @@
   bool _equalsInternal(FutureOrType other, _Assumptions assumptions) {
     return typeArgument._equals(other.typeArgument, assumptions);
   }
-
-  @override
-  bool _equalsModuloTopInternal(DartType other) {
-    if (other is FutureOrType) {
-      return typeArgument._equalsModuloTop(other.typeArgument);
-    }
-    return false;
-  }
 }
 
 bool _equalTypes(List<DartType> a, List<DartType> b, _Assumptions assumptions) {
@@ -827,14 +729,6 @@
   return true;
 }
 
-bool _equalTypesModuloTop(List<DartType> a, List<DartType> b) {
-  if (a.length != b.length) return false;
-  for (int i = 0; i < a.length; i++) {
-    if (!a[i]._equalsModuloTop(b[i])) return false;
-  }
-  return true;
-}
-
 abstract class DartTypeVisitor<R, A> {
   const DartTypeVisitor();
 
@@ -1590,6 +1484,16 @@
   /// The types defined in 'dart:core'.
   CommonElements get commonElements;
 
+  bool get useLegacySubtyping;
+
+  /// Returns `true` if every type argument of [t] is a top type.
+  // TODO(fishythefish): Should we instead check if each type argument is at its
+  // bound?
+  bool treatAsRawType(DartType t) => t._treatAsRaw(useLegacySubtyping);
+
+  /// Returns `true` if [t] is a top type, that is, a supertype of every type.
+  bool isTopType(DartType t) => t._isTop(useLegacySubtyping);
+
   /// Returns `true` if [s] is a subtype of [t].
   bool isSubtype(DartType s, DartType t) => _subtypeHelper(s, t);
 
@@ -1627,7 +1531,7 @@
           s.index == t.index) return true;
 
       // Right Top:
-      if (t.isTop) return true;
+      if (isTopType(t)) return true;
 
       if (s is AnyType) return true;
       if (allowPotentialSubtypes &&
@@ -1636,12 +1540,14 @@
           (s is FunctionTypeVariable || t is FunctionTypeVariable)) return true;
 
       // Left Top:
-      if (s.isTop) return false;
+      if (isTopType(s)) return false;
 
       // Left Bottom:
-      // TODO(fishythefish): Update for NNBD - check for `Never` instead of
-      // `Null`.
-      if (s.isNull) return true;
+      if (useLegacySubtyping) {
+        if (s.isNull) return true;
+      } else {
+        if (s is NeverType) return true;
+      }
 
       // Left Type Variable Bound 1:
       if (s is TypeVariableType) {
@@ -1655,7 +1561,7 @@
       // Left Null:
       // Note: Interchanging the Left Null and Right Object rules allows us to
       // reduce casework.
-      if (s.isNull) {
+      if (!useLegacySubtyping && s.isNull) {
         if (t is FutureOrType) {
           return _isSubtype(s, sEnv, t.typeArgument, tEnv);
         }
@@ -1663,7 +1569,7 @@
       }
 
       // Right Object:
-      if (t.isObject) {
+      if (!useLegacySubtyping && t.isObject) {
         if (s is FutureOrType) {
           return _isSubtype(s.typeArgument, sEnv, t, tEnv);
         }
@@ -1680,7 +1586,8 @@
 
       // Right Legacy:
       if (t is LegacyType) {
-        return _isSubtype(s, sEnv, NullableType(t.baseType), tEnv);
+        return _isSubtype(s, sEnv,
+            useLegacySubtyping ? t.baseType : NullableType(t.baseType), tEnv);
       }
 
       // Left FutureOr:
@@ -1692,7 +1599,8 @@
 
       // Left Nullable:
       if (s is NullableType) {
-        return _isSubtype(commonElements.nullType, sEnv, t, tEnv) &&
+        return (useLegacySubtyping ||
+                _isSubtype(commonElements.nullType, sEnv, t, tEnv)) &&
             _isSubtype(s.baseType, sEnv, t, tEnv);
       }
 
@@ -1712,7 +1620,8 @@
 
       // Right Nullable:
       if (t is NullableType) {
-        return _isSubtype(s, sEnv, commonElements.nullType, tEnv) ||
+        return (!useLegacySubtyping &&
+                _isSubtype(s, sEnv, commonElements.nullType, tEnv)) ||
             _isSubtype(s, sEnv, t.baseType, tEnv);
       }
 
@@ -1736,10 +1645,18 @@
         if (s is FunctionType) {
           if (t.isGeneric) {
             if (!s.isGeneric) return false;
-            if (!_equalTypesModuloTop(
-                s.typeVariableBounds, t.typeVariableBounds)) {
+            List<DartType> sBounds = s.typeVariableBounds;
+            List<DartType> tBounds = t.typeVariableBounds;
+            int length = sBounds.length;
+            if (length != tBounds.length) {
               return false;
             }
+            for (int i = 0; i < length; i++) {
+              if (!_isSubtype(sBounds[i], sEnv, tBounds[i], tEnv) ||
+                  !_isSubtype(tBounds[i], tEnv, sBounds[i], sEnv)) {
+                return false;
+              }
+            }
             sEnv = sEnv.toSet()..addAll(s.typeVariables);
             tEnv = tEnv.toSet()..addAll(t.typeVariables);
           }
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 3cbac15..5dbcf12 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -2253,7 +2253,7 @@
     {bool isNullable: true}) {
   AbstractValueDomain abstractValueDomain = closedWorld.abstractValueDomain;
   AbstractValue otherType;
-  if (annotation.isTop) {
+  if (closedWorld.dartTypes.isTopType(annotation)) {
     return type;
   } else if (annotation is InterfaceType) {
     if (annotation.element == closedWorld.commonElements.objectClass) {
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index accf437..cec794d 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -319,7 +319,7 @@
       {bool isNullable: true}) {
     AbstractValue otherType;
     if (annotation is VoidType) return type;
-    if (annotation.isTop) {
+    if (_closedWorld.dartTypes.isTopType(annotation)) {
       if (isNullable) return type;
       // If the input is already narrowed to be not-null, there is no value
       // in adding another narrowing node.
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index b14ebae..fdfb99e 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -43,6 +43,7 @@
   CommonMasks(this._closedWorld);
 
   CommonElements get commonElements => _closedWorld.commonElements;
+  DartTypes get dartTypes => _closedWorld.dartTypes;
 
   TypeMask _dynamicType;
   TypeMask _nonNullType;
@@ -883,7 +884,7 @@
 
   @override
   String getCompactText(AbstractValue value) {
-    return formatType(value);
+    return formatType(dartTypes, value);
   }
 
   @override
@@ -903,7 +904,7 @@
 ///
 /// The default format is too verbose for the graph format since long strings
 /// create oblong nodes that obstruct the graph layout.
-String formatType(TypeMask type) {
+String formatType(DartTypes dartTypes, TypeMask type) {
   if (type is FlatTypeMask) {
     // TODO(asgerf): Disambiguate classes whose name is not unique. Using the
     //     library name for all classes is not a good idea, since library names
@@ -916,22 +917,22 @@
     return '${type.base.name}$nullFlag$subFlag';
   }
   if (type is UnionTypeMask) {
-    return type.disjointMasks.map(formatType).join(' | ');
+    return type.disjointMasks.map((m) => formatType(dartTypes, m)).join(' | ');
   }
   if (type is ContainerTypeMask) {
-    String container = formatType(type.forwardTo);
-    String member = formatType(type.elementType);
+    String container = formatType(dartTypes, type.forwardTo);
+    String member = formatType(dartTypes, type.elementType);
     return '$container<$member>';
   }
   if (type is MapTypeMask) {
-    String container = formatType(type.forwardTo);
-    String key = formatType(type.keyType);
-    String value = formatType(type.valueType);
+    String container = formatType(dartTypes, type.forwardTo);
+    String key = formatType(dartTypes, type.keyType);
+    String value = formatType(dartTypes, type.valueType);
     return '$container<$key,$value>';
   }
   if (type is ValueTypeMask) {
-    String baseType = formatType(type.forwardTo);
-    String value = type.value.toStructuredText();
+    String baseType = formatType(dartTypes, type.forwardTo);
+    String value = type.value.toStructuredText(dartTypes);
     return '$baseType=$value';
   }
   return '$type'; // Fall back on toString if not supported here.
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
index 1c965dc..fb475be 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
@@ -73,6 +73,6 @@
 
   @override
   String toString() {
-    return 'Value($forwardTo, value: ${value.toDartText()})';
+    return 'Value($forwardTo, value: ${value.toDartText(null)})';
   }
 }
diff --git a/pkg/compiler/lib/src/ir/types.dart b/pkg/compiler/lib/src/ir/types.dart
index cbaf115..f2b01cb 100644
--- a/pkg/compiler/lib/src/ir/types.dart
+++ b/pkg/compiler/lib/src/ir/types.dart
@@ -11,8 +11,10 @@
 /// Support for subtype checks of kernel based [DartType]s.
 class KernelDartTypes extends DartTypes {
   final IrToElementMap elementMap;
+  @override
+  final bool useLegacySubtyping;
 
-  KernelDartTypes(this.elementMap);
+  KernelDartTypes(this.elementMap, this.useLegacySubtyping);
 
   @override
   InterfaceType getThisType(ClassEntity cls) {
diff --git a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
index 46b78b2..966e8a7 100644
--- a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
+++ b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
@@ -205,6 +205,8 @@
       {bool typeCast, bool nativeCheckOnly}) {
     assert(type is! TypedefType);
 
+    DartTypes dartTypes = commonElements.dartTypes;
+
     if (type is TypeVariableType) {
       return typeCast
           ? 'subtypeOfRuntimeTypeCast'
@@ -275,16 +277,17 @@
 
     if ((element == commonElements.listClass ||
             element == commonElements.jsArrayClass) &&
-        type.treatAsRaw) {
+        dartTypes.treatAsRawType(type)) {
       if (nativeCheckOnly) return null;
       return 'list$suffix';
     }
 
-    if (commonElements.isListSupertype(element) && type.treatAsRaw) {
+    if (commonElements.isListSupertype(element) &&
+        dartTypes.treatAsRawType(type)) {
       return nativeCheck ? 'listSuperNative$suffix' : 'listSuper$suffix';
     }
 
-    if (type is InterfaceType && !type.treatAsRaw) {
+    if (type is InterfaceType && !dartTypes.treatAsRawType(type)) {
       return typeCast ? 'subtypeCast' : 'assertSubtype';
     }
 
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 2146a2c..9a89069 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -392,7 +392,7 @@
         throw failedAt(
             NO_LOCATION_SPANNABLE,
             "Unexpected type variable '${variable}'"
-            " in constant '${constant.toDartText()}'");
+            " in constant '${constant.toDartText(_commonElements.dartTypes)}'");
       }
 
       jsAst.Expression rti =
@@ -463,7 +463,7 @@
   jsAst.Expression maybeAddTypeArguments(
       ConstantValue constant, InterfaceType type, jsAst.Expression value) {
     if (type is InterfaceType &&
-        !type.treatAsRaw &&
+        !_commonElements.dartTypes.treatAsRawType(type) &&
         _rtiNeed.classNeedsTypeArguments(type.element)) {
       return new jsAst.Call(
           getHelperProperty(_commonElements.setRuntimeTypeInfo),
@@ -490,7 +490,7 @@
       throw failedAt(
           NO_LOCATION_SPANNABLE,
           "Unexpected type variable '${variable}'"
-          " in constant '${constant.toDartText()}'");
+          " in constant '${constant.toDartText(_commonElements.dartTypes)}'");
     }
 
     List<jsAst.Expression> arguments = <jsAst.Expression>[];
diff --git a/pkg/compiler/lib/src/js_backend/field_analysis.dart b/pkg/compiler/lib/src/js_backend/field_analysis.dart
index 766013e..a40b882 100644
--- a/pkg/compiler/lib/src/js_backend/field_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/field_analysis.dart
@@ -9,6 +9,7 @@
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/entity_utils.dart';
+import '../elements/types.dart';
 import '../ir/scope_visitor.dart';
 import '../js_model/elements.dart' show JField;
 import '../js_model/js_world_builder.dart';
@@ -170,7 +171,7 @@
 
   @override
   String toString() =>
-      'AllocatorData(initialValue=${initialValue?.toStructuredText()},'
+      'AllocatorData(initialValue=${initialValue?.toStructuredText(null)},'
       'initializers=$initializers)';
 }
 
@@ -206,14 +207,14 @@
         name = null,
         value = null;
 
-  String get shortText {
+  String shortText(DartTypes dartTypes) {
     switch (kind) {
       case InitializerKind.direct:
-        return value.toStructuredText();
+        return value.toStructuredText(dartTypes);
       case InitializerKind.positional:
-        return '$index:${value.toStructuredText()}';
+        return '$index:${value.toStructuredText(dartTypes)}';
       case InitializerKind.named:
-        return '$name:${value.toStructuredText()}';
+        return '$name:${value.toStructuredText(dartTypes)}';
       case InitializerKind.complex:
         return '?';
     }
@@ -221,7 +222,7 @@
   }
 
   @override
-  String toString() => shortText;
+  String toString() => shortText(null);
 }
 
 class JFieldAnalysis {
@@ -631,7 +632,7 @@
 
   @override
   String toString() =>
-      'FieldAnalysisData(initialValue=${initialValue?.toStructuredText()},'
+      'FieldAnalysisData(initialValue=${initialValue?.toStructuredText(null)},'
       'isInitializedInAllocator=$isInitializedInAllocator,'
       'isEffectivelyFinal=$isEffectivelyFinal,isElided=$isElided,'
       'isEager=$isEager,eagerCreationIndex=$eagerCreationIndex,'
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 9562b9f..5ccffe9 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -58,6 +58,8 @@
       this._classHierarchyBuilder,
       this._annotationsData);
 
+  DartTypes get _dartTypes => _commonElements.dartTypes;
+
   @override
   WorldImpact transformResolutionImpact(ResolutionImpact worldImpact) {
     TransformedWorldImpact transformed =
@@ -330,7 +332,7 @@
     type = _elementEnvironment.getUnaliasedType(type);
     registerImpact(_impacts.typeCheck);
 
-    if (!type.treatAsRaw ||
+    if (!_dartTypes.treatAsRawType(type) ||
         type.containsTypeVariables ||
         type is FunctionType) {
       registerImpact(_impacts.genericTypeCheck);
@@ -382,7 +384,8 @@
     type = type.unaliased;
     _impacts.typeCheck.registerImpact(transformed, _elementEnvironment);
 
-    if (!type.treatAsRaw || type.containsTypeVariables) {
+    if (!_closedWorld.dartTypes.treatAsRawType(type) ||
+        type.containsTypeVariables) {
       _impacts.genericIsCheck.registerImpact(transformed, _elementEnvironment);
     }
     if (type is InterfaceType && _nativeData.isNativeClass(type.element)) {
diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
index 867c379..e92b0ce 100644
--- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart
+++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
@@ -277,7 +277,7 @@
     // We can use an instanceof check for raw types that have no subclass that
     // is mixed-in or in an implements clause.
 
-    if (!type.treatAsRaw) return false;
+    if (!closedWorld.dartTypes.treatAsRawType(type)) return false;
     if (type is FutureOrType) return false;
     InterfaceType interfaceType = type;
     ClassEntity classElement = interfaceType.element;
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 16a3050..e397bab 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -832,8 +832,8 @@
 
   RuntimeTypesEncoderImpl(this.rtiTags, NativeBasicData nativeData,
       this._elementEnvironment, this.commonElements, this._rtiNeed)
-      : _representationGenerator =
-            new TypeRepresentationGenerator(rtiTags, nativeData);
+      : _representationGenerator = new TypeRepresentationGenerator(
+            commonElements.dartTypes, rtiTags, nativeData);
 
   /// Returns the JavaScript template to determine at runtime if a type object
   /// is a function type.
@@ -969,6 +969,7 @@
 
 class TypeRepresentationGenerator
     implements DartTypeVisitor<jsAst.Expression, ModularEmitter> {
+  final DartTypes _dartTypes;
   final RuntimeTypeTags _rtiTags;
   final NativeBasicData _nativeData;
 
@@ -977,7 +978,7 @@
   Map<TypeVariableType, jsAst.Expression> typedefBindings;
   List<FunctionTypeVariable> functionTypeVariables = <FunctionTypeVariable>[];
 
-  TypeRepresentationGenerator(this._rtiTags, this._nativeData);
+  TypeRepresentationGenerator(this._dartTypes, this._rtiTags, this._nativeData);
 
   /// Creates a type representation for [type]. [onVariable] is called to
   /// provide the type representation for type variables.
@@ -1245,7 +1246,7 @@
       jsAst.ObjectInitializer initializer = visit(unaliasedType, emitter);
       // We have to encode the aliased type.
       jsAst.Expression name = getJavaScriptClassName(type.element, emitter);
-      jsAst.Expression encodedTypedef = type.treatAsRaw
+      jsAst.Expression encodedTypedef = _dartTypes.treatAsRawType(type)
           ? name
           : visitList(type.typeArguments, emitter, head: name);
 
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart b/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart
index 982e018..ce9fd1d 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart
@@ -130,10 +130,10 @@
 
   Set<ClassEntity> getClassesUsedInSubstitutions(TypeChecks checks);
 
-  static bool hasTypeArguments(DartType type) {
+  static bool hasTypeArguments(DartTypes dartTypes, DartType type) {
     if (type is InterfaceType) {
       InterfaceType interfaceType = type;
-      return !interfaceType.treatAsRaw;
+      return !dartTypes.treatAsRawType(interfaceType);
     }
     return false;
   }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index a303026..4f62071 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -1057,7 +1057,7 @@
       checks.forEach((DartType type) {
         if (type is InterfaceType) {
           InterfaceType itf = type;
-          if (!itf.treatAsRaw) {
+          if (!closedWorld.dartTypes.treatAsRawType(itf)) {
             potentiallyNeedTypeArguments(itf.element);
           }
         } else {
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index fc87346..5008ebd 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -182,7 +182,7 @@
 
   @override
   String toString() {
-    return 'Constant(name=${name.key},value=${value.toStructuredText()})';
+    return 'Constant(name=${name.key},value=${value.toStructuredText(null)})';
   }
 }
 
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
index 3ec4b45..240cb55 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
@@ -158,6 +158,6 @@
     // We never generate accessors for top-level/static fields.
     if (!member.isInstanceMember) return true;
     DartType type = _elementEnvironment.getFieldType(member);
-    return type.isTop;
+    return _closedWorld.dartTypes.isTopType(type);
   }
 }
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 41c8758..dcbbbf2 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -141,10 +141,10 @@
       AnnotationsData annotations)
       : this.options = _elementMap.options {
     _elementEnvironment = new JsElementEnvironment(this);
-    _commonElements =
-        new CommonElementsImpl(_elementEnvironment, _elementMap.options);
     _typeConverter = new DartTypeConverter(this);
-    _types = new KernelDartTypes(this);
+    _types = new KernelDartTypes(this, options.useLegacySubtyping);
+    _commonElements = new CommonElementsImpl(
+        _types, _elementEnvironment, _elementMap.options);
     _constantValuefier = new ConstantValuefier(this);
 
     programEnv = _elementMap.env.convert();
@@ -321,9 +321,10 @@
   JsKernelToElementMap.readFromDataSource(this.options, this.reporter,
       this._environment, ir.Component component, DataSource source) {
     _elementEnvironment = new JsElementEnvironment(this);
-    _commonElements = new CommonElementsImpl(_elementEnvironment, options);
     _typeConverter = new DartTypeConverter(this);
-    _types = new KernelDartTypes(this);
+    _types = new KernelDartTypes(this, options.useLegacySubtyping);
+    _commonElements =
+        new CommonElementsImpl(_types, _elementEnvironment, options);
     _constantValuefier = new ConstantValuefier(this);
 
     source.registerComponentLookup(new ComponentLookup(component));
@@ -1816,7 +1817,7 @@
           new RecordContainerDefinition(getMemberDefinition(member).location),
           thisType,
           supertype,
-          getOrderedTypeSet(supertype.element).extendClass(thisType));
+          getOrderedTypeSet(supertype.element).extendClass(_types, thisType));
       classes.register(container, containerData, new RecordEnv(memberMap));
 
       InterfaceType memberThisType = member.enclosingClass != null
@@ -1878,7 +1879,7 @@
         new ClosureClassDefinition(location),
         thisType,
         supertype,
-        getOrderedTypeSet(supertype.element).extendClass(thisType));
+        getOrderedTypeSet(supertype.element).extendClass(_types, thisType));
     classes.register(classEntity, closureData, new ClosureClassEnv(memberMap));
 
     Local closureEntity;
diff --git a/pkg/compiler/lib/src/js_model/js_world_builder.dart b/pkg/compiler/lib/src/js_model/js_world_builder.dart
index 4382db5..0eec8fd 100644
--- a/pkg/compiler/lib/src/js_model/js_world_builder.dart
+++ b/pkg/compiler/lib/src/js_model/js_world_builder.dart
@@ -729,7 +729,8 @@
       }
       return null;
     }
-    return constant.accept(new _ConstantConverter(toBackendEntity), null);
+    return constant.accept(
+        new _ConstantConverter(_backend.types, toBackendEntity), null);
   }
 }
 
@@ -853,10 +854,11 @@
 }
 
 class _ConstantConverter implements ConstantValueVisitor<ConstantValue, Null> {
+  final DartTypes _dartTypes;
   final Entity Function(Entity) toBackendEntity;
   final _TypeConverter typeConverter;
 
-  _ConstantConverter(this.toBackendEntity)
+  _ConstantConverter(this._dartTypes, this.toBackendEntity)
       : typeConverter = new _TypeConverter();
 
   @override
@@ -952,14 +954,14 @@
   ConstantValue visitInterceptor(InterceptorConstantValue constant, _) {
     // Interceptor constants are only created in the SSA graph builder.
     throw new UnsupportedError(
-        "Unexpected visitInterceptor ${constant.toStructuredText()}");
+        "Unexpected visitInterceptor ${constant.toStructuredText(_dartTypes)}");
   }
 
   @override
   ConstantValue visitDeferredGlobal(DeferredGlobalConstantValue constant, _) {
     // Deferred global constants are only created in the SSA graph builder.
     throw new UnsupportedError(
-        "Unexpected DeferredGlobalConstantValue ${constant.toStructuredText()}");
+        "Unexpected DeferredGlobalConstantValue ${constant.toStructuredText(_dartTypes)}");
   }
 
   @override
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 6c99e09..c91a030 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -6,11 +6,16 @@
 // on the dart2js internals.
 library compiler.src.kernel.dart2js_target;
 
+import 'package:_fe_analyzer_shared/src/messages/codes.dart'
+    show Message, LocatedMessage;
+import 'package:_js_interop_checks/js_interop_checks.dart';
 import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/core_types.dart';
 import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart';
 import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
+
 import 'invocation_mirror_constants.dart';
 
 const Iterable<String> _allowedDartSchemePaths = const <String>[
@@ -88,7 +93,14 @@
       Map<String, String> environmentDefines,
       DiagnosticReporter diagnosticReporter,
       ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg)}) {}
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
+    for (var library in libraries) {
+      JsInteropChecks(
+              diagnosticReporter as DiagnosticReporter<Message, LocatedMessage>)
+          .visitLibrary(library);
+    }
+  }
 
   @override
   ir.Expression instantiateInvocation(
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index e4a858b..d2559b7 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -119,9 +119,10 @@
   KernelToElementMapImpl(
       this.reporter, this._environment, this._frontendStrategy, this.options) {
     _elementEnvironment = new KernelElementEnvironment(this);
-    _commonElements = new CommonElementsImpl(_elementEnvironment, options);
     _typeConverter = new DartTypeConverter(this);
-    _types = new KernelDartTypes(this);
+    _types = new KernelDartTypes(this, options.useLegacySubtyping);
+    _commonElements =
+        new CommonElementsImpl(_types, _elementEnvironment, options);
     _constantValuefier = new ConstantValuefier(this);
   }
 
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index 315f648..1a75ffd 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -58,7 +58,8 @@
       VariableScopeModel variableScopeModel,
       this._annotations,
       this._constantValuefier)
-      : this.impactBuilder = new ResolutionWorldImpactBuilder(currentMember),
+      : this.impactBuilder = new ResolutionWorldImpactBuilder(
+            elementMap.commonElements.dartTypes, currentMember),
         super(staticTypeContext, elementMap.classHierarchy, variableScopeModel);
 
   @override
@@ -95,7 +96,8 @@
 
   KernelImpactConverter(this.elementMap, this.currentMember, this.reporter,
       this._options, this._constantValuefier, this.staticTypeContext)
-      : this.impactBuilder = new ResolutionWorldImpactBuilder(currentMember);
+      : this.impactBuilder = new ResolutionWorldImpactBuilder(
+            elementMap.commonElements.dartTypes, currentMember);
 
   @override
   ir.TypeEnvironment get typeEnvironment => elementMap.typeEnvironment;
@@ -124,6 +126,7 @@
   ResolutionWorldImpactBuilder get impactBuilder;
   ir.TypeEnvironment get typeEnvironment;
   CommonElements get commonElements;
+  DartTypes get dartTypes => commonElements.dartTypes;
   NativeBasicData get _nativeBasicData;
   ConstantValuefier get _constantValuefier;
   ir.StaticTypeContext get staticTypeContext;
@@ -171,9 +174,9 @@
       List<ConstantValue> metadata =
           elementMap.elementEnvironment.getMemberMetadata(member);
       Iterable<String> createsAnnotations =
-          getCreatesAnnotations(reporter, commonElements, metadata);
+          getCreatesAnnotations(dartTypes, reporter, commonElements, metadata);
       Iterable<String> returnsAnnotations =
-          getReturnsAnnotations(reporter, commonElements, metadata);
+          getReturnsAnnotations(dartTypes, reporter, commonElements, metadata);
       impactBuilder.registerNativeData(elementMap.getNativeBehaviorForFieldLoad(
           field, createsAnnotations, returnsAnnotations,
           isJsInterop: isJsInterop));
@@ -192,9 +195,9 @@
       List<ConstantValue> metadata =
           elementMap.elementEnvironment.getMemberMetadata(member);
       Iterable<String> createsAnnotations =
-          getCreatesAnnotations(reporter, commonElements, metadata);
+          getCreatesAnnotations(dartTypes, reporter, commonElements, metadata);
       Iterable<String> returnsAnnotations =
-          getReturnsAnnotations(reporter, commonElements, metadata);
+          getReturnsAnnotations(dartTypes, reporter, commonElements, metadata);
       impactBuilder.registerNativeData(elementMap.getNativeBehaviorForMethod(
           constructor, createsAnnotations, returnsAnnotations,
           isJsInterop: isJsInterop));
@@ -238,9 +241,9 @@
       List<ConstantValue> metadata =
           elementMap.elementEnvironment.getMemberMetadata(member);
       Iterable<String> createsAnnotations =
-          getCreatesAnnotations(reporter, commonElements, metadata);
+          getCreatesAnnotations(dartTypes, reporter, commonElements, metadata);
       Iterable<String> returnsAnnotations =
-          getReturnsAnnotations(reporter, commonElements, metadata);
+          getReturnsAnnotations(dartTypes, reporter, commonElements, metadata);
       impactBuilder.registerNativeData(elementMap.getNativeBehaviorForMethod(
           procedure, createsAnnotations, returnsAnnotations,
           isJsInterop: isJsInterop));
diff --git a/pkg/compiler/lib/src/kernel/native_basic_data.dart b/pkg/compiler/lib/src/kernel/native_basic_data.dart
index 5cc8d55..98a9541 100644
--- a/pkg/compiler/lib/src/kernel/native_basic_data.dart
+++ b/pkg/compiler/lib/src/kernel/native_basic_data.dart
@@ -32,8 +32,8 @@
     KCommonElements commonElements = elementMap.commonElements;
     String annotationName;
     for (ConstantValue value in metadata) {
-      String name = readAnnotationName(
-          spannable, value, commonElements.jsAnnotationClass,
+      String name = readAnnotationName(commonElements.dartTypes, spannable,
+          value, commonElements.jsAnnotationClass,
           defaultValue: '');
       if (annotationName == null) {
         annotationName = name;
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index 4329315..e02b89d 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -912,7 +912,7 @@
   }
 }
 
-List<String> _getAnnotations(DiagnosticReporter reporter,
+List<String> _getAnnotations(DartTypes dartTypes, DiagnosticReporter reporter,
     Iterable<ConstantValue> metadata, ClassEntity cls) {
   List<String> annotations = [];
   for (ConstantValue value in metadata) {
@@ -924,7 +924,7 @@
     // TODO(sra): Better validation of the constant.
     if (fields.length != 1 || !fields.single.isString) {
       reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
-          'Annotations needs one string: ${value.toStructuredText()}');
+          'Annotations needs one string: ${value.toStructuredText(dartTypes)}');
     }
     StringConstantValue specStringConstant = fields.single;
     String specString = specStringConstant.stringValue;
@@ -933,14 +933,20 @@
   return annotations;
 }
 
-List<String> getCreatesAnnotations(DiagnosticReporter reporter,
-    CommonElements commonElements, Iterable<ConstantValue> metadata) {
+List<String> getCreatesAnnotations(
+    DartTypes dartTypes,
+    DiagnosticReporter reporter,
+    CommonElements commonElements,
+    Iterable<ConstantValue> metadata) {
   return _getAnnotations(
-      reporter, metadata, commonElements.annotationCreatesClass);
+      dartTypes, reporter, metadata, commonElements.annotationCreatesClass);
 }
 
-List<String> getReturnsAnnotations(DiagnosticReporter reporter,
-    CommonElements commonElements, Iterable<ConstantValue> metadata) {
+List<String> getReturnsAnnotations(
+    DartTypes dartTypes,
+    DiagnosticReporter reporter,
+    CommonElements commonElements,
+    Iterable<ConstantValue> metadata) {
   return _getAnnotations(
-      reporter, metadata, commonElements.annotationReturnsClass);
+      dartTypes, reporter, metadata, commonElements.annotationReturnsClass);
 }
diff --git a/pkg/compiler/lib/src/native/resolver.dart b/pkg/compiler/lib/src/native/resolver.dart
index e72f3ab..10b0f3f 100644
--- a/pkg/compiler/lib/src/native/resolver.dart
+++ b/pkg/compiler/lib/src/native/resolver.dart
@@ -8,6 +8,7 @@
 import '../common_elements.dart' show KElementEnvironment;
 import '../constants/values.dart';
 import '../elements/entities.dart';
+import '../elements/types.dart';
 import '../ir/annotations.dart';
 import '../js_backend/native_data.dart';
 
@@ -143,8 +144,8 @@
 
 /// Extracts the name if [value] is a named annotation based on
 /// [annotationClass], otherwise returns `null`.
-String readAnnotationName(
-    Spannable spannable, ConstantValue value, ClassEntity annotationClass,
+String readAnnotationName(DartTypes dartTypes, Spannable spannable,
+    ConstantValue value, ClassEntity annotationClass,
     {String defaultValue}) {
   if (!value.isConstructedObject) return null;
   ConstructedConstantValue constructedObject = value;
@@ -153,8 +154,8 @@
   Iterable<ConstantValue> fields = constructedObject.fields.values;
   // TODO(sra): Better validation of the constant.
   if (fields.length != 1) {
-    failedAt(
-        spannable, 'Annotations needs one string: ${value.toStructuredText()}');
+    failedAt(spannable,
+        'Annotations needs one string: ${value.toStructuredText(dartTypes)}');
     return null;
   } else if (fields.single is StringConstantValue) {
     StringConstantValue specStringConstant = fields.single;
@@ -162,8 +163,8 @@
   } else if (defaultValue != null && fields.single is NullConstantValue) {
     return defaultValue;
   } else {
-    failedAt(
-        spannable, 'Annotations needs one string: ${value.toStructuredText()}');
+    failedAt(spannable,
+        'Annotations needs one string: ${value.toStructuredText(dartTypes)}');
     return null;
   }
 }
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 7abc5d5..99c5833 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -334,6 +334,12 @@
   /// weak or strong semantics.
   bool useWeakNullSafetySemantics = false;
 
+  /// Whether to use legacy subtype semantics rather than null-safe semantics.
+  /// This is `true` if null-safety is disabled, i.e. all code is legacy code,
+  /// or if weak null-safety semantics are being used, since we do not emit
+  /// warnings.
+  bool get useLegacySubtyping => !useNullSafety || useWeakNullSafetySemantics;
+
   /// The path to the file that contains the profiled allocations.
   ///
   /// The file must contain the Map that was produced by using
diff --git a/pkg/compiler/lib/src/ordered_typeset.dart b/pkg/compiler/lib/src/ordered_typeset.dart
index ce4ff17..d732744 100644
--- a/pkg/compiler/lib/src/ordered_typeset.dart
+++ b/pkg/compiler/lib/src/ordered_typeset.dart
@@ -98,9 +98,9 @@
   /// Creates a new [OrderedTypeSet] for [type] when it directly extends the
   /// class which this set represents. This is for instance used to create the
   /// type set for [ClosureClassElement] which extends [Closure].
-  OrderedTypeSet extendClass(InterfaceType type) {
+  OrderedTypeSet extendClass(DartTypes dartTypes, InterfaceType type) {
     assert(
-        types.head.treatAsRaw,
+        dartTypes.treatAsRawType(types.head),
         failedAt(
             type.element,
             'Cannot extend generic class ${types.head} using '
diff --git a/pkg/compiler/lib/src/resolution/registry.dart b/pkg/compiler/lib/src/resolution/registry.dart
index a7f9fa0..ff64822 100644
--- a/pkg/compiler/lib/src/resolution/registry.dart
+++ b/pkg/compiler/lib/src/resolution/registry.dart
@@ -7,6 +7,7 @@
 import '../common/resolution.dart' show ResolutionImpact;
 import '../constants/values.dart';
 import '../elements/entities.dart' show ClassEntity, MemberEntity;
+import '../elements/types.dart';
 import '../universe/feature.dart';
 import '../universe/world_impact.dart' show WorldImpact, WorldImpactBuilderImpl;
 import '../util/enumset.dart' show EnumSet;
@@ -14,6 +15,7 @@
 
 class ResolutionWorldImpactBuilder extends WorldImpactBuilderImpl
     implements ResolutionImpact {
+  final DartTypes _dartTypes;
   @override
   final MemberEntity member;
   EnumSet<Feature> _features;
@@ -27,7 +29,7 @@
   Set<RuntimeTypeUse> _runtimeTypeUses;
   Set<GenericInstantiation> _genericInstantiations;
 
-  ResolutionWorldImpactBuilder(this.member);
+  ResolutionWorldImpactBuilder(this._dartTypes, this.member);
 
   @override
   bool get isEmpty => false;
@@ -174,7 +176,7 @@
     if (_constantLiterals != null) {
       sb.write('\n const-literals:');
       for (ConstantValue constant in _constantLiterals) {
-        sb.write('\n  ${constant.toDartText()}');
+        sb.write('\n  ${constant.toDartText(_dartTypes)}');
       }
     }
     if (_constSymbolNames != null) {
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 409aac3..87c7c5a 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -217,7 +217,7 @@
 
   InferredData get _inferredData => globalInferenceResults.inferredData;
 
-  DartTypes get types => closedWorld.dartTypes;
+  DartTypes get dartTypes => closedWorld.dartTypes;
 
   void push(HInstruction instruction) {
     add(instruction);
@@ -387,6 +387,8 @@
         return options.useNewRti;
       case 'VARIANCE':
         return options.enableVariance;
+      case 'LEGACY':
+        return options.useLegacySubtyping;
       default:
         return null;
     }
@@ -602,7 +604,7 @@
       // Use dynamic type because the type computed by the inferrer is
       // narrowed to the type annotation.
       HInstruction parameter =
-          new HParameterValue(field, _abstractValueDomain.dynamicType);
+          HParameterValue(field, _abstractValueDomain.dynamicType);
       // Add the parameter as the last instruction of the entry block.
       // If the method is intercepted, we want the actual receiver
       // to be the first parameter.
@@ -615,7 +617,7 @@
       // possibly its type but not the initializer.
       value.sourceInformation ??= _sourceInformationBuilder.buildSet(node);
       if (!_fieldAnalysis.getFieldData(field).isElided) {
-        add(new HFieldSet(_abstractValueDomain, field, thisInstruction, value));
+        add(HFieldSet(_abstractValueDomain, field, thisInstruction, value));
       }
     } else {
       if (node.initializer != null) {
@@ -629,7 +631,7 @@
         stack.add(graph.addConstantNull(closedWorld));
       }
       HInstruction value = pop();
-      _closeAndGotoExit(new HReturn(_abstractValueDomain, value,
+      _closeAndGotoExit(HReturn(_abstractValueDomain, value,
           _sourceInformationBuilder.buildReturn(node)));
     }
     _closeFunction();
@@ -1266,7 +1268,7 @@
         _elementMap.getFunctionType(originalClosureNode);
     HInstruction rti =
         _typeBuilder.analyzeTypeArgumentNewRti(functionType, sourceElement);
-    close(new HReturn(_abstractValueDomain, rti,
+    close(HReturn(_abstractValueDomain, rti,
             _sourceInformationBuilder.buildReturn(originalClosureNode)))
         .addSuccessor(graph.exit);
     _closeFunction();
@@ -1310,7 +1312,7 @@
                   null, _abstractValueDomain.boolType));
             },
             visitThen: () {
-              _closeAndGotoExit(new HReturn(
+              _closeAndGotoExit(HReturn(
                   _abstractValueDomain,
                   graph.addConstantBool(false, closedWorld),
                   _sourceInformationBuilder.buildReturn(functionNode)));
@@ -1416,8 +1418,7 @@
         _abstractValueDomain.dynamicType, // TODO: better type.
         sourceInformation));
 
-    _closeAndGotoExit(
-        new HReturn(_abstractValueDomain, pop(), sourceInformation));
+    _closeAndGotoExit(HReturn(_abstractValueDomain, pop(), sourceInformation));
 
     _closeFunction();
   }
@@ -1527,43 +1528,34 @@
     }
   }
 
-  /// Builds a SSA graph for FunctionNodes of external methods.
+  /// Builds a SSA graph for FunctionNodes of external methods. This produces a
+  /// graph for a method with Dart calling conventions that forwards to the
+  /// actual external method.
   void _buildExternalFunctionNode(
       FunctionEntity function, ir.FunctionNode functionNode) {
-    // TODO(johnniwinther): Non-js-interop external functions should
-    // throw a runtime error.
     assert(functionNode.body == null);
+
+    bool isJsInterop = closedWorld.nativeData.isJsInteropMember(function);
+
     _openFunction(function,
         functionNode: functionNode,
         parameterStructure: function.parameterStructure,
         checks: _checksForFunction(function));
 
     if (closedWorld.nativeData.isNativeMember(targetElement)) {
-      registry.registerNativeMethod(targetElement);
-      String nativeName;
-      if (closedWorld.nativeData.hasFixedBackendName(targetElement)) {
-        nativeName = closedWorld.nativeData.getFixedBackendName(targetElement);
-      } else {
-        nativeName = targetElement.name;
-      }
-
-      String templateReceiver = '';
-      List<String> templateArguments = <String>[];
-      List<HInstruction> inputs = <HInstruction>[];
+      List<HInstruction> inputs = [];
       if (targetElement.isInstanceMember) {
-        templateReceiver = '#.';
         inputs.add(localsHandler.readThis(
             sourceInformation:
                 _sourceInformationBuilder.buildGet(functionNode)));
       }
 
       void handleParameter(ir.VariableDeclaration param) {
-        templateArguments.add('#');
         Local local = _localsMap.getLocalVariable(param);
         // Convert Dart function to JavaScript function.
         HInstruction argument = localsHandler.readLocal(local);
         ir.DartType type = param.type;
-        if (type is ir.FunctionType) {
+        if (!isJsInterop && type is ir.FunctionType) {
           int arity = type.positionalParameters.length;
           _pushStaticInvocation(
               _commonElements.closureConverter,
@@ -1593,32 +1585,22 @@
         namedParameters.forEach(handleParameter);
       }
 
-      String arguments = templateArguments.join(',');
+      NativeBehavior nativeBehavior =
+          _nativeData.getNativeMethodBehavior(function);
+      AbstractValue returnType =
+          _typeInferenceMap.typeFromNativeBehavior(nativeBehavior, closedWorld);
 
-      // TODO(sra): Use declared type or NativeBehavior type.
-      AbstractValue typeMask = _abstractValueDomain.dynamicType;
-      String template;
-      if (targetElement.isGetter) {
-        template = '${templateReceiver}$nativeName';
-      } else if (targetElement.isSetter) {
-        template = '${templateReceiver}$nativeName = ${arguments}';
-      } else {
-        template = '${templateReceiver}$nativeName(${arguments})';
-      }
-
-      push(new HForeignCode(
-          js.js.uncachedExpressionTemplate(template), typeMask, inputs,
-          effects: new SideEffects()));
+      push(HInvokeExternal(targetElement, inputs, returnType, nativeBehavior,
+          sourceInformation: null));
       // TODO(johnniwinther): Provide source information.
       HInstruction value = pop();
       if (targetElement.isSetter) {
-        value = graph.addConstantNull(closedWorld);
+        _closeAndGotoExit(HGoto(_abstractValueDomain));
+      } else {
+        _emitReturn(value, _sourceInformationBuilder.buildReturn(functionNode));
       }
-      close(new HReturn(_abstractValueDomain, value,
-              _sourceInformationBuilder.buildReturn(functionNode)))
-          .addSuccessor(graph.exit);
     }
-    // TODO(sra): Handle JS-interop methods.
+
     _closeFunction();
   }
 
@@ -1824,10 +1806,8 @@
   void visitReturnStatement(ir.ReturnStatement node) {
     SourceInformation sourceInformation =
         _sourceInformationBuilder.buildReturn(node);
-    HInstruction value;
-    if (node.expression == null) {
-      value = graph.addConstantNull(closedWorld);
-    } else {
+    HInstruction value = null;
+    if (node.expression != null) {
       node.expression.accept(this);
       value = pop();
       if (_currentFrame.asyncMarker == AsyncMarker.ASYNC) {
@@ -3128,7 +3108,8 @@
   /// Set the runtime type information if necessary.
   HInstruction _setListRuntimeTypeInfoIfNeeded(HInstruction object,
       InterfaceType type, SourceInformation sourceInformation) {
-    if (!_rtiNeed.classNeedsTypeArguments(type.element) || type.treatAsRaw) {
+    if (!_rtiNeed.classNeedsTypeArguments(type.element) ||
+        dartTypes.treatAsRawType(type)) {
       return object;
     }
     if (options.useNewRti) {
@@ -4065,7 +4046,7 @@
         localsHandler.substInContext(_elementMap.getDartType(type));
     if (typeValue is! InterfaceType) return false;
     InterfaceType interfaceType = typeValue;
-    if (!interfaceType.treatAsRaw) return false;
+    if (!dartTypes.treatAsRawType(interfaceType)) return false;
 
     ClassEntity cls = interfaceType.element;
     InterfaceType thisType = _elementEnvironment.getThisType(cls);
@@ -4853,21 +4834,21 @@
       return;
     }
 
-    var instruction;
     if (closedWorld.nativeData.isJsInteropMember(target)) {
-      instruction = _invokeJsInteropFunction(target, arguments);
-    } else {
-      instruction = new HInvokeStatic(
-          target, arguments, typeMask, typeArguments,
-          targetCanThrow: !_inferredData.getCannotThrow(target))
-        ..sourceInformation = sourceInformation;
-
-      if (_currentImplicitInstantiations.isNotEmpty) {
-        instruction.instantiatedTypes =
-            new List<InterfaceType>.from(_currentImplicitInstantiations);
-      }
-      instruction.sideEffects = _inferredData.getSideEffectsOfElement(target);
+      push(_invokeJsInteropFunction(target, arguments));
+      return;
     }
+
+    HInvokeStatic instruction = new HInvokeStatic(
+        target, arguments, typeMask, typeArguments,
+        targetCanThrow: !_inferredData.getCannotThrow(target))
+      ..sourceInformation = sourceInformation;
+
+    if (_currentImplicitInstantiations.isNotEmpty) {
+      instruction.instantiatedTypes =
+          new List<InterfaceType>.from(_currentImplicitInstantiations);
+    }
+    instruction.sideEffects = _inferredData.getSideEffectsOfElement(target);
     push(instruction);
   }
 
@@ -4968,10 +4949,9 @@
     }
   }
 
-  HForeignCode _invokeJsInteropFunction(
+  HInstruction _invokeJsInteropFunction(
       FunctionEntity element, List<HInstruction> arguments) {
     assert(closedWorld.nativeData.isJsInteropMember(element));
-    registry.registerNativeMethod(element);
 
     if (element is ConstructorEntity &&
         element.isFactoryConstructor &&
@@ -5014,25 +4994,18 @@
             _elementEnvironment.getThisType(constructor.enclosingClass);
         nativeBehavior.typesReturned.add(thisType);
       }
+      registry.registerNativeMethod(element);
       // TODO(efortuna): Source information.
       return new HForeignCode(
           codeTemplate, _abstractValueDomain.dynamicType, filteredArguments,
           nativeBehavior: nativeBehavior);
     }
 
-    var target = new HForeignCode(
-        js.js
-            .parseForeignJS("${_nativeData.getFixedBackendMethodPath(element)}."
-                "${_nativeData.getFixedBackendName(element)}"),
-        _abstractValueDomain.dynamicType,
-        <HInstruction>[]);
-    add(target);
     // Strip off trailing arguments that were not specified.
     // we could assert that the trailing arguments are all null.
     // TODO(jacobr): rewrite named arguments to an object literal matching
     // the factory constructor case.
-    arguments = arguments.where((arg) => arg != null).toList();
-    var inputs = <HInstruction>[target]..addAll(arguments);
+    List<HInstruction> inputs = arguments.where((arg) => arg != null).toList();
 
     var nativeBehavior = new NativeBehavior()..sideEffects.setAllSideEffects();
 
@@ -5060,22 +5033,12 @@
           .getThisType(_commonElements.jsJavaScriptObjectClass));
     }
 
-    String template;
-    if (element.isGetter) {
-      template = '#';
-    } else if (element.isSetter) {
-      template = '# = #';
-    } else {
-      var args = new List.filled(arguments.length, '#').join(',');
-      template = element.isConstructor ? "new #($args)" : "#($args)";
-    }
-    js.Template codeTemplate = js.js.parseForeignJS(template);
-    nativeBehavior.codeTemplate = codeTemplate;
+    AbstractValue instructionType =
+        _typeInferenceMap.typeFromNativeBehavior(nativeBehavior, closedWorld);
 
     // TODO(efortuna): Add source information.
-    return new HForeignCode(
-        codeTemplate, _abstractValueDomain.dynamicType, inputs,
-        nativeBehavior: nativeBehavior);
+    return HInvokeExternal(element, inputs, instructionType, nativeBehavior,
+        sourceInformation: null);
   }
 
   @override
@@ -5471,7 +5434,7 @@
     DartType typeValue =
         localsHandler.substInContext(_elementMap.getDartType(type));
 
-    if (typeValue.isTop) {
+    if (dartTypes.isTopType(typeValue)) {
       stack.add(graph.addConstantBool(true, closedWorld));
       return;
     }
@@ -5604,7 +5567,7 @@
     List<DartType> bounds = thisType.typeArguments;
     for (int i = 0; i < bounds.length; i++) {
       DartType arg = type.typeArguments[i];
-      if (arg.isTop) continue;
+      if (dartTypes.isTopType(arg)) continue;
       TypeVariableType typeVariable = bounds[i];
       DartType bound =
           _elementEnvironment.getTypeVariableBound(typeVariable.element);
@@ -6268,11 +6231,13 @@
     return currentNode is ir.ForInStatement;
   }
 
-  void _emitReturn(HInstruction value, SourceInformation sourceInformation) {
+  void _emitReturn(
+      HInstruction /*?*/ value, SourceInformation sourceInformation) {
     if (_inliningStack.isEmpty) {
       _closeAndGotoExit(
-          new HReturn(_abstractValueDomain, value, sourceInformation));
+          HReturn(_abstractValueDomain, value, sourceInformation));
     } else {
+      value ??= graph.addConstantNull(closedWorld);
       localsHandler.updateLocal(_returnLocal, value);
     }
   }
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index faa0413..0bef2b6 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -736,17 +736,36 @@
     }
   }
 
+  HInstruction skipGenerateAtUseCheckInputs(HCheck check) {
+    HInstruction input = check.checkedInput;
+    if (input is HCheck && isGenerateAtUseSite(input)) {
+      return skipGenerateAtUseCheckInputs(input);
+    }
+    return input;
+  }
+
   void use(HInstruction argument) {
     if (isGenerateAtUseSite(argument)) {
       visitExpression(argument);
     } else if (argument is HCheck && !variableNames.hasName(argument)) {
+      // We have a check that is not generate-at-use and has no name, yet is a
+      // subexpression (we are in 'use'). This happens when we have a chain of
+      // checks on an available unnamed value (e.g. a constant). The checks are
+      // generated as a statement, so we need to skip the generate-at-use check
+      // tree to find the underlying value.
+
+      // TODO(sra): We should ensure that this invariant holds: "every
+      // instruction has a name or is generate-at-use". This would require
+      // naming the input or output of the chain-of-checks.
+
       HCheck check = argument;
-      // This can only happen if the checked node does not have a name.
+      // This can only happen if the checked node also does not have a name.
       assert(!variableNames.hasName(check.checkedInput));
-      use(check.checkedInput);
+
+      use(skipGenerateAtUseCheckInputs(check));
     } else {
       assert(variableNames.hasName(argument));
-      push(new js.VariableUse(variableNames.getName(argument)));
+      push(js.VariableUse(variableNames.getName(argument)));
     }
   }
 
@@ -1861,13 +1880,6 @@
         _registry
             // ignore:deprecated_member_use_from_same_package
             .registerInstantiatedClass(_commonElements.listClass);
-      } else if (_nativeData.isNativeMember(target) &&
-          target.isFunction &&
-          !node.isInterceptedCall) {
-        // A direct (i.e. non-interceptor) native call is the result of
-        // optimization.  The optimization ensures any type checks or
-        // conversions have been satisfied.
-        methodName = _nativeData.getFixedBackendName(target);
       }
     }
 
@@ -2284,6 +2296,88 @@
         variableNames.getName(node.receiver), pop(), node.sourceInformation);
   }
 
+  @override
+  visitInvokeExternal(HInvokeExternal node) {
+    FunctionEntity target = node.element;
+    List<HInstruction> inputs = node.inputs;
+
+    assert(_nativeData.isNativeMember(target), 'non-native target: $node');
+
+    String targetName = _nativeData.hasFixedBackendName(target)
+        ? _nativeData.getFixedBackendName(target)
+        : target.name;
+
+    void invokeWithJavaScriptReceiver(js.Expression receiverExpression) {
+      // JS-interop target names can be paths ("a.b"), so we parse them to
+      // re-associate the property accesses ("#.a.b" is `dot(dot(#,'a'),'b')`).
+      //
+      // Native target names are simple identifiers, so re-parsing is not
+      // necessary, but it is simpler to use the same code.
+      String template;
+      List templateInputs;
+      if (target.isGetter) {
+        template = '#.$targetName';
+        templateInputs = [receiverExpression];
+      } else if (target.isSetter) {
+        assert(inputs.length == (target.isInstanceMember ? 2 : 1));
+        use(inputs.last);
+        template = '#.$targetName = #';
+        templateInputs = [receiverExpression, pop()];
+      } else {
+        var arguments =
+            visitArguments(inputs, start: target.isInstanceMember ? 1 : 0);
+        template =
+            target.isConstructor ? 'new #.$targetName(#)' : '#.$targetName(#)';
+        templateInputs = [receiverExpression, arguments];
+      }
+      js.Expression expression = js.js
+          .uncachedExpressionTemplate(template)
+          .instantiate(templateInputs);
+      push(expression.withSourceInformation(node.sourceInformation));
+      _registry.registerNativeMethod(target);
+    }
+
+    if (_nativeData.isJsInteropMember(target)) {
+      if (target.isStatic || target.isTopLevel || target.isConstructor) {
+        String path = _nativeData.getFixedBackendMethodPath(target);
+        js.Expression pathExpression =
+            js.js.uncachedExpressionTemplate(path).instantiate([]);
+        invokeWithJavaScriptReceiver(pathExpression);
+        return;
+      }
+    }
+
+    if (_nativeData.isNativeMember(target)) {
+      _registry.registerNativeBehavior(node.nativeBehavior);
+      if (target.isInstanceMember) {
+        HInstruction receiver = inputs.first;
+        use(receiver);
+        invokeWithJavaScriptReceiver(pop());
+        return;
+      }
+      if (target.isStatic || target.isTopLevel) {
+        var arguments = visitArguments(inputs, start: 0);
+        js.Expression targeExpression =
+            js.js.uncachedExpressionTemplate(targetName).instantiate([]);
+        js.Expression expression;
+        if (target.isGetter) {
+          expression = targeExpression;
+        } else if (target.isSetter) {
+          expression = js.js('# = #', [targeExpression, inputs.single]);
+        } else {
+          assert(target.isFunction);
+          expression = js.js('#(#)', [targeExpression, arguments]);
+        }
+        push(expression.withSourceInformation(node.sourceInformation));
+        _registry.registerNativeMethod(target);
+        return;
+      }
+
+      failedAt(node, 'codegen not implemented (non-instance-member): $node');
+    }
+    failedAt(node, 'unexpected target: $node');
+  }
+
   void registerForeignTypes(HForeign node) {
     NativeBehavior nativeBehavior = node.nativeBehavior;
     if (nativeBehavior == null) return;
@@ -2499,15 +2593,12 @@
 
   @override
   visitReturn(HReturn node) {
-    assert(node.inputs.length == 1);
-    HInstruction input = node.inputs[0];
-    if (input.isConstantNull()) {
-      pushStatement(
-          new js.Return().withSourceInformation(node.sourceInformation));
+    if (node.inputs.isEmpty) {
+      pushStatement(js.Return().withSourceInformation(node.sourceInformation));
     } else {
-      use(node.inputs[0]);
+      use(node.inputs.single);
       pushStatement(
-          new js.Return(pop()).withSourceInformation(node.sourceInformation));
+          js.Return(pop()).withSourceInformation(node.sourceInformation));
     }
   }
 
diff --git a/pkg/compiler/lib/src/ssa/codegen_helpers.dart b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
index 5283f94..071c7fb 100644
--- a/pkg/compiler/lib/src/ssa/codegen_helpers.dart
+++ b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
@@ -120,6 +120,9 @@
         }
       }
 
+      if (current is HInvokeExternal) {
+        if (current.isNullGuardFor(nullCheck)) return current;
+      }
       if (current is HForeignCode) {
         if (current.isNullGuardFor(nullCheck)) return current;
       }
@@ -602,7 +605,7 @@
           continue;
         }
       } else if (current is HReturn) {
-        if (current.inputs.single == value) {
+        if (current.inputs.isNotEmpty && current.inputs.single == value) {
           current.changeUse(value, chain);
           return current.next;
         }
@@ -1312,11 +1315,9 @@
 
       if (instruction is HInvoke) return true;
       if (instruction is HCreate) return true;
+      if (instruction is HReturn) return true;
       if (instruction is HPhi) return true;
 
-      // We return `null` by removing the return expression or statement.
-      if (instruction is HReturn) return false;
-
       // JavaScript `x == null` is more efficient than `x == _null`.
       if (instruction is HIdentity) return false;
 
diff --git a/pkg/compiler/lib/src/ssa/logging.dart b/pkg/compiler/lib/src/ssa/logging.dart
index 5fc74e2..c60de58 100644
--- a/pkg/compiler/lib/src/ssa/logging.dart
+++ b/pkg/compiler/lib/src/ssa/logging.dart
@@ -3,11 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../elements/entities.dart';
+import '../elements/types.dart';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'nodes.dart';
 
 /// Log used for unit testing optimizations.
 class OptimizationTestLog {
+  final DartTypes _dartTypes;
+
+  OptimizationTestLog(this._dartTypes);
+
   List<OptimizationLogEntry> entries = [];
 
   Map<String, Set<HInstruction>> _unconverted;
@@ -76,7 +81,7 @@
       HInvokeDynamicGetter original, FieldEntity field, HConstant converted) {
     Features features = new Features();
     features['name'] = '${field.enclosingClass.name}.${field.name}';
-    features['value'] = converted.constant.toStructuredText();
+    features['value'] = converted.constant.toStructuredText(_dartTypes);
     entries.add(new OptimizationLogEntry('ConstantFieldGet', features));
   }
 
@@ -84,7 +89,7 @@
       HInvokeDynamicMethod original, FieldEntity field, HConstant converted) {
     Features features = new Features();
     features['name'] = '${field.enclosingClass.name}.${field.name}';
-    features['value'] = converted.constant.toStructuredText();
+    features['value'] = converted.constant.toStructuredText(_dartTypes);
     entries.add(new OptimizationLogEntry('ConstantFieldCall', features));
   }
 
@@ -202,7 +207,7 @@
   void registerCompareTo(HInvokeDynamic original, [HConstant converted]) {
     Features features = new Features();
     if (converted != null) {
-      features['constant'] = converted.constant.toDartText();
+      features['constant'] = converted.constant.toDartText(_dartTypes);
     }
     entries.add(new OptimizationLogEntry('CompareTo', features));
   }
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 3cad724..0dbb1eb 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -45,6 +45,7 @@
   R visitExitTry(HExitTry node);
   R visitFieldGet(HFieldGet node);
   R visitFieldSet(HFieldSet node);
+  R visitInvokeExternal(HInvokeExternal node);
   R visitForeignCode(HForeignCode node);
   R visitGetLength(HGetLength node);
   R visitGoto(HGoto node);
@@ -470,6 +471,8 @@
   @override
   visitFieldSet(HFieldSet node) => visitFieldAccess(node);
   @override
+  visitInvokeExternal(HInvokeExternal node) => visitInstruction(node);
+  @override
   visitForeignCode(HForeignCode node) => visitInstruction(node);
   @override
   visitGetLength(HGetLength node) => visitInstruction(node);
@@ -1042,11 +1045,11 @@
   Entity sourceElement;
   SourceInformation sourceInformation;
 
-  final int id;
+  final int id = idCounter++;
   static int idCounter;
 
   final List<HInstruction> inputs;
-  final List<HInstruction> usedBy;
+  final List<HInstruction> usedBy = [];
 
   HBasicBlock block;
   HInstruction previous = null;
@@ -1095,27 +1098,26 @@
   static const int TYPE_INFO_READ_VARIABLE_TYPECODE = 39;
   static const int TYPE_INFO_EXPRESSION_TYPECODE = 40;
 
-  static const int FOREIGN_CODE_TYPECODE = 41;
-  static const int REMAINDER_TYPECODE = 42;
-  static const int GET_LENGTH_TYPECODE = 43;
-  static const int ABS_TYPECODE = 44;
-  static const int BOOL_CONVERSION_TYPECODE = 45;
-  static const int NULL_CHECK_TYPECODE = 46;
-  static const int PRIMITIVE_CHECK_TYPECODE = 47;
+  static const int INVOKE_EXTERNAL_TYPECODE = 41;
+  static const int FOREIGN_CODE_TYPECODE = 42;
+  static const int REMAINDER_TYPECODE = 43;
+  static const int GET_LENGTH_TYPECODE = 44;
+  static const int ABS_TYPECODE = 45;
+  static const int BOOL_CONVERSION_TYPECODE = 46;
+  static const int NULL_CHECK_TYPECODE = 47;
+  static const int PRIMITIVE_CHECK_TYPECODE = 48;
 
-  static const int IS_TEST_TYPECODE = 48;
-  static const int IS_TEST_SIMPLE_TYPECODE = 49;
-  static const int AS_CHECK_TYPECODE = 50;
-  static const int AS_CHECK_SIMPLE_TYPECODE = 51;
-  static const int SUBTYPE_CHECK_TYPECODE = 52;
-  static const int LOAD_TYPE_TYPECODE = 53;
-  static const int INSTANCE_ENVIRONMENT_TYPECODE = 54;
-  static const int TYPE_EVAL_TYPECODE = 55;
-  static const int TYPE_BIND_TYPECODE = 56;
+  static const int IS_TEST_TYPECODE = 49;
+  static const int IS_TEST_SIMPLE_TYPECODE = 50;
+  static const int AS_CHECK_TYPECODE = 51;
+  static const int AS_CHECK_SIMPLE_TYPECODE = 52;
+  static const int SUBTYPE_CHECK_TYPECODE = 53;
+  static const int LOAD_TYPE_TYPECODE = 54;
+  static const int INSTANCE_ENVIRONMENT_TYPECODE = 55;
+  static const int TYPE_EVAL_TYPECODE = 56;
+  static const int TYPE_BIND_TYPECODE = 57;
 
-  HInstruction(this.inputs, this.instructionType)
-      : id = idCounter++,
-        usedBy = <HInstruction>[] {
+  HInstruction(this.inputs, this.instructionType) {
     assert(inputs.every((e) => e != null), "inputs: $inputs");
   }
 
@@ -1408,7 +1410,7 @@
     // instructions with generics. It has the generic type context
     // available.
     assert(type is! TypeVariableType);
-    assert(type.treatAsRaw || type is FunctionType);
+    assert(closedWorld.dartTypes.treatAsRawType(type) || type is FunctionType);
     if (type is DynamicType) return this;
     if (type is VoidType) return this;
     if (type == closedWorld.commonElements.objectType) return this;
@@ -1417,7 +1419,8 @@
           closedWorld.abstractValueDomain.dynamicType, this, sourceInformation);
     }
     assert(type is InterfaceType);
-    if (kind == HTypeConversion.TYPE_CHECK && !type.treatAsRaw) {
+    if (kind == HTypeConversion.TYPE_CHECK &&
+        !closedWorld.dartTypes.treatAsRawType(type)) {
       throw 'creating compound check to $type (this = ${this})';
     } else {
       InterfaceType interfaceType = type;
@@ -1829,6 +1832,8 @@
     // Use the name and the kind instead of [Selector.operator==]
     // because we don't need to check the arity (already checked in
     // [gvnEquals]), and the receiver types may not be in sync.
+    // TODO(sra): If we GVN calls with named (optional) arguments then the
+    // selector needs a deeper check for the same subset of named arguments.
     return selector.name == other.selector.name &&
         selector.kind == other.selector.kind;
   }
@@ -2297,6 +2302,100 @@
   bool isJsStatement() => true;
 }
 
+/// Invocation of a native or JS-interop method.
+///
+/// Includes various invocations where the JavaScript form is similar to the
+/// Dart form:
+///
+///     receiver.property          // An instance getter
+///     receiver.property = value  // An instance setter
+///     receiver.method(arg)       // An instance method
+///
+///     Class.property             // A static getter
+///     Class.property = value     // A static setter
+///     Class.method(arg)          // A static method
+///     new Class(arg)             // A constructor
+///
+/// HInvokeDynamicMethod can be lowered to HInvokeExternal with the same
+/// [element]. The difference is a HInvokeDynamicMethod is a call to a
+/// Dart-calling-convention stub identifed by [element] that contains a call to
+/// the external method, whereas a HInvokeExternal instruction is a direct
+/// JavaScript call to the external method identified by [element].
+class HInvokeExternal extends HInvoke {
+  final FunctionEntity element;
+
+  // The following fields are functions of [element] that are extracted for
+  // convenience.
+  final NativeBehavior nativeBehavior;
+  final NativeThrowBehavior throwBehavior;
+
+  HInvokeExternal(this.element, List<HInstruction> inputs, AbstractValue type,
+      this.nativeBehavior,
+      {SourceInformation sourceInformation})
+      : throwBehavior =
+            nativeBehavior?.throwBehavior ?? NativeThrowBehavior.MAY,
+        super(inputs, type) {
+    if (nativeBehavior == null) {
+      sideEffects.setAllSideEffects();
+      sideEffects.setDependsOnSomething();
+    } else {
+      sideEffects.add(nativeBehavior.sideEffects);
+    }
+    if (nativeBehavior != null && nativeBehavior.useGvn) {
+      setUseGvn();
+    }
+    this.sourceInformation = sourceInformation;
+  }
+
+  @override
+  accept(HVisitor visitor) => visitor.visitInvokeExternal(this);
+
+  @override
+  bool isJsStatement() => false;
+
+  @override
+  bool canThrow(AbstractValueDomain domain) {
+    if (element.isInstanceMember) {
+      if (inputs.length > 0) {
+        return inputs.first.isNull(domain).isPotentiallyTrue
+            ? throwBehavior.canThrow
+            : throwBehavior.onNonNull.canThrow;
+      }
+    }
+    return throwBehavior.canThrow;
+  }
+
+  @override
+  bool onlyThrowsNSM() => throwBehavior.isOnlyNullNSMGuard;
+
+  @override
+  bool isAllocation(AbstractValueDomain domain) =>
+      nativeBehavior != null &&
+      nativeBehavior.isAllocation &&
+      this.isNull(domain).isDefinitelyFalse;
+
+  /// Returns `true` if the call will throw an NoSuchMethod error if [receiver]
+  /// is `null` before having any other side-effects.
+  bool isNullGuardFor(HInstruction receiver) {
+    if (!element.isInstanceMember) return false;
+    if (inputs.length < 1) return false;
+    if (inputs.first.nonCheck() != receiver.nonCheck()) return false;
+    return true;
+  }
+
+  @override
+  int typeCode() => HInstruction.INVOKE_EXTERNAL_TYPECODE;
+  @override
+  bool typeEquals(other) => other is HInvokeExternal;
+  @override
+  bool dataEquals(HInvokeExternal other) {
+    return element == other.element;
+  }
+
+  @override
+  String toString() => 'HInvokeExternal($element)';
+}
+
 abstract class HForeign extends HInstruction {
   HForeign(AbstractValue type, List<HInstruction> inputs) : super(inputs, type);
 
@@ -2842,7 +2941,7 @@
       : super(<HInstruction>[], constantType);
 
   @override
-  toString() => 'literal: ${constant.toStructuredText()}';
+  toString() => 'literal: ${constant.toStructuredText(null)}';
   @override
   accept(HVisitor visitor) => visitor.visitConstant(this);
 
@@ -3093,10 +3192,11 @@
   bool dataEquals(HInstruction other) => true;
 }
 
+/// Return statement, either with or without a value.
 class HReturn extends HControlFlow {
-  HReturn(AbstractValueDomain domain, HInstruction value,
+  HReturn(AbstractValueDomain domain, HInstruction /*?*/ value,
       SourceInformation sourceInformation)
-      : super(domain, <HInstruction>[value]) {
+      : super(domain, [if (value != null) value]) {
     this.sourceInformation = sourceInformation;
   }
   @override
@@ -3659,7 +3759,7 @@
         // TODO(johnniwinther): Optimize FutureOr type conversions.
         return false;
       }
-      if (!type.treatAsRaw) {
+      if (!closedWorld.dartTypes.treatAsRawType(type)) {
         // `null` always passes type conversion.
         if (checkedInput.isNull(abstractValueDomain).isDefinitelyTrue) {
           return true;
@@ -4513,7 +4613,7 @@
   // Currently, the abstract value domain cannot (soundly) state that an is-test
   // is definitely false, so we reuse some of the case-by-case logic from the
   // old [HIs] optimization.
-  if (dartType.isTop) return AbstractBool.True;
+  if (closedWorld.dartTypes.isTopType(dartType)) return AbstractBool.True;
   if (dartType is! InterfaceType) return AbstractBool.Maybe;
   InterfaceType type = dartType;
   ClassEntity element = type.element;
@@ -4562,7 +4662,7 @@
   // We need the raw check because we don't have the notion of generics in the
   // backend. For example, `this` in a class `A<T>` is currently always
   // considered to have the raw type.
-  if (type.treatAsRaw) {
+  if (closedWorld.dartTypes.treatAsRawType(type)) {
     return abstractValueDomain.isInstanceOf(subsetType, element);
   }
   return AbstractBool.Maybe;
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index fb94984..c9a80b9 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -81,7 +81,8 @@
     OptimizationTestLog log;
     if (retainDataForTesting) {
       loggersForTesting ??= {};
-      loggersForTesting[member] = log = new OptimizationTestLog();
+      loggersForTesting[member] =
+          log = new OptimizationTestLog(closedWorld.dartTypes);
     }
 
     measure(() {
@@ -738,26 +739,26 @@
     AbstractValue receiverType = receiver.instructionType;
     MemberEntity element =
         _closedWorld.locateSingleMember(node.selector, receiverType);
+    if (element == null) return node;
+
     // TODO(ngeoffray): Also fold if it's a getter or variable.
-    if (element != null &&
-        element.isFunction &&
+    if (element.isFunction &&
         // If we found out that the only target is an implicitly called
-        // [:noSuchMethod:] we just ignore it.
+        // `noSuchMethod` we just ignore it.
         node.selector.applies(element)) {
       FunctionEntity method = element;
 
       if (_nativeData.isNativeMember(method)) {
-        HInstruction folded = tryInlineNativeMethod(node, method);
-        if (folded != null) return folded;
-      } else {
-        // TODO(ngeoffray): If the method has optional parameters,
-        // we should pass the default values.
-        ParameterStructure parameters = method.parameterStructure;
-        if (parameters.totalParameters == node.selector.argumentCount &&
-            parameters.typeParameters ==
-                node.selector.callStructure.typeArgumentCount) {
-          node.element = method;
-        }
+        return tryInlineNativeMethod(node, method) ?? node;
+      }
+
+      // TODO(ngeoffray): If the method has optional parameters, we should pass
+      // the default values.
+      ParameterStructure parameters = method.parameterStructure;
+      if (parameters.totalParameters == node.selector.argumentCount &&
+          parameters.typeParameters ==
+              node.selector.callStructure.typeArgumentCount) {
+        node.element = method;
       }
       return node;
     }
@@ -766,9 +767,7 @@
     // the field. This usually removes the demand for the call-through stub and
     // makes the field load available to further optimization, e.g. LICM.
 
-    if (element != null &&
-        element.isField &&
-        element.name == node.selector.name) {
+    if (element.isField && element.name == node.selector.name) {
       FieldEntity field = element;
       if (!_nativeData.isNativeMember(field) &&
           !node.isCallOnInterceptor(_closedWorld)) {
@@ -825,22 +824,120 @@
     return node;
   }
 
-  HInstruction tryInlineNativeMethod(
-      HInvokeDynamicMethod node, FunctionEntity method) {
-    // We can replace the call to the native class interceptor method (target)
-    // if the target does no conversions or useful type checks.
-    if (_options.disableInlining) return null;
+  bool _avoidInliningNativeMethod(HInvokeDynamic node, FunctionEntity method) {
+    assert(_nativeData.isNativeMember(method));
+    if (_options.disableInlining) return true;
     if (_closedWorld.annotationsData.hasNoInline(method)) {
+      return true;
+    }
+    return false;
+  }
+
+  // Try to 'inline' an instance getter call to a known native or js-interop
+  // getter. This replaces the call to the getter on the Dart interceptor with a
+  // direct call to the external method.
+  HInstruction tryInlineNativeGetter(
+      HInvokeDynamicGetter node, FunctionEntity method) {
+    if (_avoidInliningNativeMethod(node, method)) return null;
+
+    // Strengthen instruction type from annotations to help optimize dependent
+    // instructions.
+    NativeBehavior nativeBehavior = _nativeData.getNativeMethodBehavior(method);
+    AbstractValue returnType =
+        AbstractValueFactory.fromNativeBehavior(nativeBehavior, _closedWorld);
+    HInstruction receiver = node.inputs.last; // Drop interceptor.
+    receiver = maybeGuardWithNullCheck(receiver, node, null);
+    HInvokeExternal result = HInvokeExternal(
+        method, [receiver], returnType, nativeBehavior,
+        sourceInformation: node.sourceInformation);
+    _registry.registerStaticUse(StaticUse.methodInlining(method, null));
+    // Assume Native getters effect-free as an approximantion to being
+    // idempotent.
+    // TODO(sra): [native.BehaviorBuilder.buildMethodBehavior] should do this
+    // for us.
+    result.sideEffects.setDependsOnSomething();
+    result.sideEffects.clearAllSideEffects();
+    result.setUseGvn();
+    return result;
+  }
+
+  // Try to 'inline' an instance setter call to a known native or js-interop
+  // getter. This replaces the call to the setter on the Dart interceptor with a
+  // direct call to the external method.
+  HInstruction tryInlineNativeSetter(
+      HInvokeDynamicSetter node, FunctionEntity method) {
+    if (_avoidInliningNativeMethod(node, method)) return null;
+
+    assert(node.inputs.length == 3);
+    HInstruction receiver = node.inputs[1];
+    HInstruction value = node.inputs[2];
+    FunctionType type = _closedWorld.elementEnvironment.getFunctionType(method);
+    assert(type.optionalParameterTypes.isEmpty);
+    assert(type.namedParameterTypes.isEmpty);
+    DartType parameterType = type.parameterTypes.single;
+    if (_nativeArgumentNeedsCheckOrConversion(method, parameterType, value)) {
       return null;
     }
-    if (!node.isInterceptedCall) return null;
+
+    NativeBehavior nativeBehavior = _nativeData.getNativeMethodBehavior(method);
+    receiver = maybeGuardWithNullCheck(receiver, node, null);
+    HInvokeExternal result = HInvokeExternal(
+        method, [receiver, value], value.instructionType, nativeBehavior,
+        sourceInformation: node.sourceInformation);
+    _registry.registerStaticUse(StaticUse.methodInlining(method, null));
+    return result;
+  }
+
+  // TODO(sra): Refactor this code so that we can decide to inline the method
+  // with a few checks or conversions. We would want to do this if there was a
+  // single call site to [method], or most arguments do not require a check.
+  bool _nativeArgumentNeedsCheckOrConversion(
+      FunctionEntity method, DartType parameterType, HInstruction argument) {
+    // TODO(sra): JS-interop *instance* methods don't check their arguments
+    // since the forwarding stub is shared by all JS-interop methods with the
+    // same name, regardless of parameter types. We could 'inline' js-interop
+    // calls even when the types of the arguments are incorrect.
+
+    if (!_nativeData.isJsInteropMember(method)) {
+      // @Native methods have conversion code for function arguments. Rather
+      // than insert that code at the inlined call site, call the target on the
+      // interceptor.
+      if (parameterType.unaliased is FunctionType) return true;
+    }
+
+    if (!_closedWorld.annotationsData
+        .getParameterCheckPolicy(method)
+        .isEmitted) {
+      // If the target has no checks we can inline.
+      return false;
+    }
+
+    AbstractValue parameterAbstractValue = _abstractValueDomain
+        .getAbstractValueForNativeMethodParameterType(parameterType);
+
+    if (parameterAbstractValue == null ||
+        _abstractValueDomain
+            .isIn(argument.instructionType, parameterAbstractValue)
+            .isPotentiallyFalse) {
+      return true;
+    }
+    return false;
+  }
+
+  // Try to 'inline' an instance method call to a known native or js-interop
+  // method. This replaces the call to the method on the Dart interceptor with a
+  // direct call to the external method.
+  HInstruction tryInlineNativeMethod(
+      HInvokeDynamicMethod node, FunctionEntity method) {
+    if (_avoidInliningNativeMethod(node, method)) return null;
+    // We can replace the call to the native class interceptor method (target)
+    // if the target does no conversions or useful type checks.
 
     FunctionType type = _closedWorld.elementEnvironment.getFunctionType(method);
     if (type.namedParameters.isNotEmpty) return null;
 
     // The call site might omit optional arguments. The inlined code must
     // preserve the number of arguments, so check only the actual arguments.
-
     bool canInline = true;
     List<HInstruction> inputs = node.inputs;
     int inputPosition = 2; // Skip interceptor and receiver.
@@ -849,28 +946,8 @@
       if (!canInline) return;
       if (inputPosition >= inputs.length) return;
       HInstruction input = inputs[inputPosition++];
-      if (parameterType.unaliased is FunctionType) {
-        // Must call the target since it contains a function conversion.
+      if (_nativeArgumentNeedsCheckOrConversion(method, parameterType, input)) {
         canInline = false;
-        return;
-      }
-
-      // If the target has no checks don't let a bad type stop us inlining.
-      if (!_closedWorld.annotationsData
-          .getParameterCheckPolicy(method)
-          .isEmitted) {
-        return;
-      }
-
-      AbstractValue parameterAbstractValue = _abstractValueDomain
-          .getAbstractValueForNativeMethodParameterType(parameterType);
-
-      if (parameterAbstractValue == null ||
-          _abstractValueDomain
-              .isIn(input.instructionType, parameterAbstractValue)
-              .isPotentiallyFalse) {
-        canInline = false;
-        return;
       }
     }
 
@@ -885,15 +962,15 @@
     NativeBehavior nativeBehavior = _nativeData.getNativeMethodBehavior(method);
     AbstractValue returnType =
         AbstractValueFactory.fromNativeBehavior(nativeBehavior, _closedWorld);
-    HInvokeDynamicMethod result = new HInvokeDynamicMethod(
-        node.selector,
-        node.receiverType,
-        inputs.sublist(1), // Drop interceptor.
+    HInstruction receiver = inputs[1];
+    receiver = maybeGuardWithNullCheck(receiver, node, null);
+    HInvokeExternal result = HInvokeExternal(
+        method,
+        [receiver, ...inputs.skip(2)], // '2': Drop interceptor and receiver.
         returnType,
-        node.typeArguments,
-        node.sourceInformation);
-    result.element = method;
-    _registry.registerStaticUse(new StaticUse.methodInlining(method, null));
+        nativeBehavior,
+        sourceInformation: node.sourceInformation);
+    _registry.registerStaticUse(StaticUse.methodInlining(method, null));
     return result;
   }
 
@@ -1098,7 +1175,7 @@
       return node;
     }
 
-    if (type.isTop) {
+    if (_closedWorld.dartTypes.isTopType(type)) {
       return _graph.addConstantBool(true, _closedWorld);
     }
     InterfaceType interfaceType = type;
@@ -1146,7 +1223,8 @@
       // the notion of generics in the backend. For example, [:this:] in
       // a class [:A<T>:], is currently always considered to have the
       // raw type.
-    } else if (!RuntimeTypesSubstitutions.hasTypeArguments(type)) {
+    } else if (!RuntimeTypesSubstitutions.hasTypeArguments(
+        _closedWorld.dartTypes, type)) {
       AbstractValue expressionMask = expression.instructionType;
       AbstractBool isInstanceOf =
           _abstractValueDomain.isInstanceOf(expressionMask, element);
@@ -1171,7 +1249,8 @@
           rep.kind == TypeInfoExpressionKind.COMPLETE &&
           rep.inputs.isEmpty) {
         DartType type = rep.dartType;
-        if (type is InterfaceType && type.treatAsRaw) {
+        if (type is InterfaceType &&
+            _closedWorld.dartTypes.treatAsRawType(type)) {
           return node.checkedInput.convertType(_closedWorld, type, node.kind)
             ..sourceInformation = node.sourceInformation;
         }
@@ -1204,15 +1283,6 @@
     return node.isRedundant(_closedWorld) ? node.checkedInput : node;
   }
 
-  FieldEntity findConcreteFieldForDynamicAccess(
-      HInvokeDynamicField node, HInstruction receiver) {
-    AbstractValue receiverType = receiver.instructionType;
-    MemberEntity member = node.element is FieldEntity
-        ? node.element
-        : _closedWorld.locateSingleMember(node.selector, receiverType);
-    return member is FieldEntity ? member : null;
-  }
-
   @override
   HInstruction visitFieldGet(HFieldGet node) {
     var receiver = node.receiver;
@@ -1297,6 +1367,23 @@
     return node;
   }
 
+  /// Returns the guarded receiver.
+  HInstruction maybeGuardWithNullCheck(
+      HInstruction receiver, HInvokeDynamic node, FieldEntity /*?*/ field) {
+    AbstractValue receiverType = receiver.instructionType;
+    if (_abstractValueDomain.isNull(receiverType).isPotentiallyTrue) {
+      HNullCheck check =
+          HNullCheck(receiver, _abstractValueDomain.excludeNull(receiverType))
+            ..selector = node.selector
+            ..field = field
+            ..sourceInformation = node.sourceInformation;
+      _log?.registerNullCheck(node, check);
+      node.block.addBefore(node, check);
+      return check;
+    }
+    return receiver;
+  }
+
   @override
   HInstruction visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
     propagateConstantValueToUses(node);
@@ -1306,53 +1393,46 @@
     }
     HInstruction receiver = node.getDartReceiver(_closedWorld);
     AbstractValue receiverType = receiver.instructionType;
-    FieldEntity field = node.element is FieldEntity
-        ? node.element
-        : findConcreteFieldForDynamicAccess(node, receiver);
-    if (field != null) {
+
+    Selector selector = node.selector;
+    MemberEntity member =
+        node.element ?? _closedWorld.locateSingleMember(selector, receiverType);
+    if (member == null) return node;
+
+    if (member is FieldEntity) {
+      FieldEntity field = member;
       FieldAnalysisData fieldData =
           _closedWorld.fieldAnalysis.getFieldData(field);
       if (fieldData.isEffectivelyConstant) {
         // The field is elided and replace it with its constant value.
-        if (_abstractValueDomain.isNull(receiverType).isPotentiallyTrue) {
-          // The receiver is potentially `null` so we insert a null receiver
-          // check to trigger a null pointer exception.  Insert check
-          // conditionally to avoid the work of removing it later.
-          HNullCheck check = HNullCheck(
-              receiver, _abstractValueDomain.excludeNull(receiverType))
-            ..selector = node.selector
-            ..sourceInformation = node.sourceInformation;
-          _log?.registerNullCheck(node, check);
-          node.block.addBefore(node, check);
-        }
+        maybeGuardWithNullCheck(receiver, node, null);
         ConstantValue constant = fieldData.constantValue;
         HConstant result = _graph.addConstant(constant, _closedWorld,
             sourceInformation: node.sourceInformation);
         _log?.registerConstantFieldGet(node, field, result);
         return result;
       } else {
-        if (_abstractValueDomain.isNull(receiverType).isPotentiallyTrue) {
-          HNullCheck check = HNullCheck(
-              receiver, _abstractValueDomain.excludeNull(receiverType))
-            ..selector = node.selector
-            ..field = field
-            ..sourceInformation = node.sourceInformation;
-          _log?.registerNullCheck(node, check);
-          node.block.addBefore(node, check);
-          receiver = check;
-        }
+        receiver = maybeGuardWithNullCheck(receiver, node, field);
         HFieldGet result = _directFieldGet(receiver, field, node);
         _log?.registerFieldGet(node, result);
         return result;
       }
     }
 
-    node.element ??=
-        _closedWorld.locateSingleMember(node.selector, receiverType);
-    if (node.element != null &&
-        node.element.name == node.selector.name &&
-        node.element.isFunction) {
+    if (member is FunctionEntity) {
+      // If the member is not a getter, this could be a property extraction
+      // getter or legacy `noSuchMethod`.
+      if (member.isGetter && member.name == selector.name) {
+        node.element = member;
+        if (_nativeData.isNativeMember(member)) {
+          return tryInlineNativeGetter(node, member) ?? node;
+        }
+      }
+    }
+
+    if (member.isFunction && member.name == selector.name) {
       // A property extraction getter, aka a tear-off.
+      node.element = member;
       node.sideEffects.clearAllDependencies();
       node.sideEffects.clearAllSideEffects();
       node.setUseGvn(); // We don't care about identity of tear-offs.
@@ -1391,69 +1471,87 @@
     }
 
     HInstruction receiver = node.getDartReceiver(_closedWorld);
-    FieldEntity field = findConcreteFieldForDynamicAccess(node, receiver);
-    if (field == null || !field.isAssignable) return node;
-    // Use `node.inputs.last` in case the call follows the interceptor calling
-    // convention, but is not a call on an interceptor.
-    HInstruction value = node.inputs.last;
+    AbstractValue receiverType = receiver.instructionType;
+    MemberEntity member = node.element ??=
+        _closedWorld.locateSingleMember(node.selector, receiverType);
+    if (member == null) return node;
 
-    HInstruction assignField() {
-      if (_closedWorld.fieldAnalysis.getFieldData(field).isElided) {
-        _log?.registerFieldSet(node);
-        return value;
-      } else {
-        HFieldSet result =
-            HFieldSet(_abstractValueDomain, field, receiver, value)
-              ..sourceInformation = node.sourceInformation;
-        _log?.registerFieldSet(node, result);
-        return result;
+    if (member is FieldEntity) {
+      FieldEntity field = member;
+      if (field == null || !field.isAssignable) return node;
+      // Use `node.inputs.last` in case the call follows the interceptor calling
+      // convention, but is not a call on an interceptor.
+      HInstruction value = node.inputs.last;
+
+      HInstruction assignField() {
+        if (_closedWorld.fieldAnalysis.getFieldData(field).isElided) {
+          _log?.registerFieldSet(node);
+          return value;
+        } else {
+          HFieldSet result =
+              HFieldSet(_abstractValueDomain, field, receiver, value)
+                ..sourceInformation = node.sourceInformation;
+          _log?.registerFieldSet(node, result);
+          return result;
+        }
       }
-    }
 
-    if (!_closedWorld.annotationsData
-        .getParameterCheckPolicy(field)
-        .isEmitted) {
+      if (!_closedWorld.annotationsData
+          .getParameterCheckPolicy(field)
+          .isEmitted) {
+        return assignField();
+      }
+
+      DartType fieldType = _closedWorld.elementEnvironment.getFieldType(field);
+
+      if (_options.useNewRti) {
+        AbstractValueWithPrecision checkedType = _abstractValueDomain
+            .createFromStaticType(fieldType, nullable: true);
+        if (checkedType.isPrecise &&
+            _abstractValueDomain
+                .isIn(value.instructionType, checkedType.abstractValue)
+                .isDefinitelyTrue) {
+          return assignField();
+        }
+        // TODO(sra): Implement inlining of setters with checks for new rti. The
+        // check and field assignment for the setter should inlined if this is
+        // the only call to the setter, or the current function already computes
+        // the type of the field.
+        node.needsCheck = true;
+        return node;
+      }
+
+      if (!_closedWorld.dartTypes.treatAsRawType(fieldType) ||
+          fieldType is TypeVariableType ||
+          fieldType.unaliased is FunctionType ||
+          fieldType.unaliased is FutureOrType) {
+        // We cannot generate the correct type representation here, so don't
+        // inline this access.
+        // TODO(sra): If the input is such that we don't need a type check, we
+        // can skip the test an generate the HFieldSet.
+        node.needsCheck = true;
+        return node;
+      }
+      HInstruction other = value.convertType(
+          _closedWorld, fieldType, HTypeConversion.TYPE_CHECK);
+      if (other != value) {
+        node.block.addBefore(node, other);
+        value = other;
+      }
+
       return assignField();
     }
 
-    DartType fieldType = _closedWorld.elementEnvironment.getFieldType(field);
-
-    if (_options.useNewRti) {
-      AbstractValueWithPrecision checkedType =
-          _abstractValueDomain.createFromStaticType(fieldType, nullable: true);
-      if (checkedType.isPrecise &&
-          _abstractValueDomain
-              .isIn(value.instructionType, checkedType.abstractValue)
-              .isDefinitelyTrue) {
-        return assignField();
+    if (member is FunctionEntity) {
+      // If the member is not a setter is could be legacy `noSuchMethod`.
+      if (member.isSetter && member.name == node.selector.name) {
+        if (_nativeData.isNativeMember(member)) {
+          return tryInlineNativeSetter(node, member) ?? node;
+        }
       }
-      // TODO(sra): Implement inlining of setters with checks for new rti. The
-      // check and field assignment for the setter should inlined if this is the
-      // only call to the setter, or the current function already computes the
-      // type of the field.
-      node.needsCheck = true;
-      return node;
     }
 
-    if (!fieldType.treatAsRaw ||
-        fieldType is TypeVariableType ||
-        fieldType.unaliased is FunctionType ||
-        fieldType.unaliased is FutureOrType) {
-      // We cannot generate the correct type representation here, so don't
-      // inline this access.
-      // TODO(sra): If the input is such that we don't need a type check, we
-      // can skip the test an generate the HFieldSet.
-      node.needsCheck = true;
-      return node;
-    }
-    HInstruction other =
-        value.convertType(_closedWorld, fieldType, HTypeConversion.TYPE_CHECK);
-    if (other != value) {
-      node.block.addBefore(node, other);
-      value = other;
-    }
-
-    return assignField();
+    return node;
   }
 
   @override
@@ -1542,6 +1640,11 @@
       }
     }
 
+    // TODO(sra): [element] could be a native or js-interop method, in which
+    // case we could 'inline' the call to the Dart-convention wrapper code,
+    // replacing it with a HInvokeExternal instruction. Many of these static
+    // methods are already 'inlined' by the CFG builder.
+
     return node;
   }
 
@@ -2036,7 +2139,7 @@
         return HAsCheckSimple(node.checkedInput, dartType, checkedType,
             node.isTypeError, specializedCheck, node.instructionType);
       }
-      if (dartType.isTop) {
+      if (_closedWorld.dartTypes.isTopType(dartType)) {
         return node.checkedInput;
       }
     }
@@ -2063,7 +2166,7 @@
     if (typeInput is HLoadType) {
       TypeExpressionRecipe recipe = typeInput.typeExpression;
       DartType dartType = recipe.type;
-      if (dartType.isTop) {
+      if (_closedWorld.dartTypes.isTopType(dartType)) {
         return _graph.addConstantBool(true, _closedWorld);
       }
 
@@ -2891,6 +2994,10 @@
       HInstruction next = instruction.next;
       int flags = instruction.sideEffects.getChangesFlags();
       assert(flags == 0 || !instruction.useGvn());
+      // TODO(sra): Is the above assertion too strong? We should be able to
+      // reuse the values generated by idempotent operations that have
+      // effects. Would it be correct to make the kill below be conditional on
+      // not replacing the instruction?
       values.kill(flags);
       if (instruction.useGvn()) {
         HInstruction other = values.lookup(instruction);
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index f525185..5bfb428 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -402,6 +402,20 @@
   }
 
   @override
+  String visitInvokeExternal(HInvokeExternal node) {
+    var target = node.element;
+    var inputs = node.inputs;
+    String targetString;
+    if (target.isInstanceMember) {
+      targetString = temporaryId(inputs.first) + '.${target.name}';
+      inputs = inputs.sublist(1);
+    } else {
+      targetString = target.name;
+    }
+    return handleGenericInvoke('InvokeExternal', targetString, inputs);
+  }
+
+  @override
   String visitForeignCode(HForeignCode node) {
     var template = node.codeTemplate;
     String code = '${template.ast}';
@@ -472,7 +486,10 @@
   }
 
   @override
-  String visitReturn(HReturn node) => "Return: ${temporaryId(node.inputs[0])}";
+  String visitReturn(HReturn node) {
+    if (node.inputs.isEmpty) return "Return";
+    return "Return: ${temporaryId(node.inputs.single)}";
+  }
 
   @override
   String visitShiftLeft(HShiftLeft node) =>
diff --git a/pkg/compiler/lib/src/ssa/type_builder.dart b/pkg/compiler/lib/src/ssa/type_builder.dart
index bd064b1..86b26e8 100644
--- a/pkg/compiler/lib/src/ssa/type_builder.dart
+++ b/pkg/compiler/lib/src/ssa/type_builder.dart
@@ -433,7 +433,7 @@
 
     if (type == null) return original;
     type = type.unaliased;
-    if (type is InterfaceType && !type.treatAsRaw) {
+    if (type is InterfaceType && !_closedWorld.dartTypes.treatAsRawType(type)) {
       InterfaceType interfaceType = type;
       AbstractValue subtype =
           _abstractValueDomain.createNullableSubtype(interfaceType.element);
diff --git a/pkg/compiler/lib/src/ssa/types.dart b/pkg/compiler/lib/src/ssa/types.dart
index fb648c4..0d1a3b8 100644
--- a/pkg/compiler/lib/src/ssa/types.dart
+++ b/pkg/compiler/lib/src/ssa/types.dart
@@ -52,7 +52,7 @@
             .createNonNullExact(commonElements.objectClass);
       } else if (type is VoidType) {
         return abstractValueDomain.nullType;
-      } else if (type.isTop) {
+      } else if (closedWorld.dartTypes.isTopType(type)) {
         return abstractValueDomain.dynamicType;
       } else if (type == commonElements.nullType) {
         return abstractValueDomain.nullType;
diff --git a/pkg/compiler/lib/src/universe/member_usage.dart b/pkg/compiler/lib/src/universe/member_usage.dart
index a322bc3..5fae2da 100644
--- a/pkg/compiler/lib/src/universe/member_usage.dart
+++ b/pkg/compiler/lib/src/universe/member_usage.dart
@@ -356,7 +356,7 @@
       'potentialWrites=${potentialWrites.iterable(Access.values)},'
       'potentialInvokes=${potentialInvokes.iterable(Access.values)},'
       'pendingUse=${_pendingUse.iterable(MemberUse.values)},'
-      'initialConstants=${initialConstants?.map((c) => c.toStructuredText())})';
+      'initialConstants=${initialConstants?.map((c) => c.toStructuredText(null))})';
 }
 
 /// Member usage tracking for a field.
@@ -492,7 +492,7 @@
       'potentialWrites=${potentialWrites.iterable(Access.values)},'
       'potentialInvokes=${potentialInvokes.iterable(Access.values)},'
       'pendingUse=${_pendingUse.iterable(MemberUse.values)},'
-      'initialConstants=${initialConstants.map((c) => c.toStructuredText())})';
+      'initialConstants=${initialConstants.map((c) => c.toStructuredText(null))})';
 }
 
 /// Member usage tracking for a constructor or method.
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index f735707..cfc28bd 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -293,7 +293,7 @@
     }
     if (constant != null) {
       sb.write('=');
-      sb.write(constant.toStructuredText());
+      sb.write(constant.toStructuredText(null));
     }
     return sb.toString();
   }
@@ -908,7 +908,7 @@
 
   /// Short textual representation use for testing.
   String get shortText {
-    return value.toDartText();
+    return value.toDartText(null);
   }
 
   /// Constant used as the initial value of a field.
@@ -934,5 +934,5 @@
   int get hashCode => value.hashCode;
 
   @override
-  String toString() => 'ConstantUse(${value.toStructuredText()})';
+  String toString() => 'ConstantUse(${value.toStructuredText(null)})';
 }
diff --git a/pkg/dartdev/.gitignore b/pkg/dartdev/.gitignore
index 96cf44b..0bd726b 100644
--- a/pkg/dartdev/.gitignore
+++ b/pkg/dartdev/.gitignore
@@ -8,3 +8,6 @@
 
 # Directory created by dartdoc
 doc/api/
+
+# Directory created by pub
+.dart_tool/
diff --git a/pkg/dartdev/README.md b/pkg/dartdev/README.md
index c1aeeeb..3d88cff 100644
--- a/pkg/dartdev/README.md
+++ b/pkg/dartdev/README.md
@@ -4,4 +4,4 @@
 
 ## Docs
 
-This tool is currently under active development.
\ No newline at end of file
+This tool is currently under active development.
diff --git a/pkg/dartdev/bin/dartdev.dart b/pkg/dartdev/bin/dartdev.dart
index db84729..7968056 100644
--- a/pkg/dartdev/bin/dartdev.dart
+++ b/pkg/dartdev/bin/dartdev.dart
@@ -9,7 +9,7 @@
 
 /// The entry point for dartdev.
 main(List<String> args) async {
-  final runner = DartdevRunner();
+  final runner = DartdevRunner(args);
   try {
     dynamic result = await runner.run(args);
     exit(result is int ? result : 0);
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index 8422799..e073464 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -6,25 +6,29 @@
 import 'package:args/command_runner.dart';
 import 'package:cli_util/cli_logging.dart';
 
+import 'src/commands/create.dart';
 import 'src/commands/format.dart';
 import 'src/core.dart';
 
-class DartdevRunner extends CommandRunner {
+class DartdevRunner<int> extends CommandRunner {
   static const String dartdevDescription =
       'A command-line utility for Dart development';
 
-  DartdevRunner() : super('dartdev', '$dartdevDescription.') {
+  DartdevRunner(List<String> args) : super('dartdev', '$dartdevDescription.') {
+    final bool verbose = args.contains('-v') || args.contains('--verbose');
+
     argParser.addFlag('verbose',
         abbr: 'v', negatable: false, help: 'Show verbose output.');
 
-    // The list of currently supported commands:
-    addCommand(FormatCommand());
+    addCommand(CreateCommand(verbose: verbose));
+    addCommand(FormatCommand(verbose: verbose));
   }
 
   @override
-  Future runCommand(ArgResults results) async {
+  Future<int> runCommand(ArgResults results) async {
     isVerbose = results['verbose'];
 
+    final Ansi ansi = Ansi(Ansi.terminalSupportsAnsi);
     log = isVerbose ? Logger.verbose(ansi: ansi) : Logger.standard(ansi: ansi);
 
     return await super.runCommand(results);
diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart
new file mode 100644
index 0000000..513bf65
--- /dev/null
+++ b/pkg/dartdev/lib/src/commands/create.dart
@@ -0,0 +1,180 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io' as io;
+import 'dart:math' as math;
+
+import 'package:path/path.dart' as path;
+import 'package:stagehand/stagehand.dart' as stagehand;
+
+import '../core.dart';
+import '../sdk.dart';
+
+/// A command to create a new project from a set of templates.
+class CreateCommand extends DartdevCommand {
+  static String defaultTemplateId = 'console-full';
+
+  static List<String> legalTemplateIds = [
+    'console-full',
+    'package-simple',
+    'web-simple'
+  ];
+
+  static Iterable<stagehand.Generator> get generators =>
+      stagehand.generators.where((g) => legalTemplateIds.contains(g.id));
+
+  static stagehand.Generator retrieveTemplateGenerator(String templateId) =>
+      stagehand.getGenerator(templateId);
+
+  CreateCommand({bool verbose = false})
+      : super('create', 'Create a new project.') {
+    argParser.addOption(
+      'template',
+      allowed: legalTemplateIds,
+      help: 'The project template to use.',
+      defaultsTo: defaultTemplateId,
+    );
+    argParser.addFlag('pub',
+        defaultsTo: true,
+        help: "Whether to run 'pub get' after the project has been created.");
+    argParser.addFlag(
+      'list-templates',
+      negatable: false,
+      hide: !verbose,
+      help: 'List the available templates in JSON format.',
+    );
+    argParser.addFlag(
+      'force',
+      negatable: false,
+      help:
+          'Force project generation, even if the target directory already exists.',
+    );
+  }
+
+  @override
+  String get invocation => '${super.invocation} <directory>';
+
+  @override
+  FutureOr<int> run() async {
+    if (argResults['list-templates']) {
+      log.stdout(_availableTemplatesJson());
+      return 0;
+    }
+
+    if (argResults.rest.isEmpty) {
+      printUsage();
+      return 1;
+    }
+
+    String templateId = argResults['template'];
+
+    String dir = argResults.rest.first;
+    var targetDir = io.Directory(dir);
+    if (targetDir.existsSync() && !(argResults['force'])) {
+      log.stderr(
+          "Directory '$dir' already exists (use '--force' to force project generation).");
+      return 73;
+    }
+
+    log.stdout(
+        'Creating ${log.ansi.emphasized(path.absolute(dir))} using template $templateId...');
+    log.stdout('');
+
+    var generator = retrieveTemplateGenerator(templateId);
+    await generator.generate(
+      path.basename(dir),
+      DirectoryGeneratorTarget(generator, io.Directory(dir)),
+    );
+
+    if (argResults['pub']) {
+      log.stdout('');
+      var progress = log.progress('Running pub get');
+      var process = await startProcess(
+        sdk.pub,
+        ['get', '--no-precompile'],
+        cwd: dir,
+      );
+
+      // Run 'pub get'. We display output from the pub command, but keep the
+      // output terse. This is to give the user a sense of the work that pub
+      // did without scrolling the previous stdout sections off the screen.
+      var buffer = StringBuffer();
+      routeToStdout(
+        process,
+        logToTrace: true,
+        listener: (str) {
+          // Filter lines like '+ multi_server_socket 1.0.2'.
+          if (!str.startsWith('+ ')) {
+            buffer.writeln('  $str');
+          }
+        },
+      );
+      int code = await process.exitCode;
+      if (code != 0) return code;
+      progress.finish(showTiming: true);
+      log.stdout(buffer.toString().trimRight());
+    }
+
+    log.stdout('');
+    log.stdout('Created project $dir! In order to get started, type:');
+    log.stdout('');
+    log.stdout(log.ansi.emphasized('  cd ${path.relative(dir)}'));
+    // TODO(devoncarew): Once we have a 'run' command, print out here how to run
+    // the app.
+    log.stdout('');
+
+    return 0;
+  }
+
+  @override
+  String get usageFooter {
+    int width = legalTemplateIds.map((s) => s.length).reduce(math.max);
+    String desc = generators
+        .map((g) => '  ${g.id.padLeft(width)}: ${g.description}')
+        .join('\n');
+    return '\nAvailable templates:\n$desc';
+  }
+
+  String _availableTemplatesJson() {
+    var items = generators.map((stagehand.Generator generator) {
+      var m = {
+        'name': generator.id,
+        'label': generator.label,
+        'description': generator.description,
+        'categories': generator.categories
+      };
+
+      if (generator.entrypoint != null) {
+        m['entrypoint'] = generator.entrypoint.path;
+      }
+
+      return m;
+    });
+
+    JsonEncoder encoder = JsonEncoder.withIndent('  ');
+    return encoder.convert(items.toList());
+  }
+}
+
+class DirectoryGeneratorTarget extends stagehand.GeneratorTarget {
+  final stagehand.Generator generator;
+  final io.Directory dir;
+
+  DirectoryGeneratorTarget(this.generator, this.dir) {
+    dir.createSync();
+  }
+
+  @override
+  Future createFile(String filePath, List<int> contents) async {
+    io.File file = io.File(path.join(dir.path, filePath));
+
+    String name = path.relative(file.path, from: dir.path);
+    log.stdout('  $name');
+
+    await file.create(recursive: true);
+    await file.writeAsBytes(contents);
+  }
+}
diff --git a/pkg/dartdev/lib/src/commands/format.dart b/pkg/dartdev/lib/src/commands/format.dart
index 97c2d7d..32f0206 100644
--- a/pkg/dartdev/lib/src/commands/format.dart
+++ b/pkg/dartdev/lib/src/commands/format.dart
@@ -2,16 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
+
 import '../core.dart';
 import '../sdk.dart';
 
 class FormatCommand extends DartdevCommand {
-  FormatCommand() : super('format', 'Format one or more Dart files.') {
+  FormatCommand({bool verbose = false})
+      : super('format', 'Format one or more Dart files.') {
     // TODO(jwren) add all options and flags
   }
 
   @override
-  run() async {
+  FutureOr<int> run() async {
     // TODO(jwren) implement verbose in dart_style
     // dartfmt doesn't have '-v' or '--verbose', so remove from the argument list
     var args = List.from(argResults.arguments)
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index b937f19..8e0e3d8 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -8,11 +8,10 @@
 import 'package:args/command_runner.dart';
 import 'package:cli_util/cli_logging.dart';
 
-Ansi ansi = Ansi(Ansi.terminalSupportsAnsi);
 Logger log;
 bool isVerbose = false;
 
-abstract class DartdevCommand extends Command {
+abstract class DartdevCommand<int> extends Command {
   final String _name;
   final String _description;
 
diff --git a/pkg/dartdev/pubspec.yaml b/pkg/dartdev/pubspec.yaml
index 65aaee2..57ba7ac 100644
--- a/pkg/dartdev/pubspec.yaml
+++ b/pkg/dartdev/pubspec.yaml
@@ -10,9 +10,10 @@
   cli_util: ^0.1.0
   intl: ^0.16.0
   path: ^1.6.2
+  stagehand: 3.3.6
   watcher: ^0.9.7+13
   yaml: ^2.2.0
 
 dev_dependencies:
   test: ^1.0.0
-  pedantic: ^1.8.0
\ No newline at end of file
+  pedantic: ^1.8.0
diff --git a/pkg/dartdev/test/commands/create_test.dart b/pkg/dartdev/test/commands/create_test.dart
new file mode 100644
index 0000000..6a63cf7
--- /dev/null
+++ b/pkg/dartdev/test/commands/create_test.dart
@@ -0,0 +1,97 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dartdev/src/commands/create.dart';
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+
+import '../utils.dart';
+
+void main() {
+  group('create', defineCreate);
+}
+
+void defineCreate() {
+  TestProject p;
+
+  setUp(() => p = null);
+
+  tearDown(() => p?.dispose());
+
+  test('default template exists', () {
+    expect(CreateCommand.legalTemplateIds,
+        contains(CreateCommand.defaultTemplateId));
+  });
+
+  test('all templates exist', () {
+    for (String templateId in CreateCommand.legalTemplateIds) {
+      expect(CreateCommand.legalTemplateIds, contains(templateId));
+    }
+  });
+
+  test('list templates', () {
+    p = project();
+
+    ProcessResult result = p.runSync('create', ['--list-templates']);
+    expect(result.exitCode, 0);
+
+    String output = result.stdout.toString();
+    var parsedResult = jsonDecode(output);
+    expect(parsedResult, hasLength(CreateCommand.legalTemplateIds.length));
+    expect(parsedResult[0]['name'], isNotNull);
+    expect(parsedResult[0]['label'], isNotNull);
+    expect(parsedResult[0]['description'], isNotNull);
+  });
+
+  test('no directory given', () {
+    p = project();
+
+    ProcessResult result = p.runSync('create');
+    expect(result.exitCode, 1);
+  });
+
+  test('directory already exists', () {
+    p = project();
+
+    ProcessResult result = p.runSync('create', [
+      '--no-pub',
+      '--template',
+      CreateCommand.defaultTemplateId,
+      p.dir.path
+    ]);
+    expect(result.exitCode, 73);
+  });
+
+  test('bad template id', () {
+    p = project();
+
+    ProcessResult result =
+        p.runSync('create', ['--no-pub', '--template', 'foo-bar', p.dir.path]);
+    expect(result.exitCode, isNot(0));
+  });
+
+  // Create tests for each template.
+  for (String templateId in CreateCommand.legalTemplateIds) {
+    test('create $templateId', () {
+      p = project();
+
+      ProcessResult result = p.runSync('create',
+          ['--force', '--no-pub', '--template', templateId, p.dir.path]);
+      expect(result.exitCode, 0);
+
+      String projectName = path.basename(p.dir.path);
+
+      String entry =
+          CreateCommand.retrieveTemplateGenerator(templateId).entrypoint.path;
+      entry = entry.replaceAll('__projectName__', projectName);
+      File entryFile = File(path.join(p.dir.path, entry));
+
+      expect(entryFile.existsSync(), true,
+          reason: 'File not found: ${entryFile.path}');
+    });
+  }
+}
diff --git a/pkg/dartdev/test/commands/flag_test.dart b/pkg/dartdev/test/commands/flag_test.dart
index 1e6cadd..809f3e9 100644
--- a/pkg/dartdev/test/commands/flag_test.dart
+++ b/pkg/dartdev/test/commands/flag_test.dart
@@ -13,7 +13,9 @@
 
 void help() {
   TestProject p;
+
   tearDown(() => p?.dispose());
+
   test('--help', () {
     p = project();
 
diff --git a/pkg/dartdev/test/test_all.dart b/pkg/dartdev/test/test_all.dart
index 9cef9d3..9b3a5d9 100644
--- a/pkg/dartdev/test/test_all.dart
+++ b/pkg/dartdev/test/test_all.dart
@@ -4,12 +4,14 @@
 
 import 'package:test/test.dart';
 
+import 'commands/create_test.dart' as create;
 import 'commands/flag_test.dart' as flag;
 import 'commands/format_test.dart' as format;
 import 'utils_test.dart' as utils;
 
 main() {
   group('dartdev', () {
+    create.main();
     flag.main();
     format.main();
     utils.main();
diff --git a/pkg/dev_compiler/analysis_options.yaml b/pkg/dev_compiler/analysis_options.yaml
index ed8ddc4..e4c5083 100644
--- a/pkg/dev_compiler/analysis_options.yaml
+++ b/pkg/dev_compiler/analysis_options.yaml
@@ -15,10 +15,21 @@
 
 linter:
   rules:
+    # Enforced by pedantic v1.9.0.
+    - always_declare_return_types
+    - always_require_non_null_named_parameters
     - annotate_overrides
+    - avoid_null_checks_in_equality_operators
+    - camel_case_extensions
+    - prefer_adjacent_string_concatenation
+    - prefer_collection_literals
     - prefer_conditional_assignment
-    - prefer_null_aware_operators
+    - prefer_final_fields
+    - prefer_for_elements_to_map_fromIterable
+    - prefer_if_null_operators
     - prefer_single_quotes
-    # Not enforced by pedantic at any version
+    - prefer_spread_collections
+    # Not enforced by pedantic at any version.
     - directives_ordering
+    - prefer_null_aware_operators
     - prefer_typing_uninitialized_variables
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 2799afd..4f569a1 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -278,7 +278,7 @@
       }
 
       assert(body.isNotEmpty);
-      var newBody = Expression.binary([assign]..addAll(body), ',') as Binary;
+      var newBody = Expression.binary([assign, ...body], ',') as Binary;
       newBody = _substitute(newBody, {result: left});
       return MetaLet(vars, newBody.commaToExpressionList(),
           statelessResult: statelessResult);
@@ -296,9 +296,8 @@
       generator.analysis.containsInterpolatedNode.whereType<MetaLetVariable>());
   if (nodes.isEmpty) return tree;
 
-  return instantiator(Map.fromIterable(nodes,
-      key: (v) => (v as MetaLetVariable).nameOrPosition,
-      value: (v) => substitutions[v] ?? v)) as T;
+  return instantiator(
+      {for (var v in nodes) v.nameOrPosition: substitutions[v] ?? v}) as T;
 }
 
 /// A temporary variable used in a [MetaLet].
diff --git a/pkg/dev_compiler/lib/src/compiler/js_names.dart b/pkg/dev_compiler/lib/src/compiler/js_names.dart
index d9814cc..0e3192c 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_names.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_names.dart
@@ -123,7 +123,7 @@
 
   /// Nested scopes, these are visited after everything else so the names
   /// they might need are in scope.
-  final childScopes = Map<Node, _FunctionScope>();
+  final childScopes = <Node, _FunctionScope>{};
 
   /// New names assigned for temps and identifiers.
   final renames = HashMap<Object, String>();
@@ -133,7 +133,7 @@
 
 /// Collects all names used in the visited tree.
 class _RenameVisitor extends VariableDeclarationVisitor {
-  final pendingRenames = Map<Object, Set<_FunctionScope>>();
+  final pendingRenames = <Object, Set<_FunctionScope>>{};
 
   final _FunctionScope globalScope = _FunctionScope(null);
   final _FunctionScope rootScope = _FunctionScope(null);
@@ -343,7 +343,7 @@
 ///
 /// http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-object-prototype-object
 /// http://www.ecma-international.org/ecma-262/6.0/#sec-additional-properties-of-the-object.prototype-object
-final objectProperties = <String>[
+final objectProperties = <String>{
   'constructor',
   'toString',
   'toLocaleString',
@@ -356,7 +356,7 @@
   '__defineSetter__',
   '__lookupSetter__',
   '__proto__'
-].toSet();
+};
 
 /// Returns the JS member name for a public Dart instance member, before it
 /// is symbolized; generally you should use [_emitMemberName] or
diff --git a/pkg/dev_compiler/lib/src/compiler/js_utils.dart b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
index 5b5971e..8b936e7 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_utils.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
@@ -34,7 +34,7 @@
 class MutationVisitor extends BaseVisitor<void> {
   /// Using Identifier names instead of a more precise key may result in
   /// mutations being imprecisely reported when variables shadow each other.
-  final mutated = Set<String>();
+  final mutated = <String>{};
   @override
   void visitAssignment(node) {
     var id = node.leftHandSide;
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
index 4121fe5..70224ce 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
@@ -262,7 +262,9 @@
       var idName = name.endsWith('=') ? name.replaceAll('=', '_') : name;
       idName = idName.replaceAll(js_ast.invalidCharInIdentifier, '_');
       id ??= js_ast.TemporaryId(idName);
-      moduleItems.add(js.statement('const # = #.privateName(#, #)',
+      // TODO(vsm): Change back to `const`.
+      // See https://github.com/dart-lang/sdk/issues/40380.
+      moduleItems.add(js.statement('var # = #.privateName(#, #)',
           [id, runtimeModule, emitLibraryName(library), js.string(name)]));
       return id;
     }
@@ -417,8 +419,10 @@
       var alias = jsLibraryAlias(library);
       var aliasId = alias == null ? null : js_ast.TemporaryId(alias);
 
+      // TODO(vsm): Change back to `const`.
+      // See https://github.com/dart-lang/sdk/issues/40380.
       items.add(js.statement(
-          'const # = Object.create(#.library)', [libraryId, runtimeModule]));
+          'var # = Object.create(#.library)', [libraryId, runtimeModule]));
       exports.add(js_ast.NameSpecifier(libraryId, asName: aliasId));
     }
 
@@ -426,8 +430,10 @@
     // TODO(jmesserly): find a cleaner design for this.
     if (isBuildingSdk) {
       var id = extensionSymbolsModule;
-      items.add(js.statement(
-          'const # = Object.create(#.library)', [id, runtimeModule]));
+      // TODO(vsm): Change back to `const`.
+      // See https://github.com/dart-lang/sdk/issues/40380.
+      items.add(js
+          .statement('var # = Object.create(#.library)', [id, runtimeModule]));
       exports.add(js_ast.NameSpecifier(id));
     }
 
@@ -468,7 +474,7 @@
   /// Emits imports and extension methods into [items].
   @protected
   void emitImportsAndExtensionSymbols(List<js_ast.ModuleItem> items) {
-    var modules = Map<String, List<Library>>();
+    var modules = <String, List<Library>>{};
 
     for (var import in _imports.keys) {
       modules.putIfAbsent(libraryToModule(import), () => []).add(import);
@@ -512,7 +518,9 @@
       if (isBuildingSdk) {
         value = js.call('# = Symbol(#)', [value, js.string('dartx.$name')]);
       }
-      items.add(js.statement('const # = #;', [id, value]));
+      // TODO(vsm): Change back to `const`.
+      // See https://github.com/dart-lang/sdk/issues/40380.
+      items.add(js.statement('var # = #;', [id, value]));
     });
   }
 
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index 3bdf602..9b2105f 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -3,7 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // ignore_for_file: slash_for_doc_comments, unnecessary_new
-// ignore_for_file: prefer_single_quotes
+// ignore_for_file: always_declare_return_types, prefer_single_quotes
+// ignore_for_file: prefer_collection_literals
 
 // Utilities for building JS ASTs at runtime.  Contains a builder class
 // and a parser that parses part of the language.
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index 74b6f9a..bed1271 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // ignore_for_file: slash_for_doc_comments, prefer_single_quotes
+// ignore_for_file: always_declare_return_types, prefer_final_fields
+// ignore_for_file: always_require_non_null_named_parameters
 
 part of js_ast;
 
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index 918cd1f..df80ee1 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -3,7 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // ignore_for_file: slash_for_doc_comments, unnecessary_const
-// ignore_for_file: prefer_single_quotes
+// ignore_for_file: always_declare_return_types, prefer_single_quotes
+// ignore_for_file: prefer_collection_literals, prefer_final_fields
 
 part of js_ast;
 
diff --git a/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart b/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
index d9e7da8..867e905 100644
--- a/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// ignore_for_file: always_declare_return_types
+
 import 'package:source_maps/source_maps.dart' hide Printer;
 import 'package:source_span/source_span.dart' show SourceLocation;
 import 'js_ast.dart';
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index c985574..733b786 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // ignore_for_file: slash_for_doc_comments, prefer_single_quotes
+// ignore_for_file: always_declare_return_types, prefer_collection_literals
 
 part of js_ast;
 
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 654d5a8..080d830 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -429,7 +429,7 @@
   }
 
   if (recordUsedInputs) {
-    Set<Uri> usedOutlines = Set<Uri>();
+    Set<Uri> usedOutlines = <Uri>{};
     if (useIncrementalCompiler) {
       compilerState.incrementalCompiler
           .updateNeededDillLibrariesWithHierarchy(result.classHierarchy, null);
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index c4205b1..f46dcd5 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -68,7 +68,7 @@
   final _constTable = _emitTemporaryId('CT');
 
   // Constant getters used to populate the constant table.
-  final _constLazyAccessors = List<js_ast.Method>();
+  final _constLazyAccessors = <js_ast.Method>[];
 
   /// Tracks the index in [moduleItems] where the const table must be inserted.
   /// Required for SDK builds due to internal circular dependencies.
@@ -131,7 +131,7 @@
 
   bool _superAllowed = true;
 
-  final _superHelpers = Map<String, js_ast.Method>();
+  final _superHelpers = <String, js_ast.Method>{};
 
   // Compilation of Kernel's [BreakStatement].
   //
@@ -232,8 +232,7 @@
     coreTypes ??= CoreTypes(component);
     var types = TypeEnvironment(coreTypes, hierarchy);
     var constants = DevCompilerConstants();
-    var nativeTypes = NativeTypeSet(coreTypes, constants,
-        enableNullSafety: options.enableNullSafety);
+    var nativeTypes = NativeTypeSet(coreTypes, constants);
     var jsTypeRep = JSTypeRep(types, hierarchy);
     var staticTypeContext = StatefulStaticTypeContext.stacked(types);
     return ProgramCompiler._(
@@ -753,7 +752,7 @@
     }
 
     bool shouldDefer(InterfaceType t) {
-      var visited = Set<DartType>();
+      var visited = <DartType>{};
       bool defer(DartType t) {
         if (t is InterfaceType) {
           var tc = t.classNode;
@@ -1670,8 +1669,8 @@
       }
     }
 
-    var getters = Map<String, Procedure>();
-    var setters = Map<String, Procedure>();
+    var getters = <String, Procedure>{};
+    var setters = <String, Procedure>{};
     for (var m in c.procedures) {
       if (m.isAbstract) continue;
       if (m.isGetter) {
@@ -2299,7 +2298,7 @@
     return _extensionTypes.isNativeInterface(c);
   }
 
-  var _forwardingCache = HashMap<Class, Map<String, Member>>();
+  final _forwardingCache = HashMap<Class, Map<String, Member>>();
 
   Member _lookupForwardedMember(Class c, String name) {
     // We only care about public methods.
@@ -2820,8 +2819,10 @@
       // TODO(jmesserly): should we disable source info for annotations?
       var savedUri = _currentUri;
       _currentUri = member.enclosingClass.fileUri;
-      result = js_ast.ArrayInitializer(
-          [result]..addAll(annotations.map(_instantiateAnnotation)));
+      result = js_ast.ArrayInitializer([
+        result,
+        for (var annotation in annotations) _instantiateAnnotation(annotation)
+      ]);
       _currentUri = savedUri;
     }
     return result;
@@ -2854,7 +2855,7 @@
       var savedUri = _currentUri;
       _currentUri = member.enclosingClass.fileUri;
       result = js_ast.ArrayInitializer(
-          [result]..addAll(metadata.map(_instantiateAnnotation)));
+          [result, for (var value in metadata) _instantiateAnnotation(value)]);
       _currentUri = savedUri;
     }
     return result;
@@ -4838,12 +4839,16 @@
         else
           _visitExpression(arg),
       if (node.named.isNotEmpty)
-        js_ast.ObjectInitializer(node.named.map(_emitNamedExpression).toList()),
+        js_ast.ObjectInitializer([
+          for (var arg in node.named) _emitNamedExpression(arg, isJsInterop)
+        ]),
     ];
   }
 
-  js_ast.Property _emitNamedExpression(NamedExpression arg) {
-    return js_ast.Property(propertyName(arg.name), _visitExpression(arg.value));
+  js_ast.Property _emitNamedExpression(NamedExpression arg,
+      [bool isJsInterop = false]) {
+    var value = isJsInterop ? _assertInterop(arg.value) : arg.value;
+    return js_ast.Property(propertyName(arg.name), _visitExpression(value));
   }
 
   /// Emits code for the `JS(...)` macro.
@@ -4958,9 +4963,9 @@
     var ctor = node.target;
     var ctorClass = ctor.enclosingClass;
     var args = node.arguments;
-    if (isJSAnonymousType(ctorClass)) return _emitObjectLiteral(args);
+    if (isJSAnonymousType(ctorClass)) return _emitObjectLiteral(args, ctor);
     var result = js_ast.New(_emitConstructorName(node.constructedType, ctor),
-        _emitArgumentList(args, types: false));
+        _emitArgumentList(args, types: false, target: ctor));
 
     return node.isConst ? canonicalizeConstObject(result) : result;
   }
@@ -5025,10 +5030,10 @@
 
   js_ast.Expression _emitJSInteropNew(Member ctor, Arguments args) {
     var ctorClass = ctor.enclosingClass;
-    if (isJSAnonymousType(ctorClass)) return _emitObjectLiteral(args);
+    if (isJSAnonymousType(ctorClass)) return _emitObjectLiteral(args, ctor);
     return js_ast.New(
         _emitConstructorName(_coreTypes.legacyRawType(ctorClass), ctor),
-        _emitArgumentList(args, types: false));
+        _emitArgumentList(args, types: false, target: ctor));
   }
 
   js_ast.Expression _emitMapImplType(InterfaceType type, {bool identity}) {
@@ -5053,8 +5058,8 @@
         emitNullability: false);
   }
 
-  js_ast.Expression _emitObjectLiteral(Arguments node) {
-    var args = _emitArgumentList(node, types: false);
+  js_ast.Expression _emitObjectLiteral(Arguments node, Member ctor) {
+    var args = _emitArgumentList(node, types: false, target: ctor);
     if (args.isEmpty) return js.call('{}');
     assert(args.single is js_ast.ObjectInitializer);
     return args.single;
@@ -5536,7 +5541,9 @@
         js.call('# || #.#', [constAliasId, _constTable, constAliasProperty]);
     constAliasCache[node] = constAccessor;
     var constJs = super.visitConstant(node);
-    moduleItems.add(js.statement('let #;', [constAliasId]));
+    // TODO(vsm): Change back to `let`.
+    // See https://github.com/dart-lang/sdk/issues/40380.
+    moduleItems.add(js.statement('var #;', [constAliasId]));
 
     var func = js_ast.Fun(
         [],
diff --git a/pkg/dev_compiler/lib/src/kernel/native_types.dart b/pkg/dev_compiler/lib/src/kernel/native_types.dart
index ab1d626..162c50b 100644
--- a/pkg/dev_compiler/lib/src/kernel/native_types.dart
+++ b/pkg/dev_compiler/lib/src/kernel/native_types.dart
@@ -37,8 +37,7 @@
   final _nativeTypes = HashSet<Class>.identity();
   final _pendingLibraries = HashSet<Library>.identity();
 
-  NativeTypeSet(this.coreTypes, this.constants,
-      {bool enableNullSafety = false}) {
+  NativeTypeSet(this.coreTypes, this.constants) {
     // First, core types:
     // TODO(vsm): If we're analyzing against the main SDK, those
     // types are not explicitly annotated.
@@ -62,16 +61,12 @@
     // listed below).
 
     // Second, html types - these are only searched if we use dart:html, etc.:
-    // TODO(39698) Remove this check and the named parameter once we don't have
-    // to exclude libraries from the forked NNBD sdk.
-    if (!enableNullSafety) {
-      _addPendingExtensionTypes(sdk.getLibrary('dart:html'));
-      _addPendingExtensionTypes(sdk.getLibrary('dart:indexed_db'));
-      _addPendingExtensionTypes(sdk.getLibrary('dart:svg'));
-      _addPendingExtensionTypes(sdk.getLibrary('dart:web_audio'));
-      _addPendingExtensionTypes(sdk.getLibrary('dart:web_gl'));
-      _addPendingExtensionTypes(sdk.getLibrary('dart:web_sql'));
-    }
+    _addPendingExtensionTypes(sdk.getLibrary('dart:html'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:indexed_db'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:svg'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:web_audio'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:web_gl'));
+    _addPendingExtensionTypes(sdk.getLibrary('dart:web_sql'));
   }
 
   void _addExtensionType(Class c, [bool mustBeNative = false]) {
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index fe3e379..a0d28e0 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -113,7 +113,7 @@
         }
 
         if (superclasses == null) {
-          superclasses = Set();
+          superclasses = <Class>{};
           void collectSupertypes(Class c) {
             if (!superclasses.add(c)) return;
             var s = c.superclass;
@@ -197,9 +197,9 @@
   /// super.
   final inheritedSetters = HashSet<String>();
 
-  final extensionMethods = Set<String>();
+  final extensionMethods = <String>{};
 
-  final extensionAccessors = Set<String>();
+  final extensionAccessors = <String>{};
 
   ClassPropertyModel.build(this.types, this.extensionTypes,
       VirtualFieldModel fieldModel, Class class_) {
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 949004d..5ab0178 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -5,73 +5,23 @@
 import 'dart:collection';
 import 'dart:core' hide MapEntry;
 
+import 'package:_fe_analyzer_shared/src/messages/codes.dart'
+    show Message, LocatedMessage;
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
 import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
 import 'package:kernel/transformations/track_widget_constructor_locations.dart';
+import 'package:_js_interop_checks/js_interop_checks.dart';
 
 import 'constants.dart' show DevCompilerConstantsBackend;
 import 'kernel_helpers.dart';
 
 /// A kernel [Target] to configure the Dart Front End for dartdevc.
 class DevCompilerTarget extends Target {
-  // TODO(39698) Turn these back into const lists returned from the getters
-  // once we don't have to exclude libraries from the forked NNBD sdk.
-  List<String> _extraRequiredLibraries;
-  List<String> _extraIndexedLibraries;
-
-  DevCompilerTarget(this.flags)
-      : _extraRequiredLibraries = [
-          'dart:_runtime',
-          'dart:_debugger',
-          'dart:_foreign_helper',
-          'dart:_interceptors',
-          'dart:_internal',
-          'dart:_isolate_helper',
-          'dart:_js_helper',
-          'dart:_js_mirrors',
-          'dart:_js_primitives',
-          'dart:_metadata',
-          'dart:_native_typed_data',
-          'dart:async',
-          'dart:collection',
-          'dart:convert',
-          'dart:developer',
-          if (!flags.enableNullSafety) 'dart:io',
-          'dart:isolate',
-          'dart:js',
-          'dart:js_util',
-          'dart:math',
-          'dart:mirrors',
-          'dart:typed_data',
-          if (!flags.enableNullSafety) ...[
-            'dart:indexed_db',
-            'dart:html',
-            'dart:html_common',
-            'dart:svg',
-            'dart:web_audio',
-            'dart:web_gl',
-            'dart:web_sql'
-          ]
-        ],
-        _extraIndexedLibraries = [
-          'dart:async',
-          'dart:collection',
-          if (!flags.enableNullSafety) ...['dart:html', 'dart:indexed_db'],
-          'dart:math',
-          if (!flags.enableNullSafety) ...[
-            'dart:svg',
-            'dart:web_audio',
-            'dart:web_gl',
-            'dart:web_sql'
-          ],
-          'dart:_interceptors',
-          'dart:_js_helper',
-          'dart:_native_typed_data',
-          'dart:_runtime',
-        ];
+  DevCompilerTarget(this.flags);
 
   final TargetFlags flags;
 
@@ -87,11 +37,55 @@
   String get name => 'dartdevc';
 
   @override
-  List<String> get extraRequiredLibraries => _extraRequiredLibraries;
+  List<String> get extraRequiredLibraries => const [
+        'dart:_runtime',
+        'dart:_debugger',
+        'dart:_foreign_helper',
+        'dart:_interceptors',
+        'dart:_internal',
+        'dart:_isolate_helper',
+        'dart:_js_helper',
+        'dart:_js_mirrors',
+        'dart:_js_primitives',
+        'dart:_metadata',
+        'dart:_native_typed_data',
+        'dart:async',
+        'dart:collection',
+        'dart:convert',
+        'dart:developer',
+        'dart:io',
+        'dart:isolate',
+        'dart:js',
+        'dart:js_util',
+        'dart:math',
+        'dart:mirrors',
+        'dart:typed_data',
+        'dart:indexed_db',
+        'dart:html',
+        'dart:html_common',
+        'dart:svg',
+        'dart:web_audio',
+        'dart:web_gl',
+        'dart:web_sql'
+      ];
 
   // The libraries required to be indexed via CoreTypes.
   @override
-  List<String> get extraIndexedLibraries => _extraIndexedLibraries;
+  List<String> get extraIndexedLibraries => const [
+        'dart:async',
+        'dart:collection',
+        'dart:html',
+        'dart:indexed_db',
+        'dart:math',
+        'dart:svg',
+        'dart:web_audio',
+        'dart:web_gl',
+        'dart:web_sql',
+        'dart:_interceptors',
+        'dart:_js_helper',
+        'dart:_native_typed_data',
+        'dart:_runtime',
+      ];
 
   @override
   bool mayDefineRestrictedType(Uri uri) =>
@@ -141,9 +135,13 @@
       Map<String, String> environmentDefines,
       DiagnosticReporter diagnosticReporter,
       ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg)}) {
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
     for (var library in libraries) {
       _CovarianceTransformer(library).transform();
+      JsInteropChecks(
+              diagnosticReporter as DiagnosticReporter<Message, LocatedMessage>)
+          .visitLibrary(library);
     }
   }
 
@@ -153,7 +151,8 @@
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg)}) {
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
     if (flags.trackWidgetCreation) {
       _widgetTracker ??= WidgetCreatorTracker();
       _widgetTracker.transform(component, libraries);
@@ -244,13 +243,13 @@
   ///
   /// [transform] uses this list to eliminate covariance flags for members that
   /// aren't in [_checkedMembers].
-  final _privateProcedures = List<Procedure>();
+  final _privateProcedures = <Procedure>[];
 
   /// List of private instance fields.
   ///
   /// [transform] uses this list to eliminate covariance flags for members that
   /// aren't in [_checkedMembers].
-  final _privateFields = List<Field>();
+  final _privateFields = <Field>[];
 
   final Library _library;
 
diff --git a/pkg/dev_compiler/lib/src/kernel/type_table.dart b/pkg/dev_compiler/lib/src/kernel/type_table.dart
index 6721e0a..bb751d1 100644
--- a/pkg/dev_compiler/lib/src/kernel/type_table.dart
+++ b/pkg/dev_compiler/lib/src/kernel/type_table.dart
@@ -9,7 +9,7 @@
 import '../js_ast/js_ast.dart' show js;
 
 Set<TypeParameter> freeTypeParameters(DartType t) {
-  var result = Set<TypeParameter>();
+  var result = <TypeParameter>{};
   void find(DartType t) {
     if (t is TypeParameterType) {
       result.add(t.parameter);
@@ -122,7 +122,9 @@
     if (name != null) {
       js_ast.Expression init = _defs.remove(t);
       assert(init != null);
-      return js.statement('let # = () => ((# = #.constFn(#))());',
+      // TODO(vsm): Change back to `let`.
+      // See https://github.com/dart-lang/sdk/issues/40380.
+      return js.statement('var # = () => ((# = #.constFn(#))());',
           [name, name, _runtimeModule, init]);
     }
     return null;
diff --git a/pkg/dev_compiler/test/js/builder_test.dart b/pkg/dev_compiler/test/js/builder_test.dart
index 0dfae14..9a1ac18 100644
--- a/pkg/dev_compiler/test/js/builder_test.dart
+++ b/pkg/dev_compiler/test/js/builder_test.dart
@@ -6,12 +6,13 @@
 MiniJsParser _parser(String src) =>
     MiniJsParser(src.replaceAll(_prenumberedPlaceholders, '#'));
 
-_check(Node node, String expected) =>
+void _check(Node node, String expected) =>
     expect(node.toString(), 'js_ast `$expected`');
 
-_checkStatement(String src) => _check(_parser(src).parseStatement(), src);
+void _checkStatement(String src) => _check(_parser(src).parseStatement(), src);
 
-_checkExpression(String src) => _check(_parser(src).parseExpression(), src);
+void _checkExpression(String src) =>
+    _check(_parser(src).parseExpression(), src);
 
 void main() {
   group('MiniJsParser', () {
diff --git a/pkg/dev_compiler/test/modular_suite.dart b/pkg/dev_compiler/test/modular_suite.dart
index f5f85b3..e76144a 100644
--- a/pkg/dev_compiler/test/modular_suite.dart
+++ b/pkg/dev_compiler/test/modular_suite.dart
@@ -16,7 +16,8 @@
 Options _options;
 String _dartdevcScript;
 String _kernelWorkerScript;
-main(List<String> args) async {
+
+void main(List<String> args) async {
   _options = Options.parse(args);
   await _resolveScripts();
   await runSuite(
diff --git a/pkg/dev_compiler/test/modular_suite_nnbd.dart b/pkg/dev_compiler/test/modular_suite_nnbd.dart
index a8eae18..716d3db 100644
--- a/pkg/dev_compiler/test/modular_suite_nnbd.dart
+++ b/pkg/dev_compiler/test/modular_suite_nnbd.dart
@@ -16,7 +16,8 @@
 Options _options;
 String _dartdevcScript;
 String _kernelWorkerScript;
-main(List<String> args) async {
+
+void main(List<String> args) async {
   _options = Options.parse(args);
   await _resolveScripts();
   await runSuite(
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index 185899c..2b1d6e0 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -534,7 +534,7 @@
   _TestRecursiveVisitor(this.librariesFromDill);
 
   @override
-  visitComponent(Component node) {
+  void visitComponent(Component node) {
     var coreTypes = CoreTypes(node);
     var hierarchy = ClassHierarchy(node, coreTypes);
     var jsTypeRep = JSTypeRep(
@@ -553,7 +553,7 @@
   }
 
   @override
-  visitLibrary(Library node) {
+  void visitLibrary(Library node) {
     _staticTypeContext.enterLibrary(node);
     if (librariesFromDill.contains(node) ||
         node.importUri.scheme == 'package' &&
@@ -565,28 +565,28 @@
   }
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     _staticTypeContext.enterMember(node);
     super.visitField(node);
     _staticTypeContext.leaveMember(node);
   }
 
   @override
-  visitConstructor(Constructor node) {
+  void visitConstructor(Constructor node) {
     _staticTypeContext.enterMember(node);
     super.visitConstructor(node);
     _staticTypeContext.leaveMember(node);
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     _staticTypeContext.enterMember(node);
     super.visitProcedure(node);
     _staticTypeContext.leaveMember(node);
   }
 
   @override
-  visitFunctionNode(FunctionNode node) {
+  void visitFunctionNode(FunctionNode node) {
     _functionNesting++;
     if (_functionNesting == 1) {
       inference.enterFunction(node);
@@ -603,7 +603,7 @@
   NotNullCollector(Set<Library> librariesFromDill) : super(librariesFromDill);
 
   @override
-  defaultExpression(Expression node) {
+  void defaultExpression(Expression node) {
     if (!inference.isNullable(node)) {
       notNullExpressions.add(node);
     }
@@ -615,7 +615,7 @@
   ExpectAllNotNull(Set<Library> librariesFromDill) : super(librariesFromDill);
 
   @override
-  defaultExpression(Expression node) {
+  void defaultExpression(Expression node) {
     expect(inference.isNullable(node), false,
         reason: 'expression `$node` should be inferred as not-null');
     super.defaultExpression(node);
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart
index c04266c..2a36f88 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart
@@ -6,7 +6,7 @@
   /*1:main*/ test(Class());
 }
 
-test(c) {
+void test(c) {
   /*ddc.2:test*/ c.field. /*ddk.2:test*/ method();
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart
index beec13d..d43b10b 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class MyType {
-  get length => 3; // ensures we build an interceptor for `.length`
+  int get length => 3; // ensures we build an interceptor for `.length`
 }
 
 void main() {
@@ -13,4 +13,4 @@
   confuse(null). /*1:main*/ length; // called through the interceptor
 }
 
-confuse(x) => x;
+dynamic confuse(x) => x;
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/rethrow.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/rethrow.dart
index 82a3819..908eb8f 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/rethrow.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/rethrow.dart
@@ -6,7 +6,7 @@
   /*1:main*/ test();
 }
 
-test() {
+void test() {
   try {
     /*2:test*/ throw '>ExceptionMarker<';
     // ignore: UNUSED_CATCH_CLAUSE
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_async.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_async.dart
index ea6ab10..e1e10f8 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_async.dart
@@ -6,6 +6,6 @@
   /*1:main*/ test();
 }
 
-test /*ddk.2:test*/ () /*ddc.2:test*/ async {
+void test /*ddk.2:test*/ () /*ddc.2:test*/ async {
   /*3:test*/ throw '>ExceptionMarker<';
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_awaited_async.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_awaited_async.dart
index 5e4721a..0458fc9 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_awaited_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_awaited_async.dart
@@ -6,10 +6,10 @@
   /*1:main*/ test1();
 }
 
-test1 /*ddk.2:test1*/ () /*ddc.2:test1*/ async {
+Future<void> test1 /*ddk.2:test1*/ () /*ddc.2:test1*/ async {
   await /*3:test1*/ test2();
 }
 
-test2 /*ddk.4:test2*/ () /*ddc.4:test2*/ async {
+Future<void> test2 /*ddk.4:test2*/ () /*ddc.4:test2*/ async {
   /*5:test2*/ throw '>ExceptionMarker<';
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart
index 6d251e8..37467ae 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart
@@ -7,7 +7,7 @@
   /*1:main*/ test();
 }
 
-test /*ddk.2:test*/ () /*ddc.2:test*/ async {
+void test /*ddk.2:test*/ () /*ddc.2:test*/ async {
   // ignore: UNUSED_LOCAL_VARIABLE
   var c = /*3:test*/ Class();
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart
index 2fbc97f..84dac4e3 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart
@@ -8,7 +8,7 @@
 }
 
 class Class {
-  test() {
+  void test() {
     /*2:Class.new.test*/ throw '>ExceptionMarker<';
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_static_method.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_static_method.dart
index 658db6a..e0b974c 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_static_method.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_static_method.dart
@@ -7,7 +7,7 @@
 }
 
 class Class {
-  static test() {
+  static void test() {
     /*2:Function.test*/ throw '>ExceptionMarker<';
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method.dart
index d03d29a..799c9c0 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method.dart
@@ -6,6 +6,6 @@
   /*1:main*/ test();
 }
 
-test() {
+void test() {
   /*2:test*/ throw 'throw me';
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method_from_async.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method_from_async.dart
index f5240ee..06ec99f 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method_from_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_top_level_method_from_async.dart
@@ -6,10 +6,10 @@
   /*1:main*/ test1();
 }
 
-test1 /*ddk.2:test1*/ () /*ddc.2:test1*/ async {
+Future<void> test1 /*ddk.2:test1*/ () /*ddc.2:test1*/ async {
   /*3:test1*/ test2();
 }
 
-test2() {
+void test2() {
   /*4:test2*/ throw '>ExceptionMarker<';
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_catch.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_catch.dart
index 7effa59..d02b31b 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_catch.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_catch.dart
@@ -6,7 +6,7 @@
   /*1:main*/ test();
 }
 
-test() {
+void test() {
   try {
     /*2:test*/ throw '>ExceptionMarker<';
     // ignore: UNUSED_CATCH_CLAUSE
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_finally.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_finally.dart
index 7bfcd1a..211f9ed 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_finally.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_try_finally.dart
@@ -6,7 +6,7 @@
   /*1:main*/ test();
 }
 
-test() {
+void test() {
   try {
     /*2:test*/ throw '>ExceptionMarker<';
   } finally {}
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/breakpoint_on_function_line_breaks_in_body.dart b/pkg/dev_compiler/test/sourcemap/testfiles/breakpoint_on_function_line_breaks_in_body.dart
index efcab4c..b38f0821 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/breakpoint_on_function_line_breaks_in_body.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/breakpoint_on_function_line_breaks_in_body.dart
@@ -6,6 +6,6 @@
   foo();
 }
 
-/*bl*/ /*nb*/ foo() {
+/*bl*/ /*nb*/ void foo() {
   /*s:1*/ print('hello');
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart b/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart
index 52a6c72..62fba8c 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/hello_async.dart
@@ -8,7 +8,7 @@
   /*s:4*/
 }
 
-foo() /*sl:2*/ async {
+Future<void> foo() /*sl:2*/ async {
   print('hello from foo');
 /*s:3*/
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/hello_call.dart b/pkg/dev_compiler/test/sourcemap/testfiles/hello_call.dart
index c22f9c1..1f28925 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/hello_call.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/hello_call.dart
@@ -7,6 +7,6 @@
   /*s:1*/ foo();
 }
 
-foo() {
+void foo() {
   /*s:2*/ print('hello from foo');
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart b/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart
index de068a9..53a6943 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart
@@ -10,17 +10,17 @@
 }
 
 class Foo {
-  foo() {
+  int foo() {
     return /*bc:1*/ bar() + /*bc:2*/ baz /*nbc*/ ();
     /*nbb:0:1*/
   }
 
-  bar() {
+  int bar() {
     return 42;
     /*nbb:0:1*/
   }
 
-  baz() {
+  int baz() {
     return 42;
     /*nbb:0:1*/
   }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/hello_sane_column_on_print_return_value.dart b/pkg/dev_compiler/test/sourcemap/testfiles/hello_sane_column_on_print_return_value.dart
index 2478dfa..2f1663c 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/hello_sane_column_on_print_return_value.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/hello_sane_column_on_print_return_value.dart
@@ -6,6 +6,6 @@
   /*bc:3*/ print(/*bc:1*/ foo());
 }
 
-foo() {
+String foo() {
   return /*bc:2*/ 'foo!';
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters.dart b/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters.dart
index 6eb9919..2ea7844 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters.dart
@@ -7,7 +7,7 @@
   /*nbb:0:4*/
 }
 
-foo(int bar, {int /*bc:3*/ baz}) {
+void foo(int bar, {int /*bc:3*/ baz}) {
   /*bc:4*/ print('foo!');
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters_no_given.dart b/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters_no_given.dart
index acbfdba..4f5ee7d 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters_no_given.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/method_call_with_named_parameters_no_given.dart
@@ -7,7 +7,7 @@
   /*nbb:0:3*/
 }
 
-foo(int bar, {int /*bc:2*/ baz}) {
+void foo(int bar, {int /*bc:2*/ baz}) {
   /*bc:3*/ print('foo!');
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
index 406b49b..45de474 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_is_and_as_test.dart
@@ -32,4 +32,4 @@
   }
 }
 
-foo() => 42;
+dynamic foo() => 42;
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
index de8c40d..801b41e 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
@@ -5,9 +5,9 @@
 /*Debugger:stepOver*/
 
 class Class2 {
-  operator [](index) => index;
+  dynamic operator [](index) => index;
 
-  code() {
+  dynamic code() {
     this[42];
     return this[42];
   }
@@ -15,7 +15,7 @@
 
 class Class3 extends Class2 {
   @override
-  code() {
+  dynamic code() {
     /*bl*/ /*sl:1*/ super[42];
     /*sl:2*/ return super[42];
   }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
index f0f1130..d6c74bf 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
@@ -5,9 +5,9 @@
 /*Debugger:stepOver*/
 
 class Class2 {
-  operator [](index) => index;
+  dynamic operator [](index) => index;
 
-  code() {
+  dynamic code() {
     /*bl*/ /*sl:1*/ this[42]; // DDK fails to hover on `this`
     return /*sl:2*/ this[42];
   }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
index 90fa680..23c41eb 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
@@ -5,9 +5,9 @@
 /*Debugger:stepOver*/
 
 class Class2 {
-  operator [](index) => index;
+  dynamic operator [](index) => index;
 
-  code() {
+  dynamic code() {
     this[42];
     return this[42];
   }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart
index 1d7b275..d62bd94 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_throw.dart
@@ -12,6 +12,6 @@
   }
 }
 
-foo() {
+int foo() {
   return 42;
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_function_line.dart b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_function_line.dart
index 9534d13..4683e61 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_function_line.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_function_line.dart
@@ -7,6 +7,6 @@
   foo();
 }
 
-foo() {
+void foo() {
   print('hello');
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart
index bb17afc..cef8d5a 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_async_star_yield.dart
@@ -9,15 +9,15 @@
   print('Done!');
 }
 
-foobar() async* {
+dynamic foobar() async* {
   /*bc:4*/ yield /*bc:1*/ foo() /*bc:3*/ + /*bc:2*/ bar();
   /*bc:8*/ yield /*bc:5*/ bar() /*bc:7*/ * /*bc:6*/ foo();
 }
 
-foo() {
+dynamic foo() {
   return 42;
 }
 
-bar() {
+dynamic bar() {
   return 3;
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart
index a217330..20fc828 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_await_for.dart
@@ -13,7 +13,7 @@
   /*s:8*/
 }
 
-foobar() async* {
+Stream<int> foobar() async* {
   // The testing framework should not step into the 'real body' at all.
   /*nb*/
   yield 1;
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
index c756961..519529c 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_conditional_expression.dart
@@ -13,10 +13,10 @@
   return false;
 }
 
-bar() {
+String bar() {
   return 'bar';
 }
 
-baz() {
+String baz() {
   return 'baz';
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart
index 76049d5..33e7273 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_if_and_identical.dart
@@ -13,10 +13,10 @@
   }
 }
 
-foo() {
+dynamic foo() {
   return 42;
 }
 
-bar() {
+dynamic bar() {
   return 43;
 }
diff --git a/pkg/dev_compiler/tool/check_nnbd_sdk.dart b/pkg/dev_compiler/tool/check_nnbd_sdk.dart
index ae9941c..9b52d5f 100644
--- a/pkg/dev_compiler/tool/check_nnbd_sdk.dart
+++ b/pkg/dev_compiler/tool/check_nnbd_sdk.dart
@@ -50,6 +50,7 @@
   File.fromUri(emptyProgramUri).writeAsStringSync('''
 import 'dart:js';
 import 'dart:js_util';
+import 'dart:html';
 
 main() {}
 ''');
@@ -101,11 +102,40 @@
     } else {
       // Fail.
       print('Golden file does not match.');
-      var diff = Process.runSync('diff', [goldenFile.path, errorFile.path]);
-      print(diff.stdout);
       print('\nTo update the golden file, run:'
           '\n  ${Platform.executable} ${Platform.script} '
           '${argv.join(' ')} --update-golden');
+
+      // Compare the two sorted lists to show what errors changed.  Note, we
+      // don't use `diff` as an external tool because it is not available on
+      // windows bots.
+      var toAdd = <String>[];
+      var toRemove = <String>[];
+      var goldenList = golden.trim().split('\n');
+      int i = 0, j = 0;
+      for (; i < errorList.length && j < goldenList.length;) {
+        int compare = errorList[i].compareTo(goldenList[j]);
+        if (compare == 0) {
+          i++;
+          j++;
+        } else if (compare < 0) {
+          toAdd.add(errorList[i]);
+          i++;
+        } else {
+          toRemove.add(goldenList[j]);
+          j++;
+        }
+      }
+      for (; i < errorList.length; i++) {
+        toAdd.add(errorList[i]);
+      }
+      for (; j < goldenList.length; j++) {
+        toRemove.add(goldenList[j]);
+      }
+      print('\nNew errors:');
+      print(toAdd.join('\n'));
+      print('\nErrors that can be removed from the golden file:');
+      print(toRemove.join('\n'));
       exit(1);
     }
   }
diff --git a/pkg/dev_compiler/tool/compile_dartdevc_sdk.dart b/pkg/dev_compiler/tool/compile_dartdevc_sdk.dart
index 097a40a..f24c12e 100644
--- a/pkg/dev_compiler/tool/compile_dartdevc_sdk.dart
+++ b/pkg/dev_compiler/tool/compile_dartdevc_sdk.dart
@@ -9,7 +9,7 @@
 import 'dart:io';
 import 'package:dev_compiler/src/kernel/command.dart';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   var result = await compileSdkFromDill(args);
   exitCode = result.exitCode;
 }
diff --git a/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt
new file mode 100644
index 0000000..62cba23
--- /dev/null
+++ b/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt
@@ -0,0 +1,104 @@
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '&': int.& (&), JSNumber.& (&).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '<<': int.<< (<<), JSNumber.<< (<<).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '>>': int.>> (>>), JSNumber.>> (>>).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '\|': int.\| (\|), JSNumber.\| (\|).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '^': int.^ (^), JSNumber.^ (^).
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1153|7|14|'JSArray.[]=' ('void Function(int, E)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1155|7|12|'JSArray.[]=' ('void Function(int, E)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1157|7|17|'JSArray.[]=' ('void Function(int, E)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|708|17|3|'NativeTypedArrayOfDouble.[]=' ('void Function(int, double)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|729|17|3|'NativeTypedArrayOfInt.[]=' ('void Function(int, int)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/js/js.dart|351|17|3|'JsArray.[]=' ('void Function(dynamic, E)') isn't a valid override of 'JsObject.[]=' ('void Function(dynamic, dynamic)').
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1672|28|1|The operator '&' isn't defined for the type 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1674|27|1|The operator '&' isn't defined for the type 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1677|17|1|The operator '&' isn't defined for the type 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|18|1|The operator '&' isn't defined for the type 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|44|1|The operator '&' isn't defined for the type 'JSInt'.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12140|3|7|All final variables must be initialized, but '_attributes', '_childElementCount', and 21 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|15319|3|15|All final variables must be initialized, but 'elements', 'form', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|15992|3|11|All final variables must be initialized, but 'length' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|1760|3|13|All final variables must be initialized, but 'form', 'labels', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|17995|3|13|All final variables must be initialized, but '_get_contentWindow' and 'sandbox' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|18185|3|12|All final variables must be initialized, but 'complete', 'currentSrc', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|18294|3|12|All final variables must be initialized, but '_get_valueAsDate', 'entries', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|19245|3|12|All final variables must be initialized, but 'control' and 'form' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|19274|3|13|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|19324|3|11|All final variables must be initialized, but 'import', 'relList', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|19455|3|10|All final variables must be initialized, but 'areas' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|19559|3|12|All final variables must be initialized, but 'audioDecodedByteCount', 'audioTracks', and 18 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|20673|3|12|All final variables must be initialized, but 'labels' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|22075|3|4|All final variables must be initialized, but 'baseUri', 'childNodes', and 11 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|22804|3|13|All final variables must be initialized, but '_get_contentWindow', 'form', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|23190|3|13|All final variables must be initialized, but 'form' and 'index' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|23241|3|13|All final variables must be initialized, but 'form', 'htmlFor', and 5 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|24751|3|15|All final variables must be initialized, but 'labels' and 'position' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|26240|3|13|All final variables must be initialized, but 'form', 'labels', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|27806|3|12|All final variables must be initialized, but 'sheet' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|27976|3|16|All final variables must be initialized, but 'cellIndex' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|28075|3|12|All final variables must be initialized, but '_rows' and '_tBodies' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|28161|3|15|All final variables must be initialized, but '_cells', 'rowIndex', and 1 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|28217|3|19|All final variables must be initialized, but '_rows' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|28271|3|15|All final variables must be initialized, but 'content' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|28344|3|15|All final variables must be initialized, but 'form', 'labels', and 5 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|29082|3|12|All final variables must be initialized, but 'readyState' and 'track' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|29888|3|12|All final variables must be initialized, but 'decodedFrameCount', 'droppedFrameCount', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|38892|3|8|All final variables must be initialized, but 'sourceCapabilities' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|453|3|13|All final variables must be initialized, but 'origin' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|8511|3|15|All final variables must be initialized, but 'options' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|972|3|11|All final variables must be initialized, but 'origin' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1031|3|14|All final variables must be initialized, but 'height', 'result', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1194|3|21|All final variables must be initialized, but 'height', 'in1', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1245|3|14|All final variables must be initialized, but 'height', 'href', and 5 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1294|3|14|All final variables must be initialized, but 'height', 'result', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1336|3|18|All final variables must be initialized, but 'in1' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1366|3|19|All final variables must be initialized, but 'height', 'in1', and 7 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1418|3|15|All final variables must be initialized, but 'dx', 'dy', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1466|3|19|All final variables must be initialized, but 'x', 'y', and 1 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1503|3|25|All final variables must be initialized, but 'height', 'in1', and 9 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1557|3|18|All final variables must be initialized, but 'limitingConeAngle', 'pointsAtX', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1604|3|13|All final variables must be initialized, but 'height', 'in1', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1649|3|19|All final variables must be initialized, but 'baseFrequencyX', 'baseFrequencyY', and 9 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1715|3|13|All final variables must be initialized, but 'filterUnits', 'height', and 5 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1796|3|20|All final variables must be initialized, but 'height', 'width', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1846|3|15|All final variables must be initialized, but 'pathLength' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1873|3|15|All final variables must be initialized, but 'farthestViewportElement', 'nearestViewportElement', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|1914|3|12|All final variables must be initialized, but 'height', 'href', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2076|3|11|All final variables must be initialized, but 'x1', 'x2', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2105|3|21|All final variables must be initialized, but 'x1', 'x2', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2134|3|13|All final variables must be initialized, but 'markerHeight', 'markerUnits', and 7 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2191|3|11|All final variables must be initialized, but 'height', 'maskContentUnits', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2407|3|14|All final variables must be initialized, but 'height', 'href', and 10 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2508|3|14|All final variables must be initialized, but 'animatedPoints' and 'points' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2533|3|15|All final variables must be initialized, but 'animatedPoints' and 'points' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2602|3|21|All final variables must be initialized, but 'cx', 'cy', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2655|3|11|All final variables must be initialized, but 'height', 'rx', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2688|3|13|All final variables must be initialized, but 'href' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2744|3|11|All final variables must be initialized, but 'gradientOffset' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|2844|3|12|All final variables must be initialized, but 'sheet' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3181|3|10|All final variables must be initialized, but 'ownerSvgElement' and 'viewportElement' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3354|3|13|All final variables must be initialized, but 'currentTranslate', 'height', and 5 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3476|3|13|All final variables must be initialized, but 'preserveAspectRatio' and 'viewBox' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3536|3|18|All final variables must be initialized, but 'lengthAdjust' and 'textLength' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3603|3|15|All final variables must be initialized, but 'href', 'method', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3643|3|22|All final variables must be initialized, but 'dx', 'dy', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3852|3|10|All final variables must be initialized, but 'height', 'href', and 3 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3885|3|11|All final variables must be initialized, but 'preserveAspectRatio' and 'viewBox' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3932|3|16|All final variables must be initialized, but 'gradientTransform', 'gradientUnits', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|396|3|16|All final variables must be initialized, but 'requiredExtensions', 'systemLanguage', and 1 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|439|3|13|All final variables must be initialized, but 'cx', 'cy', and 1 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|466|3|15|All final variables must be initialized, but 'clipPathUnits' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|548|3|14|All final variables must be initialized, but 'cx', 'cy', and 2 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|56|3|8|All final variables must be initialized, but 'href' and 'target' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|582|3|14|All final variables must be initialized, but 'height', 'in1', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|643|3|20|All final variables must be initialized, but 'height', 'in1', and 6 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|702|3|26|All final variables must be initialized, but 'height', 'in1', and 4 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|740|3|18|All final variables must be initialized, but 'height', 'in1', and 10 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|806|3|23|All final variables must be initialized, but 'bias', 'divisor', and 15 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|881|3|24|All final variables must be initialized, but 'diffuseConstant', 'height', and 8 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|934|3|24|All final variables must be initialized, but 'height', 'in1', and 8 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|996|3|21|All final variables must be initialized, but 'azimuth' and 'elevation' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|31|13|13|The final variable 'lengthInBytes' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|320|20|6|The final variable 'buffer' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|324|13|13|The final variable 'lengthInBytes' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|328|13|13|The final variable 'offsetInBytes' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|333|13|18|The final variable 'elementSizeInBytes' must be initialized.
diff --git a/pkg/dev_compiler/tool/dart2js_server_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dart2js_server_nnbd_sdk_error_golden.txt
deleted file mode 100644
index c4026f3..0000000
--- a/pkg/dev_compiler/tool/dart2js_server_nnbd_sdk_error_golden.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '&': int.& (&), JSNumber.& (&).
-ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '<<': int.<< (<<), JSNumber.<< (<<).
-ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '>>': int.>> (>>), JSNumber.>> (>>).
-ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '\|': int.\| (\|), JSNumber.\| (\|).
-ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '^': int.^ (^), JSNumber.^ (^).
-ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1153|7|14|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
-ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1155|7|12|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
-ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1157|7|17|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
-ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|708|17|3|'NativeTypedArrayOfDouble.[]=' ('void Function(int, double)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
-ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|729|17|3|'NativeTypedArrayOfInt.[]=' ('void Function(int, int)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
-ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/js/js.dart|351|17|3|'JsArray.[]=' ('void Function(dynamic, E)') isn't a valid override of 'JsObject.[]=' ('void Function(dynamic, dynamic)').
-ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1672|28|1|The operator '&' isn't defined for the class 'JSInt'.
-ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1674|27|1|The operator '&' isn't defined for the class 'JSInt'.
-ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1677|17|1|The operator '&' isn't defined for the class 'JSInt'.
-ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|18|1|The operator '&' isn't defined for the class 'JSInt'.
-ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|44|1|The operator '&' isn't defined for the class 'JSInt'.
-ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|31|13|13|The final variable 'lengthInBytes' must be initialized.
-ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|320|20|6|The final variable 'buffer' must be initialized.
-ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|324|13|13|The final variable 'lengthInBytes' must be initialized.
-ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|328|13|13|The final variable 'offsetInBytes' must be initialized.
-ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|333|13|18|The final variable 'elementSizeInBytes' must be initialized.
diff --git a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
index 8b13789..7ac9295 100644
--- a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
+++ b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
@@ -1 +1,387 @@
-
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|10434|18|18|'DocumentFragment._firstElementChild' ('Element? Function()') isn't a valid override of 'ParentNode._firstElementChild' ('Element Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|10437|18|17|'DocumentFragment._lastElementChild' ('Element? Function()') isn't a valid override of 'ParentNode._lastElementChild' ('Element Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|14819|18|18|'Element._firstElementChild' ('Element? Function()') isn't a valid override of 'ParentNode._firstElementChild' ('Element Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|14822|18|17|'Element._lastElementChild' ('Element? Function()') isn't a valid override of 'ParentNode._lastElementChild' ('Element Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|17761|12|16|'HtmlDocument.registerElement2' ('Function Function(String, [Map<dynamic, dynamic>])') isn't a valid override of 'Document.registerElement2' ('Function Function(String, [Map<dynamic, dynamic>?])').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|19243|15|5|'InputElement.files' ('List<File>? Function()') isn't a valid override of 'FileUploadInputElement.files' ('List<File> Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|19361|11|18|'InputElement.selectionDirection' ('String? Function()') isn't a valid override of 'TextInputElementBase.selectionDirection' ('String Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|19363|8|12|'InputElement.selectionEnd' ('int? Function()') isn't a valid override of 'TextInputElementBase.selectionEnd' ('int Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|19365|8|14|'InputElement.selectionStart' ('int? Function()') isn't a valid override of 'TextInputElementBase.selectionStart' ('int Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|33119|19|6|'Window.opener' ('WindowBase? Function()') isn't a valid override of 'WindowBase.opener' ('WindowBase Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|33191|19|6|'Window.parent' ('WindowBase? Function()') isn't a valid override of 'WindowBase.parent' ('WindowBase Function()').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/html/dart2js/html_dart2js.dart|33378|19|3|'Window.top' ('WindowBase? Function()') isn't a valid override of 'WindowBase.top' ('WindowBase Function()').
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10275|15|10|The parameter 'extendsTag' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10281|49|13|The parameter 'typeExtension' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10298|15|13|The parameter 'typeExtension' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10305|16|10|The parameter 'whatToShow' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10305|39|6|The parameter 'filter' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10310|16|10|The parameter 'whatToShow' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10310|39|6|The parameter 'filter' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10336|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10336|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10342|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10342|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10395|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10395|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10414|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|10414|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|1179|32|3|The parameter 'src' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|12604|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|12604|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|12653|43|13|The parameter 'typeExtention' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13055|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13055|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13208|40|9|The parameter 'alignment' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13303|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13303|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13558|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13558|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13693|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|13693|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|15730|13|10|The parameter 'useCapture' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|15740|13|10|The parameter 'useCapture' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|1586|40|4|The parameter 'type' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|1586|53|7|The parameter 'endings' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|17389|14|6|The parameter 'oldUrl' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|17390|14|6|The parameter 'newUrl' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|17761|46|7|The parameter 'options' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|17767|62|10|The parameter 'extendsTag' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|17811|60|10|The parameter 'extendsTag' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18045|13|15|The parameter 'withCredentials' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18046|14|12|The parameter 'responseType' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18047|27|14|The parameter 'requestHeaders' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18048|12|10|The parameter 'onProgress' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18126|15|6|The parameter 'method' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18127|12|15|The parameter 'withCredentials' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18128|14|12|The parameter 'responseType' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18129|14|8|The parameter 'mimeType' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18130|27|14|The parameter 'requestHeaders' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18132|12|10|The parameter 'onProgress' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18236|15|6|The parameter 'method' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|18236|30|8|The parameter 'sendData' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|20074|15|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|20077|11|8|The parameter 'location' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|20078|11|11|The parameter 'keyLocation' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|21667|14|4|The parameter 'data' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|21668|14|6|The parameter 'origin' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|21669|14|11|The parameter 'lastEventId' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|21670|14|6|The parameter 'source' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|21764|13|10|The parameter 'useCapture' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22344|15|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22357|19|13|The parameter 'relatedTarget' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22652|13|9|The parameter 'childList' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22653|12|10|The parameter 'attributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22654|12|13|The parameter 'characterData' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22655|12|7|The parameter 'subtree' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22656|12|17|The parameter 'attributeOldValue' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|22657|12|21|The parameter 'characterDataOldValue' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|2269|52|7|The parameter 'quality' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|25265|66|7|The parameter 'options' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|27107|53|16|The parameter 'mediaConstraints' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|27149|61|8|The parameter 'selector' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|2845|18|10|The parameter 'sourceRect' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29465|14|3|The parameter 'key' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29466|14|8|The parameter 'oldValue' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29467|14|8|The parameter 'newValue' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29468|14|3|The parameter 'url' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29469|15|11|The parameter 'storageArea' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29835|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29835|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29919|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29919|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29982|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|29982|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|30077|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|30077|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|30306|14|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|30307|14|4|The parameter 'data' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|3035|49|8|The parameter 'maxWidth' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|31175|15|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|3213|27|4|The parameter 'data' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|3233|14|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|3234|14|4|The parameter 'data' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|32354|15|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|3235|14|6|The parameter 'locale' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|32371|19|13|The parameter 'relatedTarget' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|32606|52|7|The parameter 'options' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|34231|25|16|The parameter 'creationCallback' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|39886|35|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|39899|31|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|39940|34|7|The parameter 'tagName' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|39958|30|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|39977|18|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|39979|24|13|The parameter 'uriAttributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40002|18|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40003|24|10|The parameter 'attributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40004|24|13|The parameter 'uriAttributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40020|18|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40021|24|10|The parameter 'attributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40022|24|13|The parameter 'uriAttributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40139|25|15|The parameter 'allowedElements' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40140|24|17|The parameter 'allowedAttributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40141|24|20|The parameter 'allowedUriAttributes' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40667|69|7|The parameter 'options' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40882|17|10|The parameter 'useCapture' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|40895|17|10|The parameter 'useCapture' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|41038|15|4|The parameter 'view' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|41048|19|13|The parameter 'currentTarget' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|4113|63|8|The parameter 'priority' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|41377|36|9|The parameter 'uriPolicy' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|5292|63|8|The parameter 'priority' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/html/dart2js/html_dart2js.dart|8836|60|6|The parameter 'detail' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|234|21|3|The parameter 'key' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|308|61|13|The parameter 'autoIncrement' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|473|12|7|The parameter 'version' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|474|12|15|The parameter 'onUpgradeNeeded' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|475|12|9|The parameter 'onBlocked' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|500|56|9|The parameter 'onBlocked' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|604|22|5|The parameter 'range' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|604|36|9|The parameter 'direction' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|604|52|11|The parameter 'autoAdvance' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|632|22|5|The parameter 'range' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|632|36|9|The parameter 'direction' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|632|52|11|The parameter 'autoAdvance' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|847|22|5|The parameter 'range' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|847|36|9|The parameter 'direction' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|847|52|11|The parameter 'autoAdvance' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|868|49|6|The parameter 'unique' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/indexed_db/dart2js/indexed_db_dart2js.dart|868|62|10|The parameter 'multiEntry' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/svg/dart2js/svg_dart2js.dart|3109|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/svg/dart2js/svg_dart2js.dart|3109|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/svg/dart2js/svg_dart2js.dart|3155|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/svg/dart2js/svg_dart2js.dart|3155|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/svg/dart2js/svg_dart2js.dart|3184|22|9|The parameter 'validator' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|MISSING_DEFAULT_VALUE_FOR_PARAMETER|lib/svg/dart2js/svg_dart2js.dart|3184|51|13|The parameter 'treeSanitizer' can't have a value of 'null' because of its type, so it must either be a required parameter or have a default value.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|16895|18|7|The non-nullable local variable 'watchId' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|16897|13|10|The non-nullable local variable 'controller' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|16899|13|10|The non-nullable local variable 'controller' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|16903|18|7|The non-nullable local variable 'watchId' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|16904|23|7|The non-nullable local variable 'watchId' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|40689|60|4|The non-nullable local variable 'type' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|40691|29|4|The non-nullable local variable 'type' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|40696|58|4|The non-nullable local variable 'type' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|40698|31|4|The non-nullable local variable 'type' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE|lib/html/dart2js/html_dart2js.dart|40707|29|4|The non-nullable local variable 'type' must be assigned before it can be used.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|115|3|11|Non-nullable instance field 'nonce' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12627|3|7|Non-nullable instance field '_defaultSanitizer' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12627|3|7|Non-nullable instance field '_defaultValidator' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12627|3|7|Non-nullable instance field '_parseDocument' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12627|3|7|Non-nullable instance field '_parseRange' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12627|3|7|Non-nullable instance field 'innerText' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|34280|3|18|Non-nullable instance field '_returnValue' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|36952|3|19|Non-nullable instance field '_elementList' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|37563|3|9|Non-nullable instance field '_unit' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|37563|3|9|Non-nullable instance field '_value' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|37923|3|22|Non-nullable instance field '_streamController' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|37923|3|22|Non-nullable instance field '_type' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|37977|3|11|Non-nullable instance field '_controller' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|39520|3|21|Non-nullable instance field '_stream' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|40430|3|21|Non-nullable instance field '_current' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|40456|3|25|Non-nullable instance field '_current' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41028|3|8|Non-nullable instance field '_currentTarget' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41028|3|8|Non-nullable instance field '_parent' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41028|3|8|Non-nullable instance field '_shadowAltKey' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41028|3|8|Non-nullable instance field '_shadowCharCode' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41028|3|8|Non-nullable instance field '_shadowKeyCode' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41218|3|13|Non-nullable instance field '_selector' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|5283|3|23|Non-nullable instance field '_elementCssStyleDeclarationSetIterable' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19472|8|9|Non-nullable instance field 'autofocus' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19474|8|8|Non-nullable instance field 'disabled' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19476|8|11|Non-nullable instance field 'incremental' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19478|8|13|Non-nullable instance field 'indeterminate' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19482|10|4|Non-nullable instance field 'name' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19488|10|5|Non-nullable instance field 'value' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19508|10|12|Non-nullable instance field 'autocomplete' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19510|7|9|Non-nullable instance field 'maxLength' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19512|10|7|Non-nullable instance field 'pattern' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19514|10|11|Non-nullable instance field 'placeholder' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19516|8|8|Non-nullable instance field 'readOnly' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19518|8|8|Non-nullable instance field 'required' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19520|7|4|Non-nullable instance field 'size' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19524|10|18|Non-nullable instance field 'selectionDirection' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19526|7|12|Non-nullable instance field 'selectionEnd' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19528|7|14|Non-nullable instance field 'selectionStart' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19661|10|3|Non-nullable instance field 'max' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19663|10|3|Non-nullable instance field 'min' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19665|10|4|Non-nullable instance field 'step' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/html/dart2js/html_dart2js.dart|19667|7|13|Non-nullable instance field 'valueAsNumber' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_VARIABLE|lib/html/dart2js/html_dart2js.dart|13532|23|14|The non-nullable variable '_parseDocument' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_VARIABLE|lib/html/dart2js/html_dart2js.dart|13533|16|11|The non-nullable variable '_parseRange' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_VARIABLE|lib/html/dart2js/html_dart2js.dart|13534|31|17|The non-nullable variable '_defaultValidator' must be initialized.
+ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_VARIABLE|lib/html/dart2js/html_dart2js.dart|13535|35|17|The non-nullable variable '_defaultSanitizer' must be initialized.
+ERROR|STATIC_TYPE_WARNING|FOR_IN_OF_INVALID_ELEMENT_TYPE|lib/html/dart2js/html_dart2js.dart|37442|26|8|The type 'Iterable<Object>' used in the 'for' loop must implement Iterable with a type argument that can be assigned to 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|11762|22|27|A value of type 'Element?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|11768|22|26|A value of type 'Element?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|12817|25|10|A value of type 'String?' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|12991|19|10|A value of type 'String?' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|13383|14|11|A value of type 'Element?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|13590|29|36|A value of type 'Element' can't be assigned to a variable of type 'BodyElement'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|15453|29|18|A value of type 'EventTarget?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|15454|22|11|A value of type 'EventTarget?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|15458|16|13|A value of type 'Element?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|19154|22|31|A value of type 'Element' can't be assigned to a variable of type 'InputElement'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|20087|23|38|A value of type 'Event' can't be assigned to a variable of type 'KeyboardEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|21690|26|37|A value of type 'Event' can't be assigned to a variable of type 'MessageEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|22361|24|35|A value of type 'Event' can't be assigned to a variable of type 'MouseEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|22543|24|11|A value of type 'EventTarget?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23270|18|16|A value of type 'Node?' can't be assigned to a variable of type 'Node'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23272|24|14|A value of type 'Node?' can't be assigned to a variable of type 'Node'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23367|27|15|A value of type 'Node?' can't be assigned to a variable of type 'Node'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23377|27|15|A value of type 'Node?' can't be assigned to a variable of type 'Node'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23419|20|9|A value of type 'String?' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23863|20|4|A value of type 'Null' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23864|20|4|A value of type 'Null' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23865|20|4|A value of type 'Null' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23866|19|4|A value of type 'Null' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|23867|20|4|A value of type 'Null' can't be assigned to a variable of type 'String'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|29470|22|37|A value of type 'Event' can't be assigned to a variable of type 'StorageEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|30311|19|34|A value of type 'Event' can't be assigned to a variable of type 'TextEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|31182|17|32|A value of type 'Event' can't be assigned to a variable of type 'UIEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|3239|26|41|A value of type 'Event' can't be assigned to a variable of type 'CompositionEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|36328|20|13|A value of type 'Node' can't be assigned to a variable of type '_Attr'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|36341|20|13|A value of type 'Node' can't be assigned to a variable of type '_Attr'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|37843|15|4|A value of type 'Null' can't be assigned to a variable of type 'EventTarget'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|37844|15|4|A value of type 'Null' can't be assigned to a variable of type 'dynamic Function(Event)'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|37856|15|95|A value of type 'void Function(Event)?' can't be assigned to a variable of type 'dynamic Function(Event)'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|39773|26|38|A value of type 'int?' can't be assigned to a variable of type 'int'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|39782|30|4|A value of type 'Null' can't be assigned to a variable of type 'KeyboardEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|40442|16|4|A value of type 'Null' can't be assigned to a variable of type 'T'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|40467|16|4|A value of type 'Null' can't be assigned to a variable of type 'T'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|40844|28|4|A value of type 'Null' can't be assigned to a variable of type 'List<dynamic>'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|41033|22|21|A value of type 'EventTarget?' can't be assigned to a variable of type 'EventTarget'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|41268|29|18|A value of type 'EventTarget' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|41269|22|11|A value of type 'EventTarget' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|41273|16|13|A value of type 'Element?' can't be assigned to a variable of type 'Element'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/html/dart2js/html_dart2js.dart|8837|27|36|A value of type 'Event' can't be assigned to a variable of type 'CustomEvent'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/svg/dart2js/svg_dart2js.dart|3138|31|16|A value of type 'Node' can't be assigned to a variable of type 'SvgElement'.
+ERROR|STATIC_TYPE_WARNING|INVALID_ASSIGNMENT|lib/svg/dart2js/svg_dart2js.dart|3145|31|16|A value of type 'Node' can't be assigned to a variable of type 'SvgElement'.
+ERROR|STATIC_TYPE_WARNING|NON_BOOL_CONDITION|lib/html/dart2js/html_dart2js.dart|15464|7|36|Conditions must have a static type of 'bool'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE_FROM_CLOSURE|lib/html/dart2js/html_dart2js.dart|30825|26|4|The return type 'Null' isn't a 'TouchList', as required by the closure's context.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE_FROM_CLOSURE|lib/svg/dart2js/svg_dart2js.dart|3557|12|2|The return type 'SvgElement' isn't a 'SvgSvgElement', as required by the closure's context.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|10582|12|9|A value of type 'Object?' can't be returned from function 'name' because it has a return type of 'String'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|11395|12|4|A value of type 'Null' can't be returned from method 'intersection' because it has a return type of 'Rectangle<num>'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|11643|12|21|A value of type 'Node' can't be returned from method '[]' because it has a return type of 'Element'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|12174|31|16|A value of type 'Node' can't be returned from method '[]' because it has a return type of 'E'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|12192|18|15|A value of type 'Node' can't be returned from function 'first' because it has a return type of 'E'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|12194|17|14|A value of type 'Node' can't be returned from function 'last' because it has a return type of 'E'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|12196|19|16|A value of type 'Node' can't be returned from function 'single' because it has a return type of 'E'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|12608|12|48|A value of type 'Node' can't be returned from function 'html' because it has a return type of 'Element'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|13180|30|13|A value of type 'String?' can't be returned from function 'namespaceUri' because it has a return type of 'String'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|16127|12|3|A value of type 'Object?' can't be returned from function 'result' because it has a return type of 'Object'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|17681|27|5|A value of type 'HeadElement?' can't be returned from function 'head' because it has a return type of 'HeadElement'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|17685|40|23|A value of type 'String?' can't be returned from function 'preferredStylesheetSet' because it has a return type of 'String'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|17689|39|22|A value of type 'String?' can't be returned from function 'selectedStylesheetSet' because it has a return type of 'String'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|2225|12|7|A value of type 'Object' can't be returned from method 'getContext3d' because it has a return type of 'RenderingContext'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|29386|12|9|A value of type 'String?' can't be returned from method 'putIfAbsent' because it has a return type of 'String'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|29828|12|5|A value of type 'Element' can't be returned from method '_createTBody' because it has a return type of 'TableSectionElement'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|29916|45|18|A value of type 'HtmlElement' can't be returned from method 'insertCell' because it has a return type of 'TableCellElement'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|29979|43|17|A value of type 'HtmlElement' can't be returned from method 'insertRow' because it has a return type of 'TableRowElement'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|35143|12|4|A value of type 'Null' can't be returned from method 'intersection' because it has a return type of 'Rectangle<num>'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|36307|12|9|A value of type 'String?' can't be returned from method 'putIfAbsent' because it has a return type of 'String'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|37188|12|4|A value of type 'Null' can't be returned from method 'intersection' because it has a return type of 'Rectangle<num>'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|37839|27|4|A value of type 'Null' can't be returned from method 'cancel' because it has a return type of 'Future<dynamic>'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|37845|12|4|A value of type 'Null' can't be returned from method 'cancel' because it has a return type of 'Future<dynamic>'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|40338|31|12|A value of type 'Node' can't be returned from method '[]' because it has a return type of 'E'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|40360|28|21|A value of type 'Node' can't be returned from method 'removeAt' because it has a return type of 'E'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|40485|7|68|A value of type 'MemoryInfo?' can't be returned from function 'memory' because it has a return type of 'MemoryInfo'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|40565|27|4|A value of type 'Null' can't be returned from function '_convertNativeToDart_Window' because it has a return type of 'WindowBase'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|40571|12|4|A value of type 'Null' can't be returned from function '_convertNativeToDart_EventTarget' because it has a return type of 'EventTarget'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|40582|12|4|A value of type 'Null' can't be returned from function '_convertNativeToDart_EventTarget' because it has a return type of 'EventTarget'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41149|22|12|A value of type 'WindowBase?' can't be returned from function 'view' because it has a return type of 'Window'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41226|36|21|A value of type 'EventTarget?' can't be returned from function 'currentTarget' because it has a return type of 'EventTarget'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41234|29|14|A value of type 'EventTarget?' can't be returned from function 'target' because it has a return type of 'EventTarget'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41236|27|17|A value of type 'num' can't be returned from function 'timeStamp' because it has a return type of 'double'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41288|26|12|A value of type 'List<EventTarget>' can't be returned from function 'path' because it has a return type of 'List<Node>'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41301|32|4|A value of type 'Null' can't be returned from function '_wrapZone' because it has a return type of 'void Function(T)'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/html/dart2js/html_dart2js.dart|41308|32|4|A value of type 'Null' can't be returned from function '_wrapBinaryZone' because it has a return type of 'void Function(T1, T2)'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/svg/dart2js/svg_dart2js.dart|3107|7|59|A value of type 'Element' can't be returned from function 'tag' because it has a return type of 'SvgElement'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/svg/dart2js/svg_dart2js.dart|33|12|4|A value of type 'Element' can't be returned from method 'createSvgElement_tag' because it has a return type of 'SvgElement'.
+ERROR|STATIC_TYPE_WARNING|RETURN_OF_INVALID_TYPE|lib/web_audio/dart2js/web_audio_dart2js.dart|249|14|59|A value of type 'Future<dynamic>' can't be returned from method 'decodeAudioData' because it has a return type of 'Future<AudioBuffer>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/_internal/js_dev_runtime/private/interceptors.dart|689|52|1|The argument type 'Object?' can't be assigned to the parameter type 'Comparable<dynamic>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/_internal/js_dev_runtime/private/interceptors.dart|689|55|1|The argument type 'Object?' can't be assigned to the parameter type 'Comparable<dynamic>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|13066|60|4|The argument type 'Null' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|13498|40|24|The argument type 'Element?' can't be assigned to the parameter type 'Element'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|16933|48|13|The argument type 'void Function(PositionError)?' can't be assigned to the parameter type 'void Function(PositionError)'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|16960|50|13|The argument type 'void Function(PositionError)?' can't be assigned to the parameter type 'void Function(PositionError)'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|18015|13|32|The argument type 'bool?' can't be assigned to the parameter type 'bool'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|18015|47|22|The argument type 'void Function(ProgressEvent)?' can't be assigned to the parameter type 'void Function(ProgressEvent)'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|18254|30|8|The argument type 'Object?' can't be assigned to the parameter type 'FutureOr<String>?'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|22537|24|1|The argument type 'Object?' can't be assigned to the parameter type 'num'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|22537|27|1|The argument type 'Object?' can't be assigned to the parameter type 'num'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|23208|24|26|The argument type 'Node?' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|23400|27|26|The argument type 'Node?' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|23411|20|10|The argument type 'Node?' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|23728|59|4|The argument type 'Null' can't be assigned to the parameter type 'NodeFilter'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|26570|37|7|The argument type 'num' can't be assigned to the parameter type 'int'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|26570|46|7|The argument type 'num' can't be assigned to the parameter type 'int'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|29376|45|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|29391|17|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|29402|14|9|The argument type 'String?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|31084|57|4|The argument type 'Null' can't be assigned to the parameter type 'NodeFilter'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|34222|13|3|The argument type 'num' can't be assigned to the parameter type 'int'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|34222|18|3|The argument type 'num' can't be assigned to the parameter type 'int'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36319|14|5|The argument type 'String?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36374|35|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36378|34|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36422|49|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36426|48|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36485|66|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36487|57|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|36496|59|3|The argument type 'Object?' can't be assigned to the parameter type 'String'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|37348|32|5|The argument type 'Object?' can't be assigned to the parameter type 'Object'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|37368|26|8|The argument type 'Iterable<Object?>' can't be assigned to the parameter type 'Iterable<Object>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|37736|40|6|The argument type 'void Function(T)?' can't be assigned to the parameter type 'void Function(T)'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|39946|34|4|The argument type 'Null' can't be assigned to the parameter type 'UriPolicy'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|39990|36|5|The argument type 'Iterable<String>?' can't be assigned to the parameter type 'Iterable<String>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|39990|43|8|The argument type 'Iterable<String>?' can't be assigned to the parameter type 'Iterable<String>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40016|40|5|The argument type 'Iterable<String>?' can't be assigned to the parameter type 'Iterable<String>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40016|47|8|The argument type 'Iterable<String>?' can't be assigned to the parameter type 'Iterable<String>'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40112|37|4|The argument type 'Null' can't be assigned to the parameter type 'UriPolicy'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40233|15|4|The argument type 'Null' can't be assigned to the parameter type 'UriPolicy'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40350|44|1|The argument type 'Node' can't be assigned to the parameter type 'E'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40350|47|1|The argument type 'Node' can't be assigned to the parameter type 'E'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40353|65|7|The argument type 'Object' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|40356|25|7|The argument type 'Object' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|41540|16|4|The argument type 'Null' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|9520|41|15|The argument type 'void Function(Entry)?' can't be assigned to the parameter type 'void Function(Entry)'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|9564|36|15|The argument type 'void Function(Entry)?' can't be assigned to the parameter type 'void Function(Entry)'.
+ERROR|STATIC_WARNING|ARGUMENT_TYPE_NOT_ASSIGNABLE|lib/svg/dart2js/svg_dart2js.dart|3172|26|15|The argument type 'Node?' can't be assigned to the parameter type 'Node'.
+ERROR|STATIC_WARNING|FIELD_INITIALIZER_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|11629|26|17|The initializer type 'List<Node>' can't be assigned to the field type 'HtmlCollection'.
+ERROR|STATIC_WARNING|FIELD_INITIALIZER_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|37832|19|95|The initializer type 'void Function(Event)?' can't be assigned to the field type 'dynamic Function(Event)'.
+ERROR|STATIC_WARNING|FIELD_INITIALIZER_NOT_ASSIGNABLE|lib/html/dart2js/html_dart2js.dart|39513|19|4|The initializer type 'Null' can't be assigned to the field type 'EventTarget'.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|12627|3|7|All final variables must be initialized, but '_firstElementChild', '_lastElementChild', and 8 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|15934|3|15|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|18791|3|13|All final variables must be initialized, but '_get_contentWindow' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|19173|3|12|All final variables must be initialized, but '_get_valueAsDate', 'form', and 1 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|1919|3|13|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|20284|3|12|All final variables must be initialized, but 'control' and 'form' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|20317|3|13|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|20367|3|11|All final variables must be initialized, but 'import' and 'sheet' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|20686|3|12|All final variables must be initialized, but 'error' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|23341|3|4|All final variables must be initialized, but 'childNodes', 'firstChild', and 7 others are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|24089|3|13|All final variables must be initialized, but '_get_contentWindow' and 'form' are not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|24597|3|13|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|24668|3|13|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|27859|3|13|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|29564|3|12|All final variables must be initialized, but 'sheet' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|30135|3|15|All final variables must be initialized, but 'form' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/html/dart2js/html_dart2js.dart|41028|3|8|All final variables must be initialized, but 'sourceCapabilities' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3043|3|12|All final variables must be initialized, but 'sheet' is not.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED_CONSTRUCTOR|lib/svg/dart2js/svg_dart2js.dart|3392|3|10|All final variables must be initialized, but 'ownerSvgElement' and 'viewportElement' are not.
+ERROR|STATIC_WARNING|GETTER_NOT_SUBTYPE_SETTER_TYPES|lib/html/dart2js/html_dart2js.dart|33119|19|6|The return type of getter 'opener' is 'WindowBase?' which isn't a subtype of the type 'Window' of its setter 'opener'.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/html/dart2js/html_dart2js.dart|13342|9|15|The expression is nullable and must be null-checked before it can be used.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/html/dart2js/html_dart2js.dart|13352|9|15|The expression is nullable and must be null-checked before it can be used.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/html/dart2js/html_dart2js.dart|23368|7|10|The expression is nullable and must be null-checked before it can be used.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/html/dart2js/html_dart2js.dart|34260|9|24|The expression is nullable and must be null-checked before it can be used.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/html/dart2js/html_dart2js.dart|34274|9|24|The expression is nullable and must be null-checked before it can be used.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/html/dart2js/html_dart2js.dart|40350|36|7|The expression is nullable and must be null-checked before it can be used.
+ERROR|STATIC_WARNING|UNCHECKED_USE_OF_NULLABLE_VALUE|lib/svg/dart2js/svg_dart2js.dart|3116|26|14|The expression is nullable and must be null-checked before it can be used.
+WARNING|STATIC_WARNING|INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED|lib/html/html_common/html_common_dart2js.dart|224|24|19|Parameters can't override default values, this method overrides 'Iterable.toList' where 'growable' has a different value.
+WARNING|STATIC_WARNING|INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED|lib/html/html_common/html_common_dart2js.dart|224|24|19|Parameters can't override default values, this method overrides 'SetMixin.toList' where 'growable' has a different value.
+WARNING|STATIC_WARNING|INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL|lib/html/html_common/html_common_dart2js.dart|90|16|21|Parameters can't override default values, this method overrides 'Iterable.join' where this positional parameter has a different value.
+WARNING|STATIC_WARNING|INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL|lib/html/html_common/html_common_dart2js.dart|90|16|21|Parameters can't override default values, this method overrides 'SetMixin.join' where this positional parameter has a different value.
+WARNING|STATIC_WARNING|INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL|lib/html/html_common/html_common_dart2js.dart|962|8|17|Parameters can't override default values, this method overrides 'List.setRange' where this positional parameter has a different value.
+WARNING|STATIC_WARNING|INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL|lib/html/html_common/html_common_dart2js.dart|962|8|17|Parameters can't override default values, this method overrides 'ListMixin.setRange' where this positional parameter has a different value.
+WARNING|STATIC_WARNING|UNNECESSARY_NULL_AWARE_CALL|lib/html/dart2js/html_dart2js.dart|39984|9|2|The target expression can't be null, and so '?.' isn't necessary.
+WARNING|STATIC_WARNING|UNNECESSARY_NULL_AWARE_CALL|lib/html/dart2js/html_dart2js.dart|40008|9|2|The target expression can't be null, and so '?.' isn't necessary.
+WARNING|STATIC_WARNING|UNNECESSARY_NULL_AWARE_CALL|lib/html/dart2js/html_dart2js.dart|40010|9|2|The target expression can't be null, and so '?.' isn't necessary.
diff --git a/pkg/dev_compiler/tool/patch_sdk.dart b/pkg/dev_compiler/tool/patch_sdk.dart
index 755de10..3dcb32b 100755
--- a/pkg/dev_compiler/tool/patch_sdk.dart
+++ b/pkg/dev_compiler/tool/patch_sdk.dart
@@ -180,7 +180,7 @@
 }
 
 /// Merge `@patch` declarations into `external` declarations.
-class PatchApplier extends GeneralizingAstVisitor {
+class PatchApplier extends GeneralizingAstVisitor<void> {
   final StringEditBuffer edits;
   final PatchFinder patch;
 
@@ -190,7 +190,7 @@
   PatchApplier(this.edits, this.patch);
 
   @override
-  visitCompilationUnit(CompilationUnit node) {
+  void visitCompilationUnit(CompilationUnit node) {
     super.visitCompilationUnit(node);
     if (_isLibrary) _mergeUnpatched(node);
   }
@@ -227,18 +227,18 @@
   }
 
   @override
-  visitPartOfDirective(PartOfDirective node) {
+  void visitPartOfDirective(PartOfDirective node) {
     _isLibrary = false;
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     _maybePatch(node);
   }
 
   /// Merge patches and extensions into the class
   @override
-  visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(ClassDeclaration node) {
     node.members.forEach(_maybePatch);
 
     var mergeMembers = patch.mergeMembers[_qualifiedName(node)];
@@ -294,7 +294,7 @@
   }
 }
 
-class PatchFinder extends GeneralizingAstVisitor {
+class PatchFinder extends GeneralizingAstVisitor<void> {
   final String contents;
   final CompilationUnit unit;
 
@@ -309,12 +309,12 @@
   }
 
   @override
-  visitCompilationUnitMember(CompilationUnitMember node) {
+  void visitCompilationUnitMember(CompilationUnitMember node) {
     mergeDeclarations.add(node);
   }
 
   @override
-  visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(ClassDeclaration node) {
     if (_isPatch(node)) {
       var members = <ClassMember>[];
       for (var member in node.members) {
@@ -333,7 +333,7 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     if (_isPatch(node)) {
       patches[_qualifiedName(node)] = node;
     } else {
@@ -342,7 +342,7 @@
   }
 
   @override
-  visitFunctionBody(node) {} // skip method bodies
+  void visitFunctionBody(node) {} // skip method bodies
 }
 
 String _qualifiedName(Declaration node) {
diff --git a/pkg/dev_compiler/web/source_map_stack_trace.dart b/pkg/dev_compiler/web/source_map_stack_trace.dart
index 817adc0..4617b80 100644
--- a/pkg/dev_compiler/web/source_map_stack_trace.dart
+++ b/pkg/dev_compiler/web/source_map_stack_trace.dart
@@ -29,7 +29,7 @@
     if (frame.line == null) return null;
 
     // If there's no column, try using the first column of the line.
-    var column = frame.column == null ? 0 : frame.column;
+    var column = frame.column ?? 0;
 
     // Subtract 1 because stack traces use 1-indexed lines and columns and
     // source maps uses 0-indexed.
diff --git a/pkg/dev_compiler/web/stack_trace_mapper.dart b/pkg/dev_compiler/web/stack_trace_mapper.dart
index fa74c34..e10e6f3 100644
--- a/pkg/dev_compiler/web/stack_trace_mapper.dart
+++ b/pkg/dev_compiler/web/stack_trace_mapper.dart
@@ -60,8 +60,8 @@
 /// The unparsed data for the source maps must still be loaded before
 /// LazyMapping is used.
 class LazyMapping extends Mapping {
-  MappingBundle _bundle = MappingBundle();
-  SourceMapProvider _provider;
+  final MappingBundle _bundle = MappingBundle();
+  final SourceMapProvider _provider;
 
   LazyMapping(this._provider);
 
diff --git a/pkg/front_end/lib/src/base/libraries_specification.dart b/pkg/front_end/lib/src/base/libraries_specification.dart
index 9dc212a..52a18dc 100644
--- a/pkg/front_end/lib/src/base/libraries_specification.dart
+++ b/pkg/front_end/lib/src/base/libraries_specification.dart
@@ -256,6 +256,9 @@
 
   const LibraryInfo(this.name, this.uri, this.patches,
       {this.isSupported: true});
+
+  /// The import uri for the defined library.
+  Uri get importUri => Uri.parse('dart:${name}');
 }
 
 class LibrariesSpecificationException {
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 42b36d0..6dd7e15 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -210,9 +210,6 @@
   bool hasUserDefinedNoSuchMethod(
       Class klass, ClassHierarchy hierarchy, Class objectClass);
 
-  void transformProcedureToNoSuchMethodForwarder(
-      Member noSuchMethodInterface, KernelTarget target, Procedure procedure);
-
   /// Returns whether a covariant parameter was seen and more methods thus have
   /// to be checked.
   bool checkMethodOverride(Types types, Procedure declaredMember,
@@ -1006,7 +1003,6 @@
     return noSuchMethod != null && noSuchMethod.enclosingClass != objectClass;
   }
 
-  @override
   void transformProcedureToNoSuchMethodForwarder(
       Member noSuchMethodInterface, KernelTarget target, Procedure procedure) {
     String prefix =
@@ -1024,6 +1020,8 @@
     if (procedure.function.returnType is! VoidType) {
       result = new AsExpression(result, procedure.function.returnType)
         ..isTypeError = true
+        ..isForDynamic = true
+        ..isForNonNullableByDefault = library.isNonNullableByDefault
         ..fileOffset = procedure.fileOffset;
     }
     procedure.function.body = new ReturnStatement(result)
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index d9ea01c..571ef94 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -375,11 +375,9 @@
     if (fieldType is ImplicitFieldType) {
       // `fieldType` may have changed if a circularity was detected when
       // [inferredType] was computed.
-      if (library.loader.target.enableNonNullable) {
-        if (!library.isNonNullableByDefault) {
-          inferredType = legacyErasure(
-              library.loader.typeInferenceEngine.coreTypes, inferredType);
-        }
+      if (!library.isNonNullableByDefault) {
+        inferredType = legacyErasure(
+            library.loader.typeInferenceEngine.coreTypes, inferredType);
       }
       fieldType = inferredType;
 
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 5c024a7..5f0aff0 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -143,6 +143,16 @@
   String get fullNameForErrors => name;
 
   @override
+  StringBuffer printOn(StringBuffer buffer) {
+    if (isClassMember) {
+      buffer.write(classBuilder.name);
+      buffer.write('.');
+    }
+    buffer.write(name);
+    return buffer;
+  }
+
+  @override
   ClassBuilder get classBuilder => parent is ClassBuilder ? parent : null;
 }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 94edb1e..28d20c0 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -41,7 +41,7 @@
 class TypeAliasBuilder extends TypeDeclarationBuilderImpl {
   final TypeBuilder type;
 
-  final List<TypeVariableBuilder> typeVariables;
+  final List<TypeVariableBuilder> _typeVariables;
 
   /// The [Typedef] built by this builder.
   final Typedef typedef;
@@ -49,12 +49,12 @@
   DartType thisType;
 
   TypeAliasBuilder(List<MetadataBuilder> metadata, String name,
-      this.typeVariables, this.type, LibraryBuilder parent, int charOffset,
+      this._typeVariables, this.type, LibraryBuilder parent, int charOffset,
       {Typedef typedef, Typedef referenceFrom})
       : typedef = typedef ??
             (new Typedef(name, null,
                 typeParameters: TypeVariableBuilder.typeParametersFromBuilders(
-                    typeVariables),
+                    _typeVariables),
                 fileUri: parent.library.fileUri,
                 reference: referenceFrom?.reference)
               ..fileOffset = charOffset),
@@ -64,6 +64,11 @@
 
   LibraryBuilder get parent => super.parent;
 
+  // TODO(CFE TEAM): Some of this is a temporary workaround.
+  List<TypeVariableBuilder> get typeVariables => _typeVariables;
+  int varianceAt(int index) => typeVariables[index].parameter.variance;
+  bool get fromDill => false;
+
   Typedef build(SourceLibraryBuilder libraryBuilder) {
     typedef..type ??= buildThisType(libraryBuilder);
 
diff --git a/pkg/front_end/lib/src/fasta/builder_graph.dart b/pkg/front_end/lib/src/fasta/builder_graph.dart
index 48cb623..f917b93 100644
--- a/pkg/front_end/lib/src/fasta/builder_graph.dart
+++ b/pkg/front_end/lib/src/fasta/builder_graph.dart
@@ -18,6 +18,8 @@
 
 import 'source/source_library_builder.dart' show SourceLibraryBuilder;
 
+import 'incremental_compiler.dart' show getPartUri;
+
 class BuilderGraph implements Graph<Uri> {
   final Map<Uri, LibraryBuilder> builders;
 
@@ -63,7 +65,7 @@
 
       // Parts
       for (LibraryPart part in library.library.parts) {
-        Uri uri = library.uri.resolve(part.partUri);
+        Uri uri = getPartUri(library.uri, part);
         if (builders.containsKey(uri)) {
           yield uri;
         }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index 18cdf42..fa463de 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -9,6 +9,7 @@
 import 'package:kernel/ast.dart'
     show
         Class,
+        ConstantExpression,
         DartType,
         DynamicType,
         Extension,
@@ -23,12 +24,14 @@
         Procedure,
         Reference,
         StaticGet,
+        StringConstant,
         StringLiteral,
         Typedef;
 
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/dynamic_type_builder.dart';
+import '../builder/extension_builder.dart';
 import '../builder/never_type_builder.dart';
 import '../builder/invalid_type_declaration_builder.dart';
 import '../builder/library_builder.dart';
@@ -90,6 +93,7 @@
   // state field.
   bool isReadyToBuild = false;
   bool isReadyToFinalizeExports = false;
+  bool suppressFinalizationErrors = false;
   bool isBuilt = false;
   bool isBuiltAndMarked = false;
 
@@ -182,8 +186,16 @@
     String name = member.name.name;
     if (name == "_exports#") {
       Field field = member;
-      StringLiteral string = field.initializer;
-      Map<dynamic, dynamic> json = jsonDecode(string.value);
+      String stringValue;
+      if (field.initializer is ConstantExpression) {
+        ConstantExpression constantExpression = field.initializer;
+        StringConstant string = constantExpression.constant;
+        stringValue = string.value;
+      } else {
+        StringLiteral string = field.initializer;
+        stringValue = string.value;
+      }
+      Map<dynamic, dynamic> json = jsonDecode(stringValue);
       unserializableExports =
           json != null ? new Map<String, String>.from(json) : null;
     } else {
@@ -200,6 +212,9 @@
     } else {
       scopeBuilder.addMember(name, declaration);
     }
+    if (declaration.isExtension) {
+      scopeBuilder.addExtension(declaration);
+    }
     if (!name.startsWith("_")) {
       if (isSetter) {
         exportScopeBuilder.addSetter(name, declaration);
@@ -250,8 +265,9 @@
     isReadyToBuild = true;
   }
 
-  void markAsReadyToFinalizeExports() {
+  void markAsReadyToFinalizeExports({bool suppressFinalizationErrors: false}) {
     isReadyToFinalizeExports = true;
+    this.suppressFinalizationErrors = suppressFinalizationErrors;
   }
 
   void finalizeExports() {
@@ -269,7 +285,9 @@
           Message message = messageText == null
               ? templateTypeNotFound.withArguments(name)
               : templateUnspecified.withArguments(messageText);
-          addProblem(message, -1, noLength, null);
+          if (!suppressFinalizationErrors) {
+            addProblem(message, -1, noLength, null);
+          }
           declaration = new InvalidTypeDeclarationBuilder(
               name, message.withoutLocation());
       }
@@ -323,9 +341,15 @@
             -1,
             fileUri);
       }
-      assert((declaration is ClassBuilder && node == declaration.cls) ||
-          (declaration is TypeAliasBuilder && node == declaration.typedef) ||
-          (declaration is MemberBuilder && node == declaration.member));
+      assert(
+          (declaration is ClassBuilder && node == declaration.cls) ||
+              (declaration is TypeAliasBuilder &&
+                  node == declaration.typedef) ||
+              (declaration is MemberBuilder && node == declaration.member) ||
+              (declaration is ExtensionBuilder &&
+                  node == declaration.extension),
+          "Unexpected declaration ${declaration} (${declaration.runtimeType}) "
+          "for node ${node} (${node.runtimeType}).");
     }
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index 0e2d670..3d91dbd 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -58,6 +58,24 @@
     return result;
   }
 
+  /// Append single compiled library.
+  ///
+  /// Note that as this only takes a library, no new sources is added to the
+  /// uriToSource map.
+  DillLibraryBuilder appendLibrary(Library library) {
+    // Add to list of libraries in the loader, used for e.g. linking.
+    libraries.add(library);
+
+    // Weird interaction begins.
+    DillTarget target = this.target;
+    // Create dill library builder (adds it to a map where it's fetched
+    // again momentarily).
+    target.addLibrary(library);
+    // Set up the dill library builder (fetch it from the map again, add it to
+    // another map and setup some auxiliary things).
+    return read(library.importUri, -1, fileUri: library.fileUri);
+  }
+
   Future<Null> buildOutline(DillLibraryBuilder builder) async {
     if (builder.library == null) {
       unhandled("null", "builder.library", 0, builder.fileUri);
@@ -69,10 +87,11 @@
     return buildOutline(builder);
   }
 
-  void finalizeExports() {
+  void finalizeExports({bool suppressFinalizationErrors: false}) {
     builders.forEach((Uri uri, LibraryBuilder builder) {
       DillLibraryBuilder library = builder;
-      library.markAsReadyToFinalizeExports();
+      library.markAsReadyToFinalizeExports(
+          suppressFinalizationErrors: suppressFinalizationErrors);
     });
   }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_target.dart b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
index 7f8ddd0..2a60636 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_target.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
@@ -52,10 +52,11 @@
   }
 
   @override
-  Future<Null> buildOutlines() async {
+  Future<Null> buildOutlines({bool suppressFinalizationErrors: false}) async {
     if (loader.libraries.isNotEmpty) {
       await loader.buildOutlines();
-      loader.finalizeExports();
+      loader.finalizeExports(
+          suppressFinalizationErrors: suppressFinalizationErrors);
     }
     isLoaded = true;
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index 618d677..5849465 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -11,6 +11,7 @@
 import '../builder/metadata_builder.dart';
 import '../builder/type_alias_builder.dart';
 import '../builder/type_builder.dart';
+import '../builder/type_variable_builder.dart';
 
 import '../problems.dart' show unimplemented;
 
@@ -25,6 +26,16 @@
     return unimplemented("metadata", -1, null);
   }
 
+  List<TypeVariableBuilder> get typeVariables {
+    return unimplemented("typeVariables", -1, null);
+  }
+
+  int varianceAt(int index) {
+    return typedef.typeParameters[index].variance;
+  }
+
+  bool get fromDill => true;
+
   @override
   int get typeVariablesCount => typedef.typeParameters.length;
 
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index d2a091b..dad13e9 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -40,7 +40,10 @@
 
 import 'package:kernel/kernel.dart' as kernel show Combinator;
 
-import '../api_prototype/file_system.dart' show FileSystemEntity;
+import 'package:kernel/target/changed_structure_notifier.dart'
+    show ChangedStructureNotifier;
+
+import '../api_prototype/file_system.dart' show FileSystem, FileSystemEntity;
 
 import '../api_prototype/incremental_kernel_generator.dart'
     show IncrementalKernelGenerator, isLegalIdentifier;
@@ -142,10 +145,11 @@
   static final Uri debugExprUri =
       new Uri(scheme: "org-dartlang-debug", path: "synthetic_debug_expression");
 
-  KernelTarget userCode;
+  IncrementalKernelTarget userCode;
+  Set<Library> previousSourceBuilders;
 
   IncrementalCompiler.fromComponent(
-      this.context, Component this.componentToInitializeFrom,
+      this.context, this.componentToInitializeFrom,
       [bool outlineOnly, IncrementalSerializer incrementalSerializer])
       : ticker = context.options.ticker,
         initializeFromDillUri = null,
@@ -231,6 +235,10 @@
             await userCode.buildComponent(verify: c.options.verify);
       }
       hierarchy ??= userCode.loader.hierarchy;
+      if (hierarchy != null && userCode.classesChangedStructure != null) {
+        hierarchy.applyMemberChanges(userCode.classesChangedStructure,
+            findDescendants: true);
+      }
       recordNonFullComponentForTesting(componentWithDill);
 
       // Perform actual dill usage tracking.
@@ -269,6 +277,8 @@
       if (componentWithDill == null) {
         userCode.loader.builders.clear();
         userCode = userCodeOld;
+      } else {
+        previousSourceBuilders = await convertSourceLibraryBuildersToDill();
       }
 
       // Output result.
@@ -282,6 +292,35 @@
     });
   }
 
+  /// Convert every SourceLibraryBuilder to a DillLibraryBuilder.
+  /// As we always do this, this will only be the new ones.
+  ///
+  /// Returns the set of Libraries that now has new (dill) builders.
+  Future<Set<Library>> convertSourceLibraryBuildersToDill() async {
+    bool changed = false;
+    Set<Library> newDillLibraryBuilders = new Set<Library>();
+    userBuilders ??= <Uri, LibraryBuilder>{};
+    for (MapEntry<Uri, LibraryBuilder> entry
+        in userCode.loader.builders.entries) {
+      if (entry.value is SourceLibraryBuilder) {
+        SourceLibraryBuilder builder = entry.value;
+        DillLibraryBuilder dillBuilder =
+            dillLoadedData.loader.appendLibrary(builder.library);
+        userCode.loader.builders[entry.key] = dillBuilder;
+        userBuilders[entry.key] = dillBuilder;
+        newDillLibraryBuilders.add(builder.library);
+        changed = true;
+      }
+    }
+    if (changed) {
+      // We suppress finalization errors because they have already been
+      // reported.
+      await dillLoadedData.buildOutlines(suppressFinalizationErrors: true);
+    }
+    if (userBuilders.isEmpty) userBuilders = null;
+    return newDillLibraryBuilders;
+  }
+
   /// Compute which libraries to output and which (previous) errors/warnings we
   /// have to reissue. In the process do some cleanup too.
   List<Library> calculateOutputLibrariesAndIssueLibraryProblems(
@@ -432,7 +471,7 @@
           // overwrite correctly, but the library itself should  not be
           // over written as the library for parts are temporary "fake"
           // libraries.
-          Uri partUri = library.uri.resolve(part.partUri);
+          Uri partUri = getPartUri(library.uri, part);
           Uri fileUri =
               getPartFileUri(library.library.fileUri, part, uriTranslator);
           LibraryBuilder newPartBuilder = userCode.loader.read(partUri, -1,
@@ -532,7 +571,7 @@
       List<LibraryBuilder> reusedLibraries,
       ExperimentalInvalidation experimentalInvalidation,
       Uri firstEntryPoint) {
-    userCode = new KernelTarget(
+    userCode = new IncrementalKernelTarget(
         new HybridFileSystem(
             new MemoryFileSystem(
                 new Uri(scheme: "org-dartlang-debug", path: "/")),
@@ -690,10 +729,7 @@
     }
 
     if (removedDillBuilders) {
-      dillLoadedData.loader.libraries.clear();
-      for (LibraryBuilder builder in dillLoadedData.loader.builders.values) {
-        dillLoadedData.loader.libraries.add(builder.library);
-      }
+      makeDillLoaderLibrariesUpToDateWithBuildersMap();
     }
   }
 
@@ -877,7 +913,9 @@
       }
       appendLibraries(data, bytesLength);
 
-      await dillLoadedData.buildOutlines();
+      // We suppress finalization errors because they will reported via
+      // problemsAsJson fields (with better precision).
+      await dillLoadedData.buildOutlines(suppressFinalizationErrors: true);
       userBuilders = <Uri, LibraryBuilder>{};
       platformBuilders = <LibraryBuilder>[];
       dillLoadedData.loader.builders.forEach((uri, builder) {
@@ -972,17 +1010,23 @@
       // used class.
       for (Class c in classes) {
         Library library = c.enclosingLibrary;
-        // Only add if loaded from a dill file.
-        if (dillLoadedData.loader.builders.containsKey(library.importUri)) {
+        // Only add if loaded from a dill file (and wasn't a 'dill' that was
+        // converted from source builders to dill builders).
+        if (dillLoadedData.loader.builders.containsKey(library.importUri) &&
+            (previousSourceBuilders == null ||
+                !previousSourceBuilders.contains(library))) {
           neededDillLibraries.add(library);
         }
       }
     } else {
       // Cannot track in other kernel class hierarchies or
-      // if all bets are off: Add everything.
+      // if all bets are off: Add everything (except for the libraries we just
+      // converted from source builders to dill builders).
       neededDillLibraries = new Set<Library>();
       for (LibraryBuilder builder in dillLoadedData.loader.builders.values) {
-        if (builder is DillLibraryBuilder) {
+        if (builder is DillLibraryBuilder &&
+            (previousSourceBuilders == null ||
+                !previousSourceBuilders.contains(builder.library))) {
           neededDillLibraries.add(builder.library);
         }
       }
@@ -1026,7 +1070,9 @@
         }
       }
       if (loadedAnything) {
-        await dillLoadedData.buildOutlines();
+        // We suppress finalization errors because they will reported via
+        // problemsAsJson fields (with better precision).
+        await dillLoadedData.buildOutlines(suppressFinalizationErrors: true);
         userBuilders = <Uri, LibraryBuilder>{};
         platformBuilders = <LibraryBuilder>[];
         dillLoadedData.loader.builders.forEach((uri, builder) {
@@ -1102,14 +1148,7 @@
   /// Internal method.
   Uri getPartFileUri(
       Uri parentFileUri, LibraryPart part, UriTranslator uriTranslator) {
-    Uri fileUri;
-    try {
-      fileUri = parentFileUri.resolve(part.partUri);
-    } on FormatException {
-      return new Uri(
-          scheme: SourceLibraryBuilder.MALFORMED_URI_SCHEME,
-          query: Uri.encodeQueryComponent(part.partUri));
-    }
+    Uri fileUri = getPartUri(parentFileUri, part);
     if (fileUri.scheme == "package") {
       // Part was specified via package URI and the resolve above thus
       // did not go as expected. Translate the package URI to get the
@@ -1184,13 +1223,16 @@
     }
 
     List<Library> removedLibraries = new List<Library>();
+    bool removedDillBuilders = false;
     for (Uri uri in potentiallyReferencedLibraries.keys) {
       if (uri.scheme == "package") continue;
       LibraryBuilder builder = userCode.loader.builders.remove(uri);
       if (builder != null) {
         Library lib = builder.library;
         removedLibraries.add(lib);
-        dillLoadedData.loader.builders.remove(uri);
+        if (dillLoadedData.loader.builders.remove(uri) != null) {
+          removedDillBuilders = true;
+        }
         cleanupSourcesForBuilder(builder, uriTranslator,
             CompilerContext.current.uriToSource, uriToSource, partsUsed);
         userBuilders?.remove(uri);
@@ -1202,10 +1244,25 @@
       }
     }
     hierarchy?.applyTreeChanges(removedLibraries, const []);
+    if (removedDillBuilders) {
+      makeDillLoaderLibrariesUpToDateWithBuildersMap();
+    }
 
     return result;
   }
 
+  /// If builders was removed from the [dillLoadedData.loader.builders] map
+  /// the loaders [libraries] list has to be updated too, or those libraries
+  /// will still hang around and be linked into the Component created internally
+  /// in the compilation process.
+  /// This method syncs the [libraries] list with the data in [builders].
+  void makeDillLoaderLibrariesUpToDateWithBuildersMap() {
+    dillLoadedData.loader.libraries.clear();
+    for (LibraryBuilder builder in dillLoadedData.loader.builders.values) {
+      dillLoadedData.loader.libraries.add(builder.library);
+    }
+  }
+
   /// Internal method.
   ///
   /// [partsUsed] indicates part uris that are used by (other/alive) libraries.
@@ -1481,8 +1538,13 @@
   /// Internal method.
   ReusageResult computeReusedLibraries(
       Set<Uri> invalidatedUris, UriTranslator uriTranslator) {
+    Set<Uri> seenUris = new Set<Uri>();
     List<LibraryBuilder> reusedLibraries = <LibraryBuilder>[];
-    reusedLibraries.addAll(platformBuilders);
+    for (int i = 0; i < platformBuilders.length; i++) {
+      LibraryBuilder builder = platformBuilders[i];
+      if (!seenUris.add(builder.uri)) continue;
+      reusedLibraries.add(builder);
+    }
     if (userCode == null && userBuilders == null) {
       return new ReusageResult({}, [], false, reusedLibraries);
     }
@@ -1525,7 +1587,9 @@
 
     addBuilderAndInvalidateUris(Uri uri, LibraryBuilder libraryBuilder) {
       if (uri.scheme == "dart" && !libraryBuilder.isSynthetic) {
-        reusedLibraries.add(libraryBuilder);
+        if (seenUris.add(libraryBuilder.uri)) {
+          reusedLibraries.add(libraryBuilder);
+        }
         return;
       }
       builders[uri] = libraryBuilder;
@@ -1541,7 +1605,7 @@
         }
       } else if (libraryBuilder is DillLibraryBuilder) {
         for (LibraryPart part in libraryBuilder.library.parts) {
-          Uri partUri = libraryBuilder.uri.resolve(part.partUri);
+          Uri partUri = getPartUri(libraryBuilder.uri, part);
           Uri fileUri = getPartFileUri(
               libraryBuilder.library.fileUri, part, uriTranslator);
 
@@ -1607,7 +1671,6 @@
 
     // Builders contain mappings from part uri to builder, meaning the same
     // builder can exist multiple times in the values list.
-    Set<Uri> seenUris = new Set<Uri>();
     for (LibraryBuilder builder in builders.values) {
       if (builder.isPart) continue;
       // TODO(jensj/ahe): This line can probably go away once
@@ -1631,6 +1694,11 @@
     if (userCode != null) {
       Set<Uri> uris = new Set<Uri>.from(userCode.loader.builders.keys);
       uris.removeAll(dillLoadedData.loader.builders.keys);
+      if (previousSourceBuilders != null) {
+        for (Library library in previousSourceBuilders) {
+          uris.add(library.importUri);
+        }
+      }
       invalidatedUris.addAll(uris);
     }
   }
@@ -1653,6 +1721,18 @@
   void recordTemporaryFileForTesting(Uri uri) {}
 }
 
+/// Translate a parts "partUri" to an actual uri with handling of invalid uris.
+Uri getPartUri(Uri parentUri, LibraryPart part) {
+  try {
+    return parentUri.resolve(part.partUri);
+  } on FormatException {
+    // This is also done in [SourceLibraryBuilder.resolve]
+    return new Uri(
+        scheme: SourceLibraryBuilder.MALFORMED_URI_SCHEME,
+        query: Uri.encodeQueryComponent(part.partUri));
+  }
+}
+
 class PackageChangedError {
   const PackageChangedError();
 }
@@ -1696,3 +1776,19 @@
         assert(originalNotReusedLibraries != null),
         assert(missingSources != null);
 }
+
+class IncrementalKernelTarget extends KernelTarget
+    implements ChangedStructureNotifier {
+  Set<Class> classesChangedStructure;
+  IncrementalKernelTarget(FileSystem fileSystem, bool includeComments,
+      DillTarget dillTarget, UriTranslator uriTranslator)
+      : super(fileSystem, includeComments, dillTarget, uriTranslator);
+
+  ChangedStructureNotifier get changedStructureNotifier => this;
+
+  @override
+  void forClass(Class c) {
+    classesChangedStructure ??= new Set<Class>();
+    classesChangedStructure.add(c);
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 7aba059..39f4308 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -3174,8 +3174,9 @@
     libraryBuilder.checkBoundsInType(
         type, typeEnvironment, uri, operator.charOffset);
     Expression expression = popForValue();
-    Expression asExpression =
-        forest.createAsExpression(offsetForToken(operator), expression, type);
+    Expression asExpression = forest.createAsExpression(
+        offsetForToken(operator), expression, type,
+        forNonNullableByDefault: libraryBuilder.isNonNullableByDefault);
     push(asExpression);
   }
 
@@ -3187,6 +3188,7 @@
     bool isInverted = not != null;
     Expression isExpression = forest.createIsExpression(
         offsetForToken(isOperator), operand, type,
+        forNonNullableByDefault: libraryBuilder.isNonNullableByDefault,
         notFileOffset: not != null ? offsetForToken(not) : null);
     libraryBuilder.checkBoundsInType(
         type, typeEnvironment, uri, isOperator.charOffset);
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 8949530..441fc5b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -240,9 +240,8 @@
   }
 
   ClassHierarchyNode getNodeFromClassBuilder(ClassBuilder classBuilder) {
-    return nodes[classBuilder.cls] ??= new ClassHierarchyNodeBuilder(
-            this, classBuilder, loader.target.enableNonNullable)
-        .build();
+    return nodes[classBuilder.cls] ??=
+        new ClassHierarchyNodeBuilder(this, classBuilder).build();
   }
 
   ClassHierarchyNode getNodeFromTypeBuilder(TypeBuilder type) {
@@ -409,9 +408,8 @@
     for (int i = 0; i < classes.length; i++) {
       ClassBuilder classBuilder = classes[i];
       if (!classBuilder.isPatch) {
-        hierarchy.nodes[classBuilder.cls] = new ClassHierarchyNodeBuilder(
-                hierarchy, classBuilder, loader.target.enableNonNullable)
-            .build();
+        hierarchy.nodes[classBuilder.cls] =
+            new ClassHierarchyNodeBuilder(hierarchy, classBuilder).build();
       } else {
         // TODO(ahe): Merge the injected members of patch into the hierarchy
         // node of `cls.origin`.
@@ -426,15 +424,11 @@
 
   final ClassBuilder classBuilder;
 
-  /// Whether non-nullable types are supported.
-  final bool enableNonNullable;
-
   bool hasNoSuchMethod = false;
 
   List<ClassMember> abstractMembers = null;
 
-  ClassHierarchyNodeBuilder(
-      this.hierarchy, this.classBuilder, this.enableNonNullable);
+  ClassHierarchyNodeBuilder(this.hierarchy, this.classBuilder);
 
   ClassBuilder get objectClass => hierarchy.objectClassBuilder;
 
@@ -736,8 +730,16 @@
       if (substitution != null) {
         bType = substitution.substituteType(bType);
       }
+      if (hierarchy
+              .coreTypes.objectClass.enclosingLibrary.isNonNullableByDefault &&
+          !a.classBuilder.library.isNonNullableByDefault &&
+          b.member == hierarchy.coreTypes.objectEquals) {
+        // In legacy code we special case `Object.==` to infer `dynamic` instead
+        // `Object!`.
+        bType = const DynamicType();
+      }
       if (aType != bType) {
-        if (a.parent == classBuilder && a.formals[i].type == null) {
+        if (a.classBuilder == classBuilder && a.formals[i].type == null) {
           result = inferParameterType(classBuilder, a, a.formals[i], bType,
               hadTypesInferred, hierarchy);
         } else {
@@ -1177,13 +1179,13 @@
       member = delayedMember.withParent(classBuilder);
       hierarchy.delayedMemberChecks.add(member);
     }
-    if (mergeKind.intoCurrentClass &&
-        hierarchy.loader.target.enableNonNullable) {
+    if (mergeKind.intoCurrentClass) {
       if (member.classBuilder.library.isNonNullableByDefault &&
           !classBuilder.library.isNonNullableByDefault) {
         if (member is! DelayedMember) {
           member = new InterfaceConflict(
-              classBuilder, [member], mergeKind.forSetters, shouldModifyKernel);
+              classBuilder, [member], mergeKind.forSetters, shouldModifyKernel,
+              isAbstract: isAbstract(member));
           hierarchy.delayedMemberChecks.add(member);
         }
       }
@@ -1288,6 +1290,11 @@
 
       superclasses = new List<DartType>(supernode.superclasses.length + 1);
       DartType supertype = classBuilder.supertype.build(classBuilder.library);
+      if (supertype is! InterfaceType) {
+        // If the superclass is not an interface type we use Object instead.
+        // A similar normalization is performed on [supernode] above.
+        supertype = hierarchy.coreTypes.objectNonNullableRawType;
+      }
       superclasses.setRange(0, superclasses.length - 1,
           substSupertypes(supertype, supernode.superclasses));
       superclasses[superclasses.length - 1] = recordSupertype(supertype);
@@ -1499,8 +1506,7 @@
 
   DartType addInterface(
       List<DartType> interfaces, List<DartType> superclasses, DartType type) {
-    if (hierarchy.loader.target.enableNonNullable &&
-        !classBuilder.library.isNonNullableByDefault) {
+    if (!classBuilder.library.isNonNullableByDefault) {
       type = legacyErasure(hierarchy.coreTypes, type);
     }
     if (type is InterfaceType) {
@@ -1511,18 +1517,16 @@
       DartType superclass = depth < myDepth ? superclasses[depth] : null;
       if (superclass is InterfaceType &&
           superclass.classNode == type.classNode) {
-        if (hierarchy.loader.target.enableNonNullable) {
-          // This is a potential conflict.
-          if (classBuilder.library.isNonNullableByDefault) {
-            superclass = nnbdTopMerge(hierarchy.coreTypes, superclass, type);
-            if (superclass == null) {
-              // This is a conflict.
-              // TODO(johnniwinther): Report errors here instead of through
-              // the computation of the [ClassHierarchy].
-              superclass = superclasses[depth];
-            } else {
-              superclasses[depth] = superclass;
-            }
+        // This is a potential conflict.
+        if (classBuilder.library.isNonNullableByDefault) {
+          superclass = nnbdTopMerge(hierarchy.coreTypes, superclass, type);
+          if (superclass == null) {
+            // This is a conflict.
+            // TODO(johnniwinther): Report errors here instead of through
+            // the computation of the [ClassHierarchy].
+            superclass = superclasses[depth];
+          } else {
+            superclasses[depth] = superclass;
           }
         }
         return superclass;
@@ -1533,18 +1537,16 @@
           DartType interface = interfaces[i];
           if (interface is InterfaceType &&
               interface.classNode == type.classNode) {
-            if (hierarchy.loader.target.enableNonNullable) {
-              // This is a potential conflict.
-              if (classBuilder.library.isNonNullableByDefault) {
-                interface = nnbdTopMerge(hierarchy.coreTypes, interface, type);
-                if (interface == null) {
-                  // This is a conflict.
-                  // TODO(johnniwinther): Report errors here instead of through
-                  // the computation of the [ClassHierarchy].
-                  interface = interfaces[i];
-                } else {
-                  interfaces[i] = interface;
-                }
+            // This is a potential conflict.
+            if (classBuilder.library.isNonNullableByDefault) {
+              interface = nnbdTopMerge(hierarchy.coreTypes, interface, type);
+              if (interface == null) {
+                // This is a conflict.
+                // TODO(johnniwinther): Report errors here instead of through
+                // the computation of the [ClassHierarchy].
+                interface = interfaces[i];
+              } else {
+                interfaces[i] = interface;
               }
             }
             return interface;
@@ -2462,8 +2464,11 @@
 }
 
 class InterfaceConflict extends DelayedMember {
+  bool isAbstract;
+
   InterfaceConflict(ClassBuilder parent, List<ClassMember> declarations,
-      bool isSetter, bool modifyKernel)
+      bool isSetter, bool modifyKernel,
+      {this.isAbstract: true})
       : super(parent, declarations, isSetter, modifyKernel);
 
   Member combinedMemberSignatureResult;
@@ -2710,6 +2715,8 @@
   static ClassMember selectConcrete(ClassMember declaration) {
     if (declaration is AbstractMemberOverridingImplementation) {
       return declaration.concreteImplementation;
+    } else if (declaration is InterfaceConflict && !declaration.isAbstract) {
+      return selectConcrete(declaration.declarations.single);
     } else {
       return declaration;
     }
@@ -2751,7 +2758,8 @@
 }
 
 bool isAbstract(ClassMember declaration) {
-  return declaration.member.isAbstract || declaration is InterfaceConflict;
+  return declaration.member.isAbstract ||
+      (declaration is InterfaceConflict && declaration.isAbstract);
 }
 
 bool inferParameterType(
@@ -2762,6 +2770,22 @@
     bool hadTypesInferred,
     ClassHierarchyBuilder hierarchy) {
   debug?.log("Inferred type ${type} for ${parameterBuilder}");
+
+  if (classBuilder.library.isNonNullableByDefault) {
+    if (hadTypesInferred) {
+      type = nnbdTopMerge(
+          hierarchy.coreTypes, parameterBuilder.variable.type, type);
+      if (type != null) {
+        // The nnbd top merge exists so [type] is the inferred type.
+        parameterBuilder.variable.type = type;
+        return true;
+      }
+      // The nnbd top merge doesn't exist. An error will be reported below.
+    }
+  } else {
+    type = legacyErasure(hierarchy.coreTypes, type);
+  }
+
   if (type == parameterBuilder.variable.type) return true;
   bool result = true;
   if (hadTypesInferred) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 6e99f5d..430f0f2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -1791,8 +1791,11 @@
   Constant visitAsExpression(AsExpression node) {
     final Constant constant = _evaluateSubexpression(node.operand);
     if (shouldBeUnevaluated) {
-      return unevaluated(node,
-          new AsExpression(extract(constant), env.substituteType(node.type)));
+      return unevaluated(
+          node,
+          new AsExpression(extract(constant), env.substituteType(node.type))
+            ..isForNonNullableByDefault =
+                _staticTypeContext.isNonNullableByDefault);
     }
     return ensureIsSubtype(constant, evaluateDartType(node, node.type), node);
   }
@@ -1801,7 +1804,11 @@
   Constant visitIsExpression(IsExpression node) {
     final Constant constant = node.operand.accept(this);
     if (shouldBeUnevaluated) {
-      return unevaluated(node, new IsExpression(extract(constant), node.type));
+      return unevaluated(
+          node,
+          new IsExpression(extract(constant), node.type)
+            ..fileOffset = node.fileOffset
+            ..flags = node.flags);
     }
     if (constant is NullConstant) {
       DartType nodeType = node.type;
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index ce53e3d..c1104f7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -201,9 +201,13 @@
   }
 
   Expression createAsExpression(
-      int fileOffset, Expression expression, DartType type) {
+      int fileOffset, Expression expression, DartType type,
+      {bool forNonNullableByDefault}) {
+    assert(forNonNullableByDefault != null);
     assert(fileOffset != null);
-    return new AsExpression(expression, type)..fileOffset = fileOffset;
+    return new AsExpression(expression, type)
+      ..fileOffset = fileOffset
+      ..isForNonNullableByDefault = forNonNullableByDefault;
   }
 
   Expression createSpreadElement(int fileOffset, Expression expression,
@@ -406,10 +410,12 @@
   /// is non-null the test is negated the that file offset.
   Expression createIsExpression(
       int fileOffset, Expression operand, DartType type,
-      {int notFileOffset}) {
+      {bool forNonNullableByDefault, int notFileOffset}) {
+    assert(forNonNullableByDefault != null);
     assert(fileOffset != null);
     Expression result = new IsExpression(operand, type)
-      ..fileOffset = fileOffset;
+      ..fileOffset = fileOffset
+      ..isForNonNullableByDefault = forNonNullableByDefault;
     if (notFileOffset != null) {
       result = createNot(notFileOffset, result);
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 8c564b9..6b03c5b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -47,7 +47,7 @@
 class ForwardingNode {
   final ClassHierarchyBuilder hierarchy;
 
-  final SourceClassBuilder parent;
+  final SourceClassBuilder classBuilder;
 
   final ClassMember combinedMemberSignatureResult;
 
@@ -57,12 +57,12 @@
   /// procedures of the class in question.
   final List<ClassMember> _candidates;
 
-  ForwardingNode(this.hierarchy, this.parent,
+  ForwardingNode(this.hierarchy, this.classBuilder,
       this.combinedMemberSignatureResult, this._candidates, this.kind);
 
   Name get name => combinedMemberSignatureResult.member.name;
 
-  Class get enclosingClass => parent.cls;
+  Class get enclosingClass => classBuilder.cls;
 
   /// Finishes handling of this node by propagating covariance and creating
   /// forwarding stubs if necessary.
@@ -169,12 +169,9 @@
     bool needsCheck(DartType type) => needsCheckVisitor == null
         ? false
         : substitution.substituteType(type).accept(needsCheckVisitor);
-    bool enableNonNullable = hierarchy.loader.target.enableNonNullable;
-    bool isNonNullableByDefault =
-        enableNonNullable && parent.library.isNonNullableByDefault;
+    bool isNonNullableByDefault = classBuilder.library.isNonNullableByDefault;
 
     DartType initialType(DartType a) {
-      if (!enableNonNullable) return null;
       if (!isNonNullableByDefault) {
         a = legacyErasure(hierarchy.coreTypes, a);
       }
@@ -191,8 +188,8 @@
 
     for (int i = 0; i < interfacePositionalParameters.length; i++) {
       VariableDeclaration parameter = interfacePositionalParameters[i];
-      DartType parameterType = parameter.type;
-      DartType type = initialType(substitution.substituteType(parameterType));
+      DartType parameterType = substitution.substituteType(parameter.type);
+      DartType type = initialType(parameterType);
       bool isGenericCovariantImpl =
           parameter.isGenericCovariantImpl || needsCheck(parameter.type);
       bool isCovariant = parameter.isCovariant;
@@ -232,19 +229,17 @@
           stub.function.positionalParameters[i].isCovariant = true;
         }
       }
-      if (enableNonNullable) {
-        if (type != null && type != parameterType) {
-          // TODO(johnniwinther): Report an error when [type] is null; this
-          // means that nnbd-top-merge was not defined.
-          createStubIfNeeded(forMemberSignature: true);
-          stub.function.positionalParameters[i].type = type;
-        }
+      if (type != null && type != parameterType) {
+        // TODO(johnniwinther): Report an error when [type] is null; this
+        // means that nnbd-top-merge was not defined.
+        createStubIfNeeded(forMemberSignature: true);
+        stub.function.positionalParameters[i].type = type;
       }
     }
     for (int i = 0; i < interfaceNamedParameters.length; i++) {
       VariableDeclaration parameter = interfaceNamedParameters[i];
-      DartType parameterType = parameter.type;
-      DartType type = initialType(substitution.substituteType(parameterType));
+      DartType parameterType = substitution.substituteType(parameter.type);
+      DartType type = initialType(parameterType);
       bool isGenericCovariantImpl =
           parameter.isGenericCovariantImpl || needsCheck(parameter.type);
       bool isCovariant = parameter.isCovariant;
@@ -284,13 +279,11 @@
           stub.function.namedParameters[i].isCovariant = true;
         }
       }
-      if (enableNonNullable) {
-        if (type != null && type != parameterType) {
-          // TODO(johnniwinther): Report an error when [type] is null; this
-          // means that nnbd-top-merge was not defined.
-          createStubIfNeeded(forMemberSignature: true);
-          stub.function.namedParameters[i].type = type;
-        }
+      if (type != null && type != parameterType) {
+        // TODO(johnniwinther): Report an error when [type] is null; this
+        // means that nnbd-top-merge was not defined.
+        createStubIfNeeded(forMemberSignature: true);
+        stub.function.namedParameters[i].type = type;
       }
     }
     for (int i = 0; i < interfaceTypeParameters.length; i++) {
@@ -321,21 +314,19 @@
         }
       }
     }
-    if (enableNonNullable) {
-      DartType returnType =
-          substitution.substituteType(getReturnType(interfaceMember));
-      DartType type = initialType(returnType);
-      for (int j = 0; j < _candidates.length; j++) {
-        Member otherMember = getCandidateAt(j);
-        type = mergeTypes(
-            type, substitutions[j].substituteType(getReturnType(otherMember)));
-      }
-      if (type != null && type != returnType) {
-        // TODO(johnniwinther): Report an error when [type] is null; this
-        // means that nnbd-top-merge was not defined.
-        createStubIfNeeded(forMemberSignature: true);
-        stub.function.returnType = type;
-      }
+    DartType returnType =
+        substitution.substituteType(getReturnType(interfaceMember));
+    DartType type = initialType(returnType);
+    for (int j = 0; j < _candidates.length; j++) {
+      Member otherMember = getCandidateAt(j);
+      type = mergeTypes(
+          type, substitutions[j].substituteType(getReturnType(otherMember)));
+    }
+    if (type != null && type != returnType) {
+      // TODO(johnniwinther): Report an error when [type] is null; this
+      // means that nnbd-top-merge was not defined.
+      createStubIfNeeded(forMemberSignature: true);
+      stub.function.returnType = type;
     }
     return stub;
   }
@@ -447,13 +438,13 @@
       finalTarget = target;
     }
     Procedure referenceFrom;
-    if (parent.referencesFromIndexed != null) {
+    if (classBuilder.referencesFromIndexed != null) {
       if (kind == ProcedureKind.Setter) {
         referenceFrom =
-            parent.referencesFromIndexed.lookupProcedureSetter(name.name);
+            classBuilder.referencesFromIndexed.lookupProcedureSetter(name.name);
       } else {
-        referenceFrom =
-            parent.referencesFromIndexed.lookupProcedureNotSetter(name.name);
+        referenceFrom = classBuilder.referencesFromIndexed
+            .lookupProcedureNotSetter(name.name);
       }
     }
     return new Procedure(name, kind, function,
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
index a437394a..589e3a7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
@@ -106,11 +106,8 @@
 
   DartType inferType() {
     DartType type = _root.inferType();
-    if (_targetFieldBuilder.library.loader.target.enableNonNullable) {
-      if (!_targetFieldBuilder.library.isNonNullableByDefault) {
-        type =
-            legacyErasure(_targetFieldBuilder.library.loader.coreTypes, type);
-      }
+    if (!_targetFieldBuilder.library.isNonNullableByDefault) {
+      type = legacyErasure(_targetFieldBuilder.library.loader.coreTypes, type);
     }
     return _targetFieldBuilder.fieldType = type;
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 070a818..c5e3e53 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -3531,6 +3531,8 @@
         }
         binary = new AsExpression(binary, binaryType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
     }
@@ -3616,6 +3618,8 @@
         }
         unary = new AsExpression(unary, unaryType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
     }
@@ -3693,6 +3697,8 @@
         }
         read = new AsExpression(read, readType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
     }
@@ -3867,6 +3873,8 @@
         }
         read = new AsExpression(read, readType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
       Member member = readTarget.member;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index c5cd908..292505e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -45,6 +45,8 @@
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
 
 import 'package:kernel/type_algebra.dart' show substitute;
+import 'package:kernel/target/changed_structure_notifier.dart'
+    show ChangedStructureNotifier;
 import 'package:kernel/target/targets.dart' show DiagnosticReporter;
 import 'package:kernel/type_environment.dart' show TypeEnvironment;
 import 'package:kernel/verifier.dart' show verifyGetStaticType;
@@ -890,9 +892,12 @@
         environmentDefines,
         new KernelDiagnosticReporter(loader),
         loader.referenceFromIndex,
-        logger: (String msg) => ticker.logMs(msg));
+        logger: (String msg) => ticker.logMs(msg),
+        changedStructureNotifier: changedStructureNotifier);
   }
 
+  ChangedStructureNotifier get changedStructureNotifier => null;
+
   void runProcedureTransformations(Procedure procedure) {
     backendTarget.performTransformationsOnProcedure(
         loader.coreTypes, loader.hierarchy, procedure,
diff --git a/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart b/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
index b9f0955..c35373e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
@@ -776,6 +776,7 @@
     assert(fileOffset != TreeNode.noOffset);
     return new AsExpression(expression, type)
       ..isTypeError = true
+      ..isForNonNullableByDefault = _currentLibrary.isNonNullableByDefault
       ..fileOffset = fileOffset;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 658de83..30af5bc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -91,15 +91,20 @@
           for (int i = 0; i < type.arguments.length; ++i) {
             const int visitMarker = -2;
 
-            TypeVariableBuilder declarationTypeVariable =
-                declaration.typeVariables[i];
-
-            if (declarationTypeVariable.variance == pendingVariance) {
+            int declarationTypeVariableVariance = declaration.varianceAt(i);
+            if (declarationTypeVariableVariance == pendingVariance) {
+              assert(!declaration.fromDill);
+              TypeVariableBuilder declarationTypeVariable =
+                  declaration.typeVariables[i];
               declarationTypeVariable.variance = visitMarker;
               int computedVariance = computeVariance(
                   declarationTypeVariable, declaration.type, libraryBuilder);
-              declarationTypeVariable.variance = computedVariance;
-            } else if (declarationTypeVariable.variance == visitMarker) {
+              declarationTypeVariableVariance =
+                  declarationTypeVariable.variance = computedVariance;
+            } else if (declarationTypeVariableVariance == visitMarker) {
+              assert(!declaration.fromDill);
+              TypeVariableBuilder declarationTypeVariable =
+                  declaration.typeVariables[i];
               libraryBuilder.addProblem(
                   templateCyclicTypedef.withArguments(declaration.name),
                   declaration.charOffset,
@@ -108,7 +113,8 @@
               // Use [Variance.unrelated] for recovery.  The type with the
               // cyclic dependency will be replaced with an [InvalidType]
               // elsewhere.
-              declarationTypeVariable.variance = Variance.unrelated;
+              declarationTypeVariableVariance =
+                  declarationTypeVariable.variance = Variance.unrelated;
             }
 
             result = Variance.meet(
@@ -116,7 +122,7 @@
                 Variance.combine(
                     computeVariance(
                         variable, type.arguments[i], libraryBuilder),
-                    declarationTypeVariable.variance));
+                    declarationTypeVariableVariance));
           }
         }
         return result;
diff --git a/pkg/front_end/lib/src/fasta/library_graph.dart b/pkg/front_end/lib/src/fasta/library_graph.dart
index ddbf967..5a75f85 100644
--- a/pkg/front_end/lib/src/fasta/library_graph.dart
+++ b/pkg/front_end/lib/src/fasta/library_graph.dart
@@ -4,14 +4,13 @@
 
 library fasta.library_graph;
 
-import 'package:front_end/src/fasta/source/source_library_builder.dart'
-    show SourceLibraryBuilder;
-
 import 'package:kernel/kernel.dart'
     show Library, LibraryDependency, LibraryPart;
 
 import 'package:kernel/util/graph.dart' show Graph;
 
+import 'incremental_compiler.dart' show getPartUri;
+
 class LibraryGraph implements Graph<Uri> {
   final Map<Uri, Library> libraries;
 
@@ -42,8 +41,8 @@
     // Normally there won't be libraries for these, but if, for instance,
     // the part didn't exist there will be a synthetic library.
     for (LibraryPart part in library.parts) {
-      Uri partUri = getPartUri(library.importUri, part.partUri);
-      Uri fileUri = getPartUri(library.fileUri, part.partUri);
+      Uri partUri = getPartUri(library.importUri, part);
+      Uri fileUri = getPartUri(library.fileUri, part);
       if (libraries.containsKey(partUri)) {
         yield partUri;
       } else if (fileUri != partUri && libraries.containsKey(fileUri)) {
@@ -51,15 +50,4 @@
       }
     }
   }
-
-  Uri getPartUri(Uri base, String part) {
-    try {
-      return base.resolve(part);
-    } on FormatException {
-      // This is also done in [SourceLibraryBuilder.resolve]
-      return new Uri(
-          scheme: SourceLibraryBuilder.MALFORMED_URI_SCHEME,
-          query: Uri.encodeQueryComponent(part));
-    }
-  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 59bbed4..f79ddbe 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1049,6 +1049,11 @@
           }
         }
       }
+      if (typeVariables != null) {
+        TypeVariableBuilder typeVariableBuilder = typeVariables.first;
+        addProblem(messageOperatorWithTypeParameters,
+            typeVariableBuilder.charOffset, typeVariableBuilder.name.length);
+      }
     } else {
       name = nameOrOperator;
       kind = computeProcedureKind(getOrSet);
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index f8e8790..6940aaa 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -422,7 +422,6 @@
     cls.procedures.add(cloned);
     cloned.parent = cls;
 
-    SourceLibraryBuilder library = this.library;
     library.forwardersOrigins.add(cloned);
     library.forwardersOrigins.add(procedure);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 11ef3f6..0c4dfb2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -569,7 +569,7 @@
 
   Uri resolve(Uri baseUri, String uri, int uriOffset, {isPart: false}) {
     if (uri == null) {
-      addProblem(messageExpectedUri, uriOffset, noLength, this.uri);
+      addProblem(messageExpectedUri, uriOffset, noLength, fileUri);
       return new Uri(scheme: MALFORMED_URI_SCHEME);
     }
     Uri parsedUri;
@@ -580,7 +580,7 @@
       // or to the initial quote if no position is given.
       // (Assumes the directive is using a single-line string.)
       addProblem(templateCouldNotParseUri.withArguments(uri, e.message),
-          uriOffset + 1 + (e.offset ?? -1), 1, this.uri);
+          uriOffset + 1 + (e.offset ?? -1), 1, fileUri);
       return new Uri(
           scheme: MALFORMED_URI_SCHEME, query: Uri.encodeQueryComponent(uri));
     }
@@ -3081,7 +3081,7 @@
                   formal.name, formal.variable.type, isNonNullableByDefault),
               formal.charOffset,
               formal.name.length,
-              uri);
+              fileUri);
         } else {
           addProblem(
               templateOptionalNonNullableWithoutInitializerWarning
@@ -3089,7 +3089,7 @@
                       isNonNullableByDefault),
               formal.charOffset,
               formal.name.length,
-              uri);
+              fileUri);
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index d0a8f91..087edf8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -911,6 +911,7 @@
     } else {
       hierarchy.onAmbiguousSupertypes = onAmbiguousSupertypes;
       Component component = computeFullComponent();
+      hierarchy.coreTypes = coreTypes;
       hierarchy.applyTreeChanges(const [], component.libraries,
           reissueAmbiguousSupertypesFor: component);
     }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index f1d7ed6..91e493c 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -703,6 +703,8 @@
         // Insert an implicit downcast.
         result = new AsExpression(expression, initialContextType)
           ..isTypeError = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
+          ..isForDynamic = expressionType is DynamicType
           ..fileOffset = fileOffset;
         break;
       case AssignabilityKind.assignableTearoff:
@@ -713,6 +715,7 @@
             _tearOffCall(expression, expressionType, fileOffset).tearoff,
             initialContextType)
           ..isTypeError = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
           ..fileOffset = fileOffset;
         break;
       case AssignabilityKind.unassignable:
@@ -740,6 +743,16 @@
         result = _wrapUnassignableExpression(typedTearoff.tearoff,
             typedTearoff.tearoffType, contextType, errorTemplate);
         break;
+      case AssignabilityKind.unassignableCantTearoff:
+        // The first call to _computeAssignabilityKind is done for the purpose
+        // of code generation, and the inability to tear off from a
+        // potentially nullable receiver shouldn't arise as an issue in any
+        // mode other than the strong mode.
+        assert(isNonNullableByDefault && performNnbdChecks && nnbdStrongMode);
+
+        result = _wrapTearoffErrorExpression(
+            expression, contextType, templateNullableTearoffError);
+        break;
       default:
         return unhandled("${kind}", "ensureAssignable", fileOffset, helper.uri);
     }
@@ -787,6 +800,11 @@
         case AssignabilityKind.unassignableTearoff:
           // Don't report the same problem twice.
           if (kind == AssignabilityKind.unassignableTearoff) break;
+
+          // The first handling of the error should have happened in the strong
+          // mode.
+          assert(!nnbdStrongMode);
+
           if (contextType is! InvalidType && expressionType is! InvalidType) {
             TypedTearoff typedTearoff =
                 _tearOffCall(expression, expressionType, fileOffset);
@@ -798,6 +816,19 @@
                 noLength);
           }
           break;
+        case AssignabilityKind.unassignableCantTearoff:
+          // Don't report the same problem twice.
+          if (kind == AssignabilityKind.unassignableCantTearoff) break;
+
+          // The first handling of the error should have happened in the strong
+          // mode.
+          assert(!nnbdStrongMode);
+
+          if (isNonNullableByDefault && performNnbdChecks) {
+            result = _wrapTearoffErrorExpression(
+                expression, contextType, templateNullableTearoffWarning);
+          }
+          break;
         default:
           return unhandled(
               "${kind}", "ensureAssignable:weak", fileOffset, helper.uri);
@@ -807,6 +838,25 @@
     return result;
   }
 
+  Expression _wrapTearoffErrorExpression(Expression expression,
+      DartType contextType, Template<Message Function(String)> template) {
+    assert(template != null);
+    Expression errorNode = new AsExpression(
+        expression,
+        // TODO(ahe): The outline phase doesn't correctly remove invalid
+        // uses of type variables, for example, on static members. Once
+        // that has been fixed, we should always be able to use
+        // [contextType] directly here.
+        hasAnyTypeVariables(contextType) ? const BottomType() : contextType)
+      ..isTypeError = true
+      ..fileOffset = expression.fileOffset;
+    if (contextType is! InvalidType) {
+      errorNode = helper.wrapInProblem(
+          errorNode, template.withArguments(callName.name), noLength);
+    }
+    return errorNode;
+  }
+
   Expression _wrapUnassignableExpression(
       Expression expression,
       DartType expressionType,
@@ -817,9 +867,10 @@
         // TODO(ahe): The outline phase doesn't correctly remove invalid
         // uses of type variables, for example, on static members. Once
         // that has been fixed, we should always be able to use
-        // [expectedType] directly here.
+        // [contextType] directly here.
         hasAnyTypeVariables(contextType) ? const BottomType() : contextType)
       ..isTypeError = true
+      ..isForNonNullableByDefault = isNonNullableByDefault
       ..fileOffset = expression.fileOffset;
     if (contextType is! InvalidType && expressionType is! InvalidType) {
       errorNode = helper.wrapInProblem(
@@ -880,6 +931,9 @@
       if (callMember is Procedure && callMember.kind == ProcedureKind.Method) {
         if (_shouldTearOffCall(contextType, expressionType)) {
           needsTearoff = true;
+          if (isStrongNullabilityMode && expressionType.isPotentiallyNullable) {
+            return AssignabilityKind.unassignableCantTearoff;
+          }
           expressionType =
               getGetterTypeForMemberTarget(callMember, expressionType)
                   .withNullability(expressionType.nullability);
@@ -1747,6 +1801,8 @@
       case MethodContravarianceCheckKind.checkMethodReturn:
         AsExpression replacement = new AsExpression(expression, inferredType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
           ..fileOffset = fileOffset;
         if (instrumentation != null) {
           int offset = arguments.fileOffset == -1
@@ -1761,6 +1817,8 @@
             desugaredInvocation.name, desugaredInvocation.interfaceTarget);
         AsExpression asExpression = new AsExpression(propertyGet, functionType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
           ..fileOffset = fileOffset;
         MethodInvocation replacement = new MethodInvocation(
             asExpression, callName, desugaredInvocation.arguments);
@@ -1792,7 +1850,7 @@
       // not spec'ed anywhere.
       return const DynamicType();
     }
-    return initializerType;
+    return demoteType(initializerType);
   }
 
   void inferSyntheticVariable(VariableDeclarationImpl variable) {
@@ -2732,6 +2790,8 @@
             ..fileOffset = fileOffset,
           result.inferredType)
         ..isTypeError = true
+        ..isCovarianceCheck = true
+        ..isForNonNullableByDefault = isNonNullableByDefault
         ..fileOffset = fileOffset;
       if (instrumentation != null) {
         int offset =
@@ -2826,6 +2886,8 @@
       PropertyGet propertyGet = new PropertyGet(receiver, getter.name, getter);
       AsExpression asExpression = new AsExpression(propertyGet, functionType)
         ..isTypeError = true
+        ..isCovarianceCheck = true
+        ..isForNonNullableByDefault = isNonNullableByDefault
         ..fileOffset = fileOffset;
       replacement = new MethodInvocation(asExpression, callName, arguments);
       if (instrumentation != null) {
@@ -2901,6 +2963,8 @@
       PropertyGet propertyGet = new PropertyGet(receiver, field.name, field);
       AsExpression asExpression = new AsExpression(propertyGet, functionType)
         ..isTypeError = true
+        ..isCovarianceCheck = true
+        ..isForNonNullableByDefault = isNonNullableByDefault
         ..fileOffset = fileOffset;
       replacement = new MethodInvocation(asExpression, callName, arguments);
       if (instrumentation != null) {
@@ -3324,16 +3388,16 @@
     return null;
   }
 
-  bool _shouldTearOffCall(DartType expectedType, DartType actualType) {
-    if (expectedType is InterfaceType &&
-        expectedType.classNode == typeSchemaEnvironment.futureOrClass) {
-      expectedType = (expectedType as InterfaceType).typeArguments[0];
+  bool _shouldTearOffCall(DartType contextType, DartType expressionType) {
+    if (contextType is InterfaceType &&
+        contextType.classNode == typeSchemaEnvironment.futureOrClass) {
+      contextType = (contextType as InterfaceType).typeArguments[0];
     }
-    if (expectedType is FunctionType) return true;
-    if (expectedType is InterfaceType &&
-        expectedType.classNode == typeSchemaEnvironment.functionClass) {
-      if (!typeSchemaEnvironment.isSubtypeOf(
-          actualType, expectedType, SubtypeCheckMode.ignoringNullabilities)) {
+    if (contextType is FunctionType) return true;
+    if (contextType is InterfaceType &&
+        contextType.classNode == typeSchemaEnvironment.functionClass) {
+      if (!typeSchemaEnvironment.isSubtypeOf(expressionType, contextType,
+          SubtypeCheckMode.ignoringNullabilities)) {
         return true;
       }
     }
@@ -4054,6 +4118,9 @@
 
   /// Unassignable, but needs a tearoff of "call" for better error reporting.
   unassignableTearoff,
+
+  /// Unassignable because the tear-off can't be done on the nullable receiver.
+  unassignableCantTearoff,
 }
 
 /// Convenient way to return both a tear-off expression and its type.
diff --git a/pkg/front_end/lib/src/testing/id_testing_helper.dart b/pkg/front_end/lib/src/testing/id_testing_helper.dart
index 5b58808..0b35379 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -42,9 +42,14 @@
   final String name;
   final Map<ExperimentalFlag, bool> experimentalFlags;
   final Uri librariesSpecificationUri;
+  // TODO(johnniwinther): Tailor support to redefine selected platform
+  // classes/members only.
+  final bool compileSdk;
 
   const TestConfig(this.marker, this.name,
-      {this.experimentalFlags = const {}, this.librariesSpecificationUri});
+      {this.experimentalFlags = const {},
+      this.librariesSpecificationUri,
+      this.compileSdk: false});
 
   void customizeCompilerOptions(CompilerOptions options) {}
 }
@@ -273,6 +278,7 @@
         testData.memorySourceFiles.keys.map(createUriForFileName).toSet();
     if (testFiles.contains(config.librariesSpecificationUri)) {
       options.librariesSpecificationUri = config.librariesSpecificationUri;
+      options.compileSdk = config.compileSdk;
     }
   }
   config.customizeCompilerOptions(options);
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index b5e8ccf..e7fbe16 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -387,6 +387,8 @@
 InvalidVoid/part_wrapped_script2: Fail
 InvalidVoid/script1: Fail
 InvalidVoid/script2: Fail
+JsInteropIndexNotSupported/analyzerCode: Fail # Web compiler specific
+JsInteropIndexNotSupported/example: Fail # Web compiler specific
 LanguageVersionInvalidInDotPackages/analyzerCode: Fail
 LanguageVersionInvalidInDotPackages/part_wrapped_script: Fail # Importing file in the (now) part.
 LanguageVersionMismatchInPart/analyzerCode: Fail
@@ -485,6 +487,10 @@
 NullableSuperclassError/example: Fail
 NullableSuperclassWarning/analyzerCode: Fail
 NullableSuperclassWarning/example: Fail
+NullableTearoffError/analyzerCode: Fail
+NullableTearoffError/example: Fail
+NullableTearoffWarning/analyzerCode: Fail
+NullableTearoffWarning/example: Fail
 OperatorMinusParameterMismatch/example: Fail
 OperatorParameterMismatch0/analyzerCode: Fail
 OperatorParameterMismatch0/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 48c9bee..1ff32f8 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -2131,6 +2131,13 @@
 OperatorWithOptionalFormals:
   template: "An operator can't have optional parameters."
 
+OperatorWithTypeParameters:
+  template: "Types parameters aren't allowed when defining an operator."
+  tip: "Try removing the type parameters."
+  analyzerCode: TYPE_PARAMETER_ON_OPERATOR
+  script:
+    - "class C { operator []<T>(T t) => null; }"
+
 PlatformPrivateLibraryAccess:
   template: "Can't access platform private library."
   analyzerCode: IMPORT_INTERNAL_LIBRARY
@@ -3791,6 +3798,13 @@
   template: "Operator '#name' is called on '#type' which is potentially null."
   severity: WARNING
 
+NullableTearoffError:
+  template: "Can't tear off method '#name' from a potentially null value."
+
+NullableTearoffWarning:
+  template: "Tearing off method '#name' from a potentially null value."
+  severity: WARNING
+
 ThrowingNotAssignableToObjectError:
   template: "Can't throw a value of '#type' since it is neither dynamic nor non-nullable."
 
@@ -3850,3 +3864,7 @@
 NullableMixinWarning:
   template: "Mixing in '#name' marked with '?'."
   severity: WARNING
+
+JsInteropIndexNotSupported:
+  template: "JS interop classes do not support [] and []= operator methods."
+  tip: "Try replacing with a normal method."
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 0e54fb3..84f0b1c 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -29,7 +29,7 @@
     show StandardFileSystem;
 
 import 'package:front_end/src/base/libraries_specification.dart'
-    show TargetLibrariesSpecification;
+    show LibraryInfo;
 
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
@@ -67,6 +67,9 @@
 
 import 'package:kernel/reference_from_index.dart' show ReferenceFromIndex;
 
+import 'package:kernel/target/changed_structure_notifier.dart'
+    show ChangedStructureNotifier;
+
 import 'package:kernel/target/targets.dart'
     show TargetFlags, DiagnosticReporter;
 
@@ -85,6 +88,7 @@
 
 import '../../utils/kernel_chain.dart'
     show
+        ComponentResult,
         KernelTextSerialization,
         MatchContext,
         MatchExpectation,
@@ -149,7 +153,7 @@
   final bool forceNnbdChecks;
 
   TestOptions(this.experimentalFlags,
-      {this.forceLateLowering, this.forceNnbdChecks})
+      {this.forceLateLowering: false, this.forceNnbdChecks: false})
       : assert(forceLateLowering != null),
         assert(forceNnbdChecks != null);
 
@@ -170,7 +174,7 @@
 }
 
 class FastaContext extends ChainContext with MatchContext {
-  final UriTranslator uriTranslator;
+  final Uri baseUri;
   final List<Step> steps;
   final Uri vm;
   final bool onlyCrashes;
@@ -183,8 +187,10 @@
   final Map<Component, StringBuffer> componentToDiagnostics =
       <Component, StringBuffer>{};
   final Uri platformBinaries;
+  final Map<Uri, UriTranslator> _uriTranslators = {};
   final Map<Uri, TestOptions> _testOptions = {};
   final Map<Uri, LinkDependenciesOptions> _linkDependencies = {};
+  final Map<Uri, Uri> _librariesJson = {};
 
   @override
   final bool updateExpectations;
@@ -198,6 +204,7 @@
   Component platform;
 
   FastaContext(
+      this.baseUri,
       this.vm,
       this.platformBinaries,
       this.onlyCrashes,
@@ -207,7 +214,6 @@
       bool updateComments,
       this.skipVm,
       bool kernelTextSerialization,
-      this.uriTranslator,
       bool fullCompile,
       this.verify,
       this.weak)
@@ -264,45 +270,84 @@
     }
   }
 
+  TestOptions _computeTestOptionsForDirectory(Directory directory) {
+    TestOptions testOptions = _testOptions[directory.uri];
+    if (testOptions == null) {
+      if (directory.uri == baseUri) {
+        testOptions = new TestOptions({},
+            forceLateLowering: false, forceNnbdChecks: false);
+      } else {
+        File optionsFile =
+            new File.fromUri(directory.uri.resolve('test.options'));
+        if (optionsFile.existsSync()) {
+          bool forceLateLowering = false;
+          bool forceNnbdChecks = false;
+          List<String> experimentalFlagsArguments = [];
+          for (String line in optionsFile.readAsStringSync().split('\n')) {
+            line = line.trim();
+            if (line.startsWith(experimentalFlagOptions)) {
+              experimentalFlagsArguments =
+                  line.substring(experimentalFlagOptions.length).split('\n');
+            } else if (line.startsWith(Flags.forceLateLowering)) {
+              forceLateLowering = true;
+            } else if (line.startsWith(Flags.forceNnbdChecks)) {
+              forceNnbdChecks = true;
+            } else if (line.isNotEmpty) {
+              throw new UnsupportedError("Unsupported test option '$line'");
+            }
+          }
+
+          testOptions = new TestOptions(
+              parseExperimentalFlags(
+                  parseExperimentalArguments(experimentalFlagsArguments),
+                  onError: (String message) => throw new ArgumentError(message),
+                  onWarning: (String message) =>
+                      throw new ArgumentError(message)),
+              forceLateLowering: forceLateLowering,
+              forceNnbdChecks: forceNnbdChecks);
+        } else {
+          testOptions = _computeTestOptionsForDirectory(directory.parent);
+        }
+      }
+      _testOptions[directory.uri] = testOptions;
+    }
+    return testOptions;
+  }
+
   /// Computes the experimental flag for [description].
   ///
   /// [forcedExperimentalFlags] is used to override the default flags for
   /// [description].
   TestOptions computeTestOptions(TestDescription description) {
     Directory directory = new File.fromUri(description.uri).parent;
-    // TODO(johnniwinther): Support nested test folders?
-    TestOptions testOptions = _testOptions[directory.uri];
-    if (testOptions == null) {
-      bool forceLateLowering = false;
-      bool forceNnbdChecks = false;
-      List<String> experimentalFlagsArguments = [];
-      File optionsFile =
-          new File.fromUri(directory.uri.resolve('test.options'));
-      if (optionsFile.existsSync()) {
-        for (String line in optionsFile.readAsStringSync().split('\n')) {
-          line = line.trim();
-          if (line.startsWith(experimentalFlagOptions)) {
-            experimentalFlagsArguments =
-                line.substring(experimentalFlagOptions.length).split('\n');
-          } else if (line.startsWith(Flags.forceLateLowering)) {
-            forceLateLowering = true;
-          } else if (line.startsWith(Flags.forceNnbdChecks)) {
-            forceNnbdChecks = true;
-          } else if (line.isNotEmpty) {
-            throw new UnsupportedError("Unsupported test option '$line'");
-          }
-        }
-      }
-      testOptions = new TestOptions(
-          parseExperimentalFlags(
-              parseExperimentalArguments(experimentalFlagsArguments),
-              onError: (String message) => throw new ArgumentError(message),
-              onWarning: (String message) => throw new ArgumentError(message)),
-          forceLateLowering: forceLateLowering,
-          forceNnbdChecks: forceNnbdChecks);
-      _testOptions[directory.uri] = testOptions;
+    return _computeTestOptionsForDirectory(directory);
+  }
+
+  Future<UriTranslator> computeUriTranslator(
+      TestDescription description) async {
+    Uri librariesSpecificationUri =
+        computeLibrariesSpecificationUri(description);
+    UriTranslator uriTranslator = _uriTranslators[librariesSpecificationUri];
+    if (uriTranslator == null) {
+      Uri sdk = Uri.base.resolve("sdk/");
+      Uri packages = Uri.base.resolve(".packages");
+      TestOptions testOptions = computeTestOptions(description);
+      ProcessedOptions options = new ProcessedOptions(
+          options: new CompilerOptions()
+            ..onDiagnostic = (DiagnosticMessage message) {
+              throw message.plainTextFormatted.join("\n");
+            }
+            ..sdkRoot = sdk
+            ..packagesFileUri = packages
+            ..environmentDefines = {}
+            ..experimentalFlags =
+                testOptions.computeExperimentalFlags(experimentalFlags)
+            ..nnbdStrongMode = !weak
+            ..librariesSpecificationUri = librariesSpecificationUri);
+      uriTranslator = await options.getUriTranslator();
+      _uriTranslators[librariesSpecificationUri] = uriTranslator;
     }
-    return testOptions;
+    return uriTranslator;
   }
 
   /// Computes the link dependencies for [description].
@@ -332,6 +377,21 @@
     return linkDependenciesOptions;
   }
 
+  /// Libraries json for [description].
+  Uri computeLibrariesSpecificationUri(TestDescription description) {
+    Directory directory = new File.fromUri(description.uri).parent;
+    if (_librariesJson.containsKey(directory.uri)) {
+      return _librariesJson[directory.uri];
+    } else {
+      Uri librariesJson;
+      File jsonFile = new File.fromUri(directory.uri.resolve('libraries.json'));
+      if (jsonFile.existsSync()) {
+        librariesJson = jsonFile.uri;
+      }
+      return _librariesJson[directory.uri] = librariesJson;
+    }
+  }
+
   Expectation get verificationError => expectationSet["VerificationError"];
 
   Future ensurePlatformUris() async {
@@ -374,9 +434,7 @@
 
   static Future<FastaContext> create(
       Chain suite, Map<String, String> environment) async {
-    Uri sdk = Uri.base.resolve("sdk/");
     Uri vm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
-    Uri packages = Uri.base.resolve(".packages");
     Map<ExperimentalFlag, bool> experimentalFlags = <ExperimentalFlag, bool>{};
 
     void addForcedExperimentalFlag(String name, ExperimentalFlag flag) {
@@ -391,17 +449,6 @@
         "enableNonNullable", ExperimentalFlag.nonNullable);
 
     bool weak = environment["weak"] == "true";
-    var options = new ProcessedOptions(
-        options: new CompilerOptions()
-          ..onDiagnostic = (DiagnosticMessage message) {
-            throw message.plainTextFormatted.join("\n");
-          }
-          ..sdkRoot = sdk
-          ..packagesFileUri = packages
-          ..environmentDefines = {}
-          ..experimentalFlags = experimentalFlags
-          ..nnbdStrongMode = !weak);
-    UriTranslator uriTranslator = await options.getUriTranslator();
     bool onlyCrashes = environment["onlyCrashes"] == "true";
     bool ignoreExpectations = environment["ignoreExpectations"] == "true";
     bool updateExpectations = environment["updateExpectations"] == "true";
@@ -415,6 +462,7 @@
       platformBinaries = '$platformBinaries/';
     }
     return new FastaContext(
+        suite.uri,
         vm,
         platformBinaries == null
             ? computePlatformBinariesLocation(forceBuildDir: true)
@@ -426,7 +474,6 @@
         updateComments,
         skipVm,
         kernelTextSerialization,
-        uriTranslator,
         environment.containsKey(ENABLE_FULL_COMPILE),
         verify,
         weak);
@@ -460,7 +507,7 @@
   }
 }
 
-class Outline extends Step<TestDescription, Component, FastaContext> {
+class Outline extends Step<TestDescription, ComponentResult, FastaContext> {
   final bool fullCompile;
 
   const Outline(this.fullCompile, {this.updateComments: false});
@@ -473,9 +520,12 @@
 
   bool get isCompiler => fullCompile;
 
-  Future<Result<Component>> run(
+  Future<Result<ComponentResult>> run(
       TestDescription description, FastaContext context) async {
     StringBuffer errors = new StringBuffer();
+
+    Uri librariesSpecificationUri =
+        context.computeLibrariesSpecificationUri(description);
     LinkDependenciesOptions linkDependenciesOptions =
         context.computeLinkDependenciesOptions(description);
     TestOptions testOptions = context.computeTestOptions(description);
@@ -491,7 +541,8 @@
           ..experimentalFlags =
               testOptions.computeExperimentalFlags(context.experimentalFlags)
           ..performNnbdChecks = testOptions.forceNnbdChecks
-          ..nnbdStrongMode = !context.weak,
+          ..nnbdStrongMode = !context.weak
+          ..librariesSpecificationUri = librariesSpecificationUri,
         inputs: <Uri>[description.uri]);
 
     // Disable colors to ensure that expectation files are the same across
@@ -502,8 +553,8 @@
         linkDependenciesOptions.component == null) {
       // Compile linked dependency.
       await CompilerContext.runWithOptions(options, (_) async {
-        KernelTarget sourceTarget = await outlineInitialization(
-            context, testOptions, linkDependenciesOptions.content.toList());
+        KernelTarget sourceTarget = await outlineInitialization(context,
+            description, testOptions, linkDependenciesOptions.content.toList());
         if (linkDependenciesOptions.errors != null) {
           errors.write(linkDependenciesOptions.errors);
         }
@@ -527,7 +578,7 @@
 
     return await CompilerContext.runWithOptions(options, (_) async {
       KernelTarget sourceTarget = await outlineInitialization(
-          context, testOptions, <Uri>[description.uri],
+          context, description, testOptions, <Uri>[description.uri],
           alsoAppend: linkDependenciesOptions.component);
       ValidatingInstrumentation instrumentation =
           new ValidatingInstrumentation();
@@ -538,6 +589,17 @@
       context.componentToTarget[p] = sourceTarget;
       context.componentToDiagnostics.clear();
       context.componentToDiagnostics[p] = errors;
+      Set<Uri> userLibraries = p.libraries
+          .where((Library library) =>
+              library.importUri.scheme != 'dart' &&
+              library.importUri.scheme != 'package')
+          .map((Library library) => library.importUri)
+          .toSet();
+      // Mark custom dart: libraries defined in the test-specific libraries.json
+      // file as user libraries.
+      UriTranslator uriTranslator = sourceTarget.uriTranslator;
+      userLibraries.addAll(uriTranslator.dartLibraries.allLibraries
+          .map((LibraryInfo info) => info.importUri));
       if (fullCompile) {
         p = await sourceTarget.buildComponent(verify: context.verify);
         instrumentation.finish();
@@ -545,26 +607,31 @@
           if (updateComments) {
             await instrumentation.fixSource(description.uri, false);
           } else {
-            return new Result<Component>(
-                p,
+            return new Result<ComponentResult>(
+                new ComponentResult(p, userLibraries),
                 context.expectationSet["InstrumentationMismatch"],
                 instrumentation.problemsAsString,
                 null);
           }
         }
       }
-      return pass(p);
+      return pass(new ComponentResult(p, userLibraries));
     });
   }
 
   Future<KernelTarget> outlineInitialization(
-      FastaContext context, TestOptions testOptions, List<Uri> entryPoints,
+      FastaContext context,
+      TestDescription description,
+      TestOptions testOptions,
+      List<Uri> entryPoints,
       {Component alsoAppend}) async {
     Component platform = await context.loadPlatform();
     Ticker ticker = new Ticker();
+    UriTranslator uriTranslator =
+        await context.computeUriTranslator(description);
     DillTarget dillTarget = new DillTarget(
       ticker,
-      context.uriTranslator,
+      uriTranslator,
       new TestVmTarget(new TargetFlags(
           forceLateLoweringForTesting: testOptions.forceLateLowering)),
     );
@@ -572,11 +639,6 @@
     if (alsoAppend != null) {
       dillTarget.loader.appendLibraries(alsoAppend);
     }
-    // We create a new URI translator to avoid reading platform libraries
-    // from file system.
-    UriTranslator uriTranslator = new UriTranslator(
-        const TargetLibrariesSpecification('vm'),
-        context.uriTranslator.packages);
     KernelTarget sourceTarget = new KernelTarget(
         StandardFileSystem.instance, false, dillTarget, uriTranslator);
 
@@ -586,13 +648,14 @@
   }
 }
 
-class Transform extends Step<Component, Component, FastaContext> {
+class Transform extends Step<ComponentResult, ComponentResult, FastaContext> {
   const Transform();
 
   String get name => "transform component";
 
-  Future<Result<Component>> run(
-      Component component, FastaContext context) async {
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, FastaContext context) async {
+    Component component = result.component;
     KernelTarget sourceTarget = context.componentToTarget[component];
     context.componentToTarget.remove(component);
     TestVmTarget backendTarget = sourceTarget.backendTarget;
@@ -606,13 +669,13 @@
     }
     List<String> errors = VerifyTransformed.verify(component);
     if (errors.isNotEmpty) {
-      return new Result<Component>(
-          component,
+      return new Result<ComponentResult>(
+          result,
           context.expectationSet["TransformVerificationError"],
           errors.join('\n'),
           null);
     }
-    return pass(component);
+    return pass(result);
   }
 }
 
@@ -655,7 +718,8 @@
       Map<String, String> environmentDefines,
       DiagnosticReporter diagnosticReporter,
       ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg)}) {
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
     if (enabled) {
       super.performModularTransformationsOnLibraries(
           component,
@@ -670,27 +734,30 @@
   }
 }
 
-class EnsureNoErrors extends Step<Component, Component, FastaContext> {
+class EnsureNoErrors
+    extends Step<ComponentResult, ComponentResult, FastaContext> {
   const EnsureNoErrors();
 
   String get name => "check errors";
 
-  Future<Result<Component>> run(
-      Component component, FastaContext context) async {
-    StringBuffer buffer = context.componentToDiagnostics[component];
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, FastaContext context) async {
+    StringBuffer buffer = context.componentToDiagnostics[result.component];
     return buffer.isEmpty
-        ? pass(component)
-        : fail(component, """Unexpected errors:\n$buffer""");
+        ? pass(result)
+        : fail(result, """Unexpected errors:\n$buffer""");
   }
 }
 
-class MatchHierarchy extends Step<Component, Component, FastaContext> {
+class MatchHierarchy
+    extends Step<ComponentResult, ComponentResult, FastaContext> {
   const MatchHierarchy();
 
   String get name => "check hierarchy";
 
-  Future<Result<Component>> run(
-      Component component, FastaContext context) async {
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, FastaContext context) async {
+    Component component = result.component;
     Uri uri =
         component.uriToSource.keys.firstWhere((uri) => uri?.scheme == "file");
     KernelTarget target = context.componentToTarget[component];
@@ -699,6 +766,7 @@
     for (ClassHierarchyNode node in hierarchy.nodes.values) {
       sb.writeln(node);
     }
-    return context.match<Component>(".hierarchy.expect", "$sb", uri, component);
+    return context.match<ComponentResult>(
+        ".hierarchy.expect", "$sb", uri, result);
   }
 }
diff --git a/pkg/front_end/test/id_tests/inheritance_test.dart b/pkg/front_end/test/id_tests/inheritance_test.dart
index f5534d1..542d5ab 100644
--- a/pkg/front_end/test/id_tests/inheritance_test.dart
+++ b/pkg/front_end/test/id_tests/inheritance_test.dart
@@ -15,10 +15,6 @@
 
 const String cfeFromBuilderMarker = 'cfe:builder';
 
-const TestConfig cfeFromBuilder = const TestConfig(
-    cfeFromBuilderMarker, 'cfe from builder',
-    experimentalFlags: const {ExperimentalFlag.nonNullable: true});
-
 main(List<String> args) async {
   Directory dataDir = new Directory.fromUri(Platform.script
       .resolve('../../../_fe_analyzer_shared/test/inheritance/data'));
@@ -27,8 +23,17 @@
       supportedMarkers: [cfeMarker, cfeFromBuilderMarker],
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
-      runTest: runTestFor(const InheritanceDataComputer(),
-          [cfeNonNullableOnlyConfig, cfeFromBuilder]));
+      runTest: runTestFor(const InheritanceDataComputer(), [
+        new TestConfig(cfeMarker, 'cfe with nnbd',
+            experimentalFlags: const {ExperimentalFlag.nonNullable: true},
+            librariesSpecificationUri: createUriForFileName('libraries.json'),
+            compileSdk: true),
+        new TestConfig(
+            cfeFromBuilderMarker, 'cfe from builder',
+            experimentalFlags: const {ExperimentalFlag.nonNullable: true},
+            librariesSpecificationUri: createUriForFileName('libraries.json'),
+            compileSdk: true)
+      ]));
 }
 
 class InheritanceDataComputer extends DataComputer<String> {
diff --git a/pkg/front_end/test/incremental_dart2js_tester.dart b/pkg/front_end/test/incremental_dart2js_tester.dart
index 086c390..0eb21c7 100644
--- a/pkg/front_end/test/incremental_dart2js_tester.dart
+++ b/pkg/front_end/test/incremental_dart2js_tester.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import "dart:developer";
 import 'dart:io' show Platform;
 
 import 'package:front_end/src/api_prototype/compiler_options.dart';
@@ -17,11 +18,14 @@
 main(List<String> args) async {
   bool fast = false;
   bool useExperimentalInvalidation = false;
+  bool addDebugBreaks = false;
   for (String arg in args) {
     if (arg == "--fast") {
       fast = true;
     } else if (arg == "--experimental") {
       useExperimentalInvalidation = true;
+    } else if (arg == "--addDebugBreaks") {
+      addDebugBreaks = true;
     } else {
       throw "Unsupported argument: $arg";
     }
@@ -158,6 +162,9 @@
         print("=====");
       }
     }
+    if (addDebugBreaks) {
+      debugger();
+    }
     print("-----");
   }
 
diff --git a/pkg/front_end/test/incremental_load_from_dill_suite.dart b/pkg/front_end/test/incremental_load_from_dill_suite.dart
index 0f7194b..79b25aa 100644
--- a/pkg/front_end/test/incremental_load_from_dill_suite.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_suite.dart
@@ -40,12 +40,14 @@
 
 import 'package:front_end/src/fasta/incremental_serializer.dart'
     show IncrementalSerializer;
+import 'package:front_end/src/fasta/kernel/kernel_api.dart';
 
 import 'package:front_end/src/fasta/kernel/utils.dart' show ByteSink;
 
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 
 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
+import 'package:kernel/class_hierarchy.dart';
 
 import 'package:kernel/kernel.dart'
     show
@@ -55,6 +57,7 @@
         Field,
         Library,
         LibraryDependency,
+        Member,
         Name,
         Procedure;
 
@@ -608,25 +611,8 @@
       }
     }
 
-    Uri uri = data.loadedFrom
-        .resolve(data.loadedFrom.pathSegments.last + ".world.$worldNum.expect");
-    String expected;
-    File file = new File.fromUri(uri);
-    if (context.updateExpectations) {
-      file.writeAsStringSync(actualSerialized);
-    }
-    if (file.existsSync()) {
-      expected = file.readAsStringSync();
-    }
-    if (context.updateExpectations) {
-      file.writeAsStringSync(actualSerialized);
-    } else if (expected != actualSerialized) {
-      String extra = "";
-      if (expected == null) extra = "Expect file did not exist.\n";
-      throw "${extra}Unexpected serialized representation. "
-          "Fix or update $uri to contain the below:\n\n"
-          "$actualSerialized";
-    }
+    checkExpectFile(data, worldNum, context, actualSerialized);
+    checkClassHierarchy(compiler, component, data, worldNum, context);
 
     int nonSyntheticLibraries = countNonSyntheticLibraries(component);
     int nonSyntheticPlatformLibraries =
@@ -750,9 +736,31 @@
     }
 
     if (world["expressionCompilation"] != null) {
-      Uri uri = base.resolve(world["expressionCompilation"]["uri"]);
-      String expression = world["expressionCompilation"]["expression"];
-      await compiler.compileExpression(expression, {}, [], "debugExpr", uri);
+      List compilations;
+      if (world["expressionCompilation"] is List) {
+        compilations = world["expressionCompilation"];
+      } else {
+        compilations = [world["expressionCompilation"]];
+      }
+      for (Map compilation in compilations) {
+        clearPrevErrorsEtc();
+        bool expectErrors = compilation["errors"] ?? false;
+        bool expectWarnings = compilation["warnings"] ?? false;
+        Uri uri = base.resolve(compilation["uri"]);
+        String expression = compilation["expression"];
+        await compiler.compileExpression(expression, {}, [], "debugExpr", uri);
+        if (gotError && !expectErrors) {
+          throw "Got error(s) on expression compilation: ${formattedErrors}.";
+        } else if (!gotError && expectErrors) {
+          throw "Didn't get any errors.";
+        }
+        if (gotWarning && !expectWarnings) {
+          throw "Got warning(s) on expression compilation: "
+              "${formattedWarnings}.";
+        } else if (!gotWarning && expectWarnings) {
+          throw "Didn't get any warnings.";
+        }
+      }
     }
 
     if (!noFullComponent && incrementalSerialization == true) {
@@ -826,6 +834,166 @@
   }
 }
 
+void checkExpectFile(
+    TestData data, int worldNum, Context context, String actualSerialized) {
+  Uri uri = data.loadedFrom
+      .resolve(data.loadedFrom.pathSegments.last + ".world.$worldNum.expect");
+  String expected;
+  File file = new File.fromUri(uri);
+  if (file.existsSync()) {
+    expected = file.readAsStringSync();
+  }
+  if (expected != actualSerialized) {
+    if (context.updateExpectations) {
+      file.writeAsStringSync(actualSerialized);
+    } else {
+      String extra = "";
+      if (expected == null) extra = "Expect file did not exist.\n";
+      throw "${extra}Unexpected serialized representation. "
+          "Fix or update $uri to contain the below:\n\n"
+          "$actualSerialized";
+    }
+  }
+}
+
+/// Check that the class hierarchy is up-to-date with reality.
+///
+/// This has the option to do expect files, but it's disabled by default
+/// while we're trying to figure out if it's useful or not.
+void checkClassHierarchy(TestIncrementalCompiler compiler, Component component,
+    TestData data, int worldNum, Context context,
+    {bool checkExpectFile: false}) {
+  ClassHierarchy classHierarchy = compiler.getClassHierarchy();
+  if (classHierarchy is! ClosedWorldClassHierarchy) {
+    throw "Expected the class hierarchy to be ClosedWorldClassHierarchy "
+        "but it wasn't. It was ${classHierarchy.runtimeType}";
+  }
+  List<ForTestingClassInfo> classHierarchyData =
+      (classHierarchy as ClosedWorldClassHierarchy).getTestingClassInfo();
+  Map<Class, ForTestingClassInfo> classHierarchyMap =
+      new Map<Class, ForTestingClassInfo>();
+  for (ForTestingClassInfo info in classHierarchyData) {
+    if (classHierarchyMap[info.classNode] != null) {
+      throw "Two entries for ${info.classNode}";
+    }
+    classHierarchyMap[info.classNode] = info;
+  }
+
+  StringBuffer sb = new StringBuffer();
+  for (Library library in component.libraries) {
+    if (library.importUri.scheme == "dart") continue;
+    sb.writeln("Library ${library.importUri}");
+    for (Class c in library.classes) {
+      sb.writeln("  - Class ${c.name}");
+      ForTestingClassInfo info = classHierarchyMap[c];
+      if (info == null) {
+        throw "Didn't find any class hierarchy info for $c";
+      }
+      if (info.lazyDeclaredGettersAndCalls != null) {
+        sb.writeln("    - lazyDeclaredGettersAndCalls:");
+        for (Member member in info.lazyDeclaredGettersAndCalls) {
+          sb.writeln("      - ${member.name.name}");
+        }
+
+        // Expect these to be the same as in the class.
+        Set<Member> members = info.lazyDeclaredGettersAndCalls.toSet();
+        for (Field f in c.fields) {
+          if (f.isStatic) continue;
+          if (!f.hasImplicitGetter) continue;
+          if (!members.remove(f)) {
+            throw "Didn't find ${f.name.name} in lazyDeclaredGettersAndCalls "
+                "for ${c.name} in ${library.importUri}";
+          }
+        }
+        for (Procedure p in c.procedures) {
+          if (p.isStatic) continue;
+          if (p.isSetter) continue;
+          if (!members.remove(p)) {
+            throw "Didn't find ${p.name.name} in lazyDeclaredGettersAndCalls "
+                "for ${c.name} in ${library.importUri}";
+          }
+        }
+        if (members.isNotEmpty) {
+          throw "Still have ${members.map((m) => m.name.name)} left "
+              "for ${c.name} in ${library.importUri}";
+        }
+      }
+      if (info.lazyDeclaredSetters != null) {
+        sb.writeln("    - lazyDeclaredSetters:");
+        for (Member member in info.lazyDeclaredSetters) {
+          sb.writeln("      - ${member.name.name}");
+        }
+
+        // Expect these to be the same as in the class.
+        Set<Member> members = info.lazyDeclaredSetters.toSet();
+        for (Field f in c.fields) {
+          if (f.isStatic) continue;
+          if (!f.hasImplicitSetter) continue;
+          if (!members.remove(f)) {
+            throw "Didn't find $f in lazyDeclaredSetters for $c";
+          }
+        }
+        for (Procedure p in c.procedures) {
+          if (p.isStatic) continue;
+          if (!p.isSetter) continue;
+          if (!members.remove(p)) {
+            throw "Didn't find $p in lazyDeclaredSetters for $c";
+          }
+        }
+        if (members.isNotEmpty) {
+          throw "Still have ${members.map((m) => m.name.name)} left "
+              "for ${c.name} in ${library.importUri}";
+        }
+      }
+      if (info.lazyImplementedGettersAndCalls != null) {
+        sb.writeln("    - lazyImplementedGettersAndCalls:");
+        for (Member member in info.lazyImplementedGettersAndCalls) {
+          sb.writeln("      - ${member.name.name}");
+        }
+      }
+      if (info.lazyImplementedSetters != null) {
+        sb.writeln("    - lazyImplementedSetters:");
+        for (Member member in info.lazyImplementedSetters) {
+          sb.writeln("      - ${member.name.name}");
+        }
+      }
+      if (info.lazyInterfaceGettersAndCalls != null) {
+        sb.writeln("    - lazyInterfaceGettersAndCalls:");
+        for (Member member in info.lazyInterfaceGettersAndCalls) {
+          sb.writeln("      - ${member.name.name}");
+        }
+      }
+      if (info.lazyInterfaceSetters != null) {
+        sb.writeln("    - lazyInterfaceSetters:");
+        for (Member member in info.lazyInterfaceSetters) {
+          sb.writeln("      - ${member.name.name}");
+        }
+      }
+    }
+  }
+  if (checkExpectFile) {
+    String actualClassHierarchy = sb.toString();
+    Uri uri = data.loadedFrom.resolve(data.loadedFrom.pathSegments.last +
+        ".world.$worldNum.class_hierarchy.expect");
+    String expected;
+    File file = new File.fromUri(uri);
+    if (file.existsSync()) {
+      expected = file.readAsStringSync();
+    }
+    if (expected != actualClassHierarchy) {
+      if (context.updateExpectations) {
+        file.writeAsStringSync(actualClassHierarchy);
+      } else {
+        String extra = "";
+        if (expected == null) extra = "Expect file did not exist.\n";
+        throw "${extra}Unexpected serialized representation. "
+            "Fix or update $uri to contain the below:\n\n"
+            "$actualClassHierarchy";
+      }
+    }
+  }
+}
+
 void checkErrorsAndWarnings(
     Set<String> prevFormattedErrors,
     Set<String> formattedErrors,
@@ -877,14 +1045,14 @@
       throw "Incremental serialization didn't remove any libraries!";
     }
     if (librariesAfter < librariesBefore && sink.builder.isEmpty) {
-      throw "Incremental serialization din't output any bytes, "
+      throw "Incremental serialization didn't output any bytes, "
           "but did remove libraries";
     } else if (librariesAfter == librariesBefore && !sink.builder.isEmpty) {
       throw "Incremental serialization did output bytes, "
           "but didn't remove libraries";
     }
     if (librariesAfter < librariesBefore) {
-      // If we actually did incremenally serialize anything, check the output!
+      // If we actually did incrementally serialize anything, check the output!
       BinaryPrinter printer = new BinaryPrinter(sink);
       printer.writeComponentFile(c);
       List<int> bytes = sink.builder.takeBytes();
@@ -1367,10 +1535,10 @@
 void doSimulateTransformer(Component c) {
   for (Library lib in c.libraries) {
     if (lib.fields
-        .where((f) => f.name.name == "lalala_SimulateTransformer")
+        .where((f) => f.name.name == "unique_SimulateTransformer")
         .toList()
         .isNotEmpty) continue;
-    Name fieldName = new Name("lalala_SimulateTransformer");
+    Name fieldName = new Name("unique_SimulateTransformer");
     Field field = new Field(fieldName,
         isFinal: true,
         reference: lib.reference.canonicalName
@@ -1379,10 +1547,10 @@
     lib.addMember(field);
     for (Class c in lib.classes) {
       if (c.fields
-          .where((f) => f.name.name == "lalala_SimulateTransformer")
+          .where((f) => f.name.name == "unique_SimulateTransformer")
           .toList()
           .isNotEmpty) continue;
-      fieldName = new Name("lalala_SimulateTransformer");
+      fieldName = new Name("unique_SimulateTransformer");
       field = new Field(fieldName,
           isFinal: true,
           reference: c.reference.canonicalName
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 5796688..9cad39e 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -64,6 +64,7 @@
 atoms
 attributes
 automagically
+auxiliary
 awaiting
 b
 b0i
@@ -357,6 +358,7 @@
 fcov
 fe
 feff
+fetched
 ff
 fff
 ffff
@@ -422,6 +424,7 @@
 gzipped
 h
 hadn't
+hang
 harness
 hashes
 hashing
@@ -606,6 +609,7 @@
 mm
 mn
 mockito
+momentarily
 monomorphic
 morebottom
 moretop
@@ -634,10 +638,14 @@
 nnbd
 node's
 nonimplementation
+normalization
+notifier
+notifying
 notion
 nr
 ns
 nsm
+nt
 nth
 nullabilities
 nullability
@@ -796,6 +804,7 @@
 recursion
 red
 redeclared
+redefine
 redirectee
 redirector
 reexports
@@ -966,11 +975,13 @@
 swapped
 sweep
 synchronously
+syncs
 synth
 t
 tagged
 tagger
 tags
+tailor
 taking
 talks
 tb
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index 25c78da..26cf233 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -1380,6 +1380,7 @@
 improve
 improved
 in
+inability
 inappropriate
 inbound
 include
@@ -2662,6 +2663,7 @@
 sorts
 sought
 sound
+soundness
 source
 sources
 space
@@ -2842,6 +2844,8 @@
 targeting
 targets
 task
+tear
+tearing
 technically
 technique
 template
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 888bc3d..31322a38 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -30,8 +30,10 @@
 flutter_runner
 futureor
 h
+interop
 libraries.json
 loadlibrary
+JS
 name.#name
 name.stack
 native('native
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 8a63992..468adfa 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -57,6 +57,7 @@
 bootstrap
 bots
 bowtie
+brand
 brave
 brown
 builddir
@@ -111,6 +112,7 @@
 dashes
 day
 db
+debugger
 decrease
 decrements
 def
@@ -190,6 +192,7 @@
 futures
 gallery
 gamma
+gave
 gc
 gen
 generators
@@ -201,6 +204,7 @@
 gunk
 hackish
 harness
+helper2
 hest
 heuristics
 hi
@@ -276,6 +280,8 @@
 mx
 mysdk
 negatable
+newest
+newworld
 ninja
 nonexisting
 noo
@@ -359,6 +365,8 @@
 shortest
 shot
 signalled
+slight
+smoke
 somehow
 spans
 spell
@@ -398,6 +406,7 @@
 title
 tpt
 transitively
+translators
 triangle
 trigger
 triggers
@@ -434,6 +443,7 @@
 whitelisting
 wins
 workflow
+worlds
 ws
 x's
 xxx
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index b6de873..da0ab76 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -125,39 +125,41 @@
   }
 }
 
-class Print extends Step<Component, Component, ChainContext> {
+class Print extends Step<ComponentResult, ComponentResult, ChainContext> {
   const Print();
 
   String get name => "print";
 
-  Future<Result<Component>> run(Component component, _) async {
+  Future<Result<ComponentResult>> run(ComponentResult result, _) async {
+    Component component = result.component;
+
     StringBuffer sb = new StringBuffer();
     await CompilerContext.runWithDefaultOptions((compilerContext) async {
       compilerContext.uriToSource.addAll(component.uriToSource);
 
       Printer printer = new Printer(sb);
       for (Library library in component.libraries) {
-        if (library.importUri.scheme != "dart" &&
-            library.importUri.scheme != "package") {
+        if (result.userLibraries.contains(library.importUri)) {
           printer.writeLibraryFile(library);
         }
       }
       printer.writeConstantTable(component);
     });
     print("$sb");
-    return pass(component);
+    return pass(result);
   }
 }
 
-class Verify extends Step<Component, Component, ChainContext> {
+class Verify extends Step<ComponentResult, ComponentResult, ChainContext> {
   final bool fullCompile;
 
   const Verify(this.fullCompile);
 
   String get name => "verify";
 
-  Future<Result<Component>> run(
-      Component component, ChainContext context) async {
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, ChainContext context) async {
+    Component component = result.component;
     StringBuffer messages = new StringBuffer();
     ProcessedOptions options = new ProcessedOptions(
         options: new CompilerOptions()
@@ -174,32 +176,33 @@
           isOutline: !fullCompile, skipPlatform: true);
       assert(verificationErrors.isEmpty || messages.isNotEmpty);
       if (messages.isEmpty) {
-        return pass(component);
+        return pass(result);
       } else {
-        return new Result<Component>(null,
+        return new Result<ComponentResult>(null,
             context.expectationSet["VerificationError"], "$messages", null);
       }
     }, errorOnMissingInput: false);
   }
 }
 
-class TypeCheck extends Step<Component, Component, ChainContext> {
+class TypeCheck extends Step<ComponentResult, ComponentResult, ChainContext> {
   const TypeCheck();
 
   String get name => "typeCheck";
 
-  Future<Result<Component>> run(
-      Component component, ChainContext context) async {
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, ChainContext context) async {
+    Component component = result.component;
     ErrorFormatter errorFormatter = new ErrorFormatter();
     NaiveTypeChecker checker =
         new NaiveTypeChecker(errorFormatter, component, ignoreSdk: true);
     checker.checkComponent(component);
     if (errorFormatter.numberOfFailures == 0) {
-      return pass(component);
+      return pass(result);
     } else {
       errorFormatter.failures.forEach(print);
       print('------- Found ${errorFormatter.numberOfFailures} errors -------');
-      return new Result<Component>(
+      return new Result<ComponentResult>(
           null,
           context.expectationSet["TypeCheckError"],
           '${errorFormatter.numberOfFailures} type errors',
@@ -208,7 +211,8 @@
   }
 }
 
-class MatchExpectation extends Step<Component, Component, MatchContext> {
+class MatchExpectation
+    extends Step<ComponentResult, ComponentResult, MatchContext> {
   final String suffix;
   final bool serializeFirst;
 
@@ -220,19 +224,19 @@
 
   String get name => "match expectations";
 
-  Future<Result<Component>> run(Component component, MatchContext context) {
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, MatchContext context) {
+    Component component = result.component;
+
     Component componentToText = component;
     if (serializeFirst) {
       component.computeCanonicalNames();
-      List<Library> sdkLibraries = component.libraries
-          .where((l) => l.importUri.scheme == "dart")
-          .toList();
+      List<Library> sdkLibraries =
+          component.libraries.where((l) => !result.isUserLibrary(l)).toList();
 
       ByteSink sink = new ByteSink();
       Component writeMe = new Component(
-          libraries: component.libraries
-              .where((l) => l.importUri.scheme != "dart")
-              .toList());
+          libraries: component.libraries.where(result.isUserLibrary).toList());
       writeMe.uriToSource.addAll(component.uriToSource);
       if (component.problemsAsJson != null) {
         writeMe.problemsAsJson =
@@ -252,10 +256,8 @@
         (context as dynamic).componentToDiagnostics[component];
     Uri uri =
         component.uriToSource.keys.firstWhere((uri) => uri?.scheme == "file");
-    Iterable<Library> libraries = componentToText.libraries.where(
-        ((Library library) =>
-            library.importUri.scheme != "dart" &&
-            library.importUri.scheme != "package"));
+    Iterable<Library> libraries =
+        componentToText.libraries.where(result.isUserLibrary);
     Uri base = uri.resolve(".");
     Uri dartBase = Uri.base;
     StringBuffer buffer = new StringBuffer();
@@ -281,20 +283,22 @@
     actual = actual.replaceAll("$base", "org-dartlang-testcase:///");
     actual = actual.replaceAll("$dartBase", "org-dartlang-testcase-sdk:///");
     actual = actual.replaceAll("\\n", "\n");
-    return context.match<Component>(suffix, actual, uri, component,
+    return context.match<ComponentResult>(suffix, actual, uri, result,
         onMismatch: serializeFirst
             ? context.expectationFileMismatchSerialized
             : context.expectationFileMismatch);
   }
 }
 
-class KernelTextSerialization extends Step<Component, Component, ChainContext> {
+class KernelTextSerialization
+    extends Step<ComponentResult, ComponentResult, ChainContext> {
   const KernelTextSerialization();
 
   String get name => "kernel text serialization";
 
-  Future<Result<Component>> run(
-      Component component, ChainContext context) async {
+  Future<Result<ComponentResult>> run(
+      ComponentResult result, ChainContext context) async {
+    Component component = result.component;
     StringBuffer messages = new StringBuffer();
     ProcessedOptions options = new ProcessedOptions(
         options: new CompilerOptions()
@@ -347,23 +351,24 @@
       }
 
       if (verifier.failures.isNotEmpty) {
-        return new Result<Component>(
+        return new Result<ComponentResult>(
             null,
             context.expectationSet["TextSerializationFailure"],
             "$messages",
             null);
       }
-      return pass(component);
+      return pass(result);
     });
   }
 }
 
-class WriteDill extends Step<Component, Uri, ChainContext> {
+class WriteDill extends Step<ComponentResult, Uri, ChainContext> {
   const WriteDill();
 
   String get name => "write .dill";
 
-  Future<Result<Uri>> run(Component component, _) async {
+  Future<Result<Uri>> run(ComponentResult result, _) async {
+    Component component = result.component;
     Directory tmp = await Directory.systemTemp.createTemp();
     Uri uri = tmp.uri.resolve("generated.dill");
     File generated = new File.fromUri(uri);
@@ -457,3 +462,14 @@
   }
   print("Wrote $uri");
 }
+
+class ComponentResult {
+  final Component component;
+  final Set<Uri> userLibraries;
+
+  ComponentResult(this.component, this.userLibraries);
+
+  bool isUserLibrary(Library library) {
+    return userLibraries.contains(library.importUri);
+  }
+}
diff --git a/pkg/front_end/test/vm_service_for_leak_detection.dart b/pkg/front_end/test/vm_service_for_leak_detection.dart
index c1819e2..7d3c6ba 100644
--- a/pkg/front_end/test/vm_service_for_leak_detection.dart
+++ b/pkg/front_end/test/vm_service_for_leak_detection.dart
@@ -14,6 +14,8 @@
           "package:front_end/src/fasta/source/source_extension_builder.dart"),
       "SourceExtensionBuilder",
       ["_extension"]));
+  interests.add(new helper.Interest(
+      Uri.parse("package:kernel/ast.dart"), "Library", ["fileUri"]));
   helper.VMServiceHeapHelper heapHelper = new helper.VMServiceHeapHelper(
       interests,
       [
@@ -25,15 +27,10 @@
         new helper.Interest(Uri.parse("package:kernel/ast.dart"), "Extension",
             ["name", "fileUri"]),
       ],
-      false);
+      true);
   heapHelper.start([
-    Platform.script.resolve("incremental_load_from_dill_suite.dart").toString(),
-    "-DaddDebugBreaks=true",
-    // "--",
-    // "incremental_load_from_dill/no_outline_change_34"
-    // "incremental_load_from_dill/no_outline_change_10"
-    "incremental_load_from_dill/deleting_file"
-    // "incremental_load_from_dill/no_outline_change_2"
-    // "incremental_load_from_dill/incremental_serialization_1"
+    Platform.script.resolve("incremental_dart2js_tester.dart").toString(),
+    "--fast",
+    "--addDebugBreaks",
   ]);
 }
diff --git a/pkg/front_end/test/vm_service_heap_helper.dart b/pkg/front_end/test/vm_service_heap_helper.dart
index 56cb578..b4a80f1 100644
--- a/pkg/front_end/test/vm_service_heap_helper.dart
+++ b/pkg/front_end/test/vm_service_heap_helper.dart
@@ -126,7 +126,6 @@
                 }
               }
               String sbToString = sb.toString();
-              print(sbToString);
               if (!seenPrints.add(sbToString)) {
                 duplicatePrints.add(sbToString);
               }
@@ -142,7 +141,8 @@
         print("This might be a memory leak!");
         print("");
         for (String s in duplicatePrints) {
-          print("$s");
+          int count = groupedByToString[s].length;
+          print("$s ($count)");
           print("");
         }
         print("======================================");
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
index 65d8f24..b00f945 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
@@ -4,7 +4,7 @@
               ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^" as{TypeError} dart.core::num*).{dart.core::num::+}(5);
+  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^" as{TypeError,ForDynamic} dart.core::num*).{dart.core::num::+}(5);
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
index 2cb613c..d89f1f9 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::id<main::A::T*>(x as{TypeError} main::A::T*);
+  return main::id<main::A::T*>(x as{TypeError,ForDynamic} main::A::T*);
diff --git a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
index 4436d62..7cde4b9 100644
--- a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
@@ -5,12 +5,12 @@
     if(!a._usedData.{dart.core::Object::==}(b._usedData) || !a._deletedKeys.{dart.core::Object::==}(b._deletedKeys) || !a._hashMask.{dart.core::Object::==}(b._hashMask) || !a._index.length.{dart.core::Object::==}(b._index.length) || !a._data.length.{dart.core::Object::==}(b._data.length)) {
       return false;
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._index.length as{TypeError} dart.core::num*); i = i.{dart.core::num::+}(1)) {
+    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._index.length as{TypeError,ForDynamic} dart.core::num*); i = i.{dart.core::num::+}(1)) {
       if(!a._index.[](i).{dart.core::Object::==}(b._index.[](i))) {
         return false;
       }
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._data.length as{TypeError} dart.core::num*); i = i.{dart.core::num::+}(1)) {
+    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._data.length as{TypeError,ForDynamic} dart.core::num*); i = i.{dart.core::num::+}(1)) {
       dynamic ad = a._data.[](i);
       dynamic bd = b._data.[](i);
       if(!dart.core::identical(ad, bd) && !(ad.{dart.core::Object::==}(a) && bd.{dart.core::Object::==}(b))) {
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
index 5b54940..66d7a12 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
-  return main::id<main::A::debugExpr::T*>(x as{TypeError} main::A::debugExpr::T*);
+  return main::id<main::A::debugExpr::T*>(x as{TypeError,ForDynamic} main::A::debugExpr::T*);
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.strong.expect b/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
index 24d7f52..c2f32b4 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
@@ -474,7 +474,7 @@
   self::expect(n0, let final self::IntClass* #t372 = v in #t372.{core::Object::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t372), v.{core::Object::==}(null));
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic} core::bool*) {
     expected = null;
   }
   if(!expected.{core::Object::==}(actual)) {
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
index 24d7f52..c2f32b4 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
@@ -474,7 +474,7 @@
   self::expect(n0, let final self::IntClass* #t372 = v in #t372.{core::Object::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t372), v.{core::Object::==}(null));
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic} core::bool*) {
     expected = null;
   }
   if(!expected.{core::Object::==}(actual)) {
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
index bcdd19f..f4366a8 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
@@ -52,9 +52,9 @@
   return #this.{self::Class::field};
 static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
-    return value.<(0) as{TypeError} core::bool* ?{dynamic} value.unary-() : value;
+    return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
   }
-  #this.{self::Class::field} = abs.call(value) as{TypeError} core::int*;
+  #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
 }
 static method Extension|testInternal(final self::Class* #this) → dynamic {
   self::expect(null, #this.{self::Class::field});
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
index bcdd19f..f4366a8 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
@@ -52,9 +52,9 @@
   return #this.{self::Class::field};
 static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
-    return value.<(0) as{TypeError} core::bool* ?{dynamic} value.unary-() : value;
+    return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
   }
-  #this.{self::Class::field} = abs.call(value) as{TypeError} core::int*;
+  #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
 }
 static method Extension|testInternal(final self::Class* #this) → dynamic {
   self::expect(null, #this.{self::Class::field});
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
index 65f4bbd..b9ec15a 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
@@ -24,6 +24,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^".+(42) as{TypeError} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
index d5c36de..355e22c 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
@@ -24,6 +24,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^".+(42) as{TypeError} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
index acc5dad..841c0e0 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
@@ -186,7 +186,7 @@
   method cMethod() → dynamic
     ;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -202,7 +202,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -226,7 +226,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.strong.expect b/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
index ec953d2..3192669 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
@@ -182,7 +182,7 @@
   method bMethod() → dynamic {}
   method cMethod() → dynamic {}
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -199,7 +199,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -225,7 +225,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
index 7200a65..f027a20 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D*
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/async_nested.dart.strong.expect b/pkg/front_end/testcases/general/async_nested.dart.strong.expect
index 5c3da0c..6916565 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.strong.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.strong.expect
@@ -20,7 +20,7 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
   core::print(actual);
   if(!actual.{core::String::==}(expected)) {
     throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect b/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect
index 27b7653..2fe75da 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[])), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", <self::Node*>[:async_temporary_2, :async_temporary_0, _in::unsafeCast<self::Node*>(:result)]);
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!actual.{core::String::==}(expected)) {
           throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.expect
index 9cf401a..a0b6fdd 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.expect
@@ -14,14 +14,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -41,65 +41,65 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method others() → dynamic async {
   core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError} core::int*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
   self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
   core::bool* a = false;
   core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError} core::bool*;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
index b6697d5..3840565 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
@@ -15,14 +15,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -42,7 +42,7 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
@@ -67,27 +67,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -122,23 +122,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -174,23 +174,23 @@
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1);
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -232,17 +232,17 @@
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         core::int* cnt = 2;
         core::List<core::int*>* b = <core::int*>[1, 2, 3];
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError} core::int*);
+        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError,ForDynamic} core::int*);
         self::expect(1, b.{core::List::[]}(cnt));
         :async_temporary_4 = b.{core::List::[]}(0);
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -282,7 +282,7 @@
           ;
         else {
           [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = (:result as{TypeError} core::bool*).==(true);
+          :async_temporary_0 = (:result as{TypeError,ForDynamic} core::bool*).==(true);
         }
         core::bool* c = :async_temporary_0;
         self::expect(true, c);
diff --git a/pkg/front_end/testcases/general/bug37476.dart.strong.expect b/pkg/front_end/testcases/general/bug37476.dart.strong.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.strong.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.strong.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect
index 92d9353..5c59c15 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect
index 6da0135..441b505 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general/classes.dart.strong.expect b/pkg/front_end/testcases/general/classes.dart.strong.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general/classes.dart.strong.expect
+++ b/pkg/front_end/testcases/general/classes.dart.strong.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect b/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
index 7cf2d27..62aa508 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
index 7cf2d27..62aa508 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect
index f133a9d..3044135 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t1.{core::List::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t1.{core::List::add}(i);
@@ -27,19 +27,19 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t2.{core::Set::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t2.{core::Set::add}(i);
@@ -47,19 +47,19 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t3.{core::Map::[]=}(i, i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(i, i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t3.{core::Map::[]=}(i, i);
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
index ac4ad8d..7bd3d63 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
@@ -8,14 +8,14 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -28,7 +28,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t1.{core::List::add}(i);
       }
     }
@@ -38,14 +38,14 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -58,7 +58,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t2.{core::Set::add}(i);
       }
     }
@@ -68,14 +68,14 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -88,7 +88,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t3.{core::Map::[]=}(i, i);
       }
     }
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect
index c865110..70902fb 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect
@@ -443,193 +443,193 @@
 static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(42);
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(42);
     #t2.{core::Set::add}(null);
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}("bar", 42);
     #t3.{core::Map::[]=}("baz", null);
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t4.{core::List::add}(dynVar);
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t5.{core::Set::add}(dynVar);
     #t5.{core::Set::add}(null);
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t6.{core::Map::[]=}("bar", dynVar);
     #t6.{core::Map::[]=}("baz", null);
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t7.{core::List::add}(<core::int*>[42]);
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t8.{core::Set::add}(<core::int*>[42]);
     #t8.{core::Set::add}(null);
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t9.{core::Map::[]=}("bar", <core::int*>[42]);
     #t9.{core::Map::[]=}("baz", null);
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t11 in <core::int*>[42])
         #t10.{core::List::add}(#t11);
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t13 in <core::int*>[42])
         #t12.{core::Set::add}(#t13);
     #t12.{core::Set::add}(null);
   } =>#t12;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t15 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
         #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
     #t14.{core::Map::[]=}("baz", null);
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t17 in <dynamic>[dynVar])
         #t16.{core::List::add}(#t17);
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t19 in <dynamic>[dynVar])
         #t18.{core::Set::add}(#t19);
     #t18.{core::Set::add}(null);
   } =>#t18;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, dynamic>* #t21 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
         #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
     #t20.{core::Map::[]=}("baz", null);
   } =>#t20;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t23 in <core::List<core::int*>*>[<core::int*>[42]])
         #t22.{core::List::add}(#t23);
   } =>#t22;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t25 in <core::List<core::int*>*>[<core::int*>[42]])
         #t24.{core::Set::add}(#t25);
     #t24.{core::Set::add}(null);
   } =>#t24;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
         #t26.{core::Map::[]=}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
     #t26.{core::Map::[]=}("baz", null);
   } =>#t26;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t28 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t29 in <core::int*>[42])
           #t28.{core::List::add}(#t29);
   } =>#t28;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t31 in <core::int*>[42])
           #t30.{core::Set::add}(#t31);
     #t30.{core::Set::add}(null);
   } =>#t30;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t33 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
           #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
     #t32.{core::Map::[]=}("baz", null);
   } =>#t32;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t34 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t35 in <dynamic>[dynVar])
           #t34.{core::List::add}(#t35);
   } =>#t34;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t37 in <dynamic>[dynVar])
           #t36.{core::Set::add}(#t37);
     #t36.{core::Set::add}(null);
   } =>#t36;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, dynamic>* #t39 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
           #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
     #t38.{core::Map::[]=}("baz", null);
   } =>#t38;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t41 in <core::List<core::int*>*>[<core::int*>[42]])
           #t40.{core::List::add}(#t41);
   } =>#t40;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t43 in <core::List<core::int*>*>[<core::int*>[42]])
           #t42.{core::Set::add}(#t43);
     #t42.{core::Set::add}(null);
   } =>#t42;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
           #t44.{core::Map::[]=}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
     #t44.{core::Map::[]=}("baz", null);
   } =>#t44;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t47 in <core::List<core::int*>*>[<core::int*>[]])
         #t46.{core::List::add}(#t47);
   } =>#t46;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t49 in <core::List<core::int*>*>[<core::int*>[]])
         #t48.{core::Set::add}(#t49);
     #t48.{core::Set::add}(null);
@@ -639,173 +639,173 @@
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t51 in let final core::Set<core::List<core::int*>*>* #t52 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t53 = #t52.{core::Set::add}(<core::int*>[]) in #t52)
         #t50.{core::List::add}(#t51);
   } =>#t50;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t55 in let final core::Set<core::List<core::int*>*>* #t56 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t57 = #t56.{core::Set::add}(<core::int*>[]) in #t56)
         #t54.{core::Set::add}(#t55);
     #t54.{core::Set::add}(null);
   } =>#t54;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t59 in <core::List<core::int*>*>[<core::int*>[]])
           #t58.{core::List::add}(#t59);
   } =>#t58;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t61 in <core::List<core::int*>*>[<core::int*>[]])
           #t60.{core::Set::add}(#t61);
     #t60.{core::Set::add}(null);
   } =>#t60;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t62.{core::Map::[]=}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
     #t62.{core::Map::[]=}("baz", null);
   } =>#t62;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t64 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t65 in <core::int*>[])
         #t64.{core::List::add}(#t65);
   } =>#t64;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t67 in <core::int*>[])
         #t66.{core::Set::add}(#t67);
     #t66.{core::Set::add}(null);
   } =>#t66;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t69 in <core::String*, core::int*>{}.{core::Map::entries})
         #t68.{core::Map::[]=}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
     #t68.{core::Map::[]=}("baz", null);
   } =>#t68;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t71 in let final core::Set<core::int*>* #t72 = col::LinkedHashSet::•<core::int*>() in #t72)
         #t70.{core::List::add}(#t71);
   } =>#t70;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t74 in let final core::Set<core::int*>* #t75 = col::LinkedHashSet::•<core::int*>() in #t75)
         #t73.{core::Set::add}(#t74);
     #t73.{core::Set::add}(null);
   } =>#t73;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t76 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t77 in <core::int*>[])
           #t76.{core::List::add}(#t77);
   } =>#t76;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t79 in <core::int*>[])
           #t78.{core::Set::add}(#t79);
     #t78.{core::Set::add}(null);
   } =>#t78;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t81 in <core::String*, core::int*>{}.{core::Map::entries})
           #t80.{core::Map::[]=}(#t81.{core::MapEntry::key}, #t81.{core::MapEntry::value});
     #t80.{core::Map::[]=}("baz", null);
   } =>#t80;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t83 in <core::List<core::int*>*>[<core::int*>[]])
         #t82.{core::List::add}(#t83);
   } =>#t82;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t85 in <core::List<core::int*>*>[<core::int*>[]])
         #t84.{core::Set::add}(#t85);
     #t84.{core::Set::add}(null);
   } =>#t84;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
     #t86.{core::Map::[]=}("baz", null);
   } =>#t86;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t89 in <core::List<core::int*>*>[<core::int*>[]])
           #t88.{core::List::add}(#t89);
   } =>#t88;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t91 in <core::List<core::int*>*>[<core::int*>[]])
           #t90.{core::Set::add}(#t91);
     #t90.{core::Set::add}(null);
   } =>#t90;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t92.{core::Map::[]=}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
     #t92.{core::Map::[]=}("baz", null);
   } =>#t92;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t94.{core::List::add}(<core::int*>[]);
   } =>#t94;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t95.{core::Set::add}(<core::int*>[]);
     #t95.{core::Set::add}(null);
   } =>#t95;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t96.{core::List::add}(<core::int*>[]);
   } =>#t96;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t97.{core::Set::add}(<core::int*>[]);
     #t97.{core::Set::add}(null);
   } =>#t97;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t98 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t98.{core::List::add}(42);
     else
       #t98.{core::List::add}(3.14);
   } =>#t98;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -813,7 +813,7 @@
   } =>#t99;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -821,7 +821,7 @@
   } =>#t100;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t101 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t102 in listInt)
         #t101.{core::List::add}(#t102);
     else
@@ -830,7 +830,7 @@
   } =>#t101;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t105 in listInt)
         #t104.{core::Set::add}(#t105);
     else
@@ -840,7 +840,7 @@
   } =>#t104;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::num*>* #t108 in mapToInt.{core::Map::entries})
         #t107.{core::Map::[]=}(#t108.{core::MapEntry::key}, #t108.{core::MapEntry::value});
     else
@@ -850,38 +850,38 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t111 in listInt)
         #t110.{core::List::add}(#t111);
     else
-      for (final dynamic #t112 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t112 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t110.{core::List::add}(#t112);
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t114 in listInt)
         #t113.{core::Set::add}(#t114);
     else
-      for (final dynamic #t115 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t115 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t113.{core::Set::add}(#t115);
     #t113.{core::Set::add}(null);
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else
-      for (final dynamic #t117 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t117 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t116.{core::Set::add}(#t117);
     #t116.{core::Set::add}(null);
   } =>#t116;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t118 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else
       for (final core::num* #t119 in listDouble)
@@ -889,7 +889,7 @@
   } =>#t118;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t121 in listInt)
         #t120.{core::Set::add}(#t121);
     else
@@ -898,7 +898,7 @@
   } =>#t120;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::num*>* #t123 in mapToInt.{core::Map::entries})
         #t122.{core::Map::[]=}(#t123.{core::MapEntry::key}, #t123.{core::MapEntry::value});
     else
@@ -907,33 +907,33 @@
   } =>#t122;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t124 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t124;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t125.{core::Set::add}(null);
   } =>#t125;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t126.{core::Map::[]=}("baz", null);
   } =>#t126;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t127 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final dynamic #t128 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t128 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t129 = #t128 as{TypeError} core::int*;
         #t127.{core::List::add}(#t129);
       }
   } =>#t127;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final dynamic #t131 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t131 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t132 = #t131 as{TypeError} core::int*;
         #t130.{core::Set::add}(#t132);
       }
@@ -941,8 +941,8 @@
   } =>#t130;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
         final core::String* #t135 = #t134.{core::MapEntry::key} as{TypeError} core::String*;
         final core::int* #t136 = #t134.{core::MapEntry::value} as{TypeError} core::int*;
         #t133.{core::Map::[]=}(#t135, #t136);
@@ -951,31 +951,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t137.{core::List::add}(42);
   } =>#t137;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t138.{core::Set::add}(42);
   } =>#t138;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t139.{core::Map::[]=}(42, 42);
   } =>#t139;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t140 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -983,7 +983,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -991,7 +991,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*])
@@ -999,7 +999,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*])
@@ -1008,7 +1008,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
@@ -1017,7 +1017,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1025,7 +1025,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1041,7 +1041,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1052,7 +1052,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1064,7 +1064,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1076,7 +1076,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1086,7 +1086,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1104,7 +1104,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1114,7 +1114,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1171,7 +1171,7 @@
   } =>#t174;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t176 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1182,7 +1182,7 @@
   } =>#t176;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1193,7 +1193,7 @@
   } =>#t179;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1204,7 +1204,7 @@
   } =>#t182;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1217,380 +1217,380 @@
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t188 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t188.{core::List::add}(42);
   } =>#t188;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t189.{core::Set::add}(42);
     #t189.{core::Set::add}(null);
   } =>#t189;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t190.{core::Map::[]=}("bar", 42);
     #t190.{core::Map::[]=}("baz", null);
   } =>#t190;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t191 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t191.{core::List::add}(dynVar);
   } =>#t191;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t192.{core::Set::add}(dynVar);
     #t192.{core::Set::add}(null);
   } =>#t192;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t193.{core::Map::[]=}("bar", dynVar);
     #t193.{core::Map::[]=}("baz", null);
   } =>#t193;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t194.{core::List::add}(<core::int*>[42]);
   } =>#t194;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t195.{core::Set::add}(<core::int*>[42]);
     #t195.{core::Set::add}(null);
   } =>#t195;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t196.{core::Map::[]=}("bar", <core::int*>[42]);
     #t196.{core::Map::[]=}("baz", null);
   } =>#t196;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t197 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t198 in <core::int*>[42])
         #t197.{core::List::add}(#t198);
   } =>#t197;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t200 in <core::int*>[42])
         #t199.{core::Set::add}(#t200);
     #t199.{core::Set::add}(null);
   } =>#t199;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::int*>* #t202 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
         #t201.{core::Map::[]=}(#t202.{core::MapEntry::key}, #t202.{core::MapEntry::value});
     #t201.{core::Map::[]=}("baz", null);
   } =>#t201;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t203 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final dynamic #t204 in <dynamic>[dynVar])
         #t203.{core::List::add}(#t204);
   } =>#t203;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final dynamic #t206 in <dynamic>[dynVar])
         #t205.{core::Set::add}(#t206);
     #t205.{core::Set::add}(null);
   } =>#t205;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, dynamic>* #t208 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
         #t207.{core::Map::[]=}(#t208.{core::MapEntry::key}, #t208.{core::MapEntry::value});
     #t207.{core::Map::[]=}("baz", null);
   } =>#t207;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t210 in <core::List<core::int*>*>[<core::int*>[42]])
         #t209.{core::List::add}(#t210);
   } =>#t209;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t212 in <core::List<core::int*>*>[<core::int*>[42]])
         #t211.{core::Set::add}(#t212);
     #t211.{core::Set::add}(null);
   } =>#t211;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
         #t213.{core::Map::[]=}(#t214.{core::MapEntry::key}, #t214.{core::MapEntry::value});
     #t213.{core::Map::[]=}("baz", null);
   } =>#t213;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t215 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t216 in <core::int*>[42])
           #t215.{core::List::add}(#t216);
   } =>#t215;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t218 in <core::int*>[42])
           #t217.{core::Set::add}(#t218);
     #t217.{core::Set::add}(null);
   } =>#t217;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t220 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
           #t219.{core::Map::[]=}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
     #t219.{core::Map::[]=}("baz", null);
   } =>#t219;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t221 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t222 in <dynamic>[dynVar])
           #t221.{core::List::add}(#t222);
   } =>#t221;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t224 in <dynamic>[dynVar])
           #t223.{core::Set::add}(#t224);
     #t223.{core::Set::add}(null);
   } =>#t223;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, dynamic>* #t226 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
           #t225.{core::Map::[]=}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
     #t225.{core::Map::[]=}("baz", null);
   } =>#t225;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t228 in <core::List<core::int*>*>[<core::int*>[42]])
           #t227.{core::List::add}(#t228);
   } =>#t227;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t230 in <core::List<core::int*>*>[<core::int*>[42]])
           #t229.{core::Set::add}(#t230);
     #t229.{core::Set::add}(null);
   } =>#t229;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
           #t231.{core::Map::[]=}(#t232.{core::MapEntry::key}, #t232.{core::MapEntry::value});
     #t231.{core::Map::[]=}("baz", null);
   } =>#t231;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t234 in <core::List<core::int*>*>[<core::int*>[]])
         #t233.{core::List::add}(#t234);
   } =>#t233;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t236 in <core::List<core::int*>*>[<core::int*>[]])
         #t235.{core::Set::add}(#t236);
     #t235.{core::Set::add}(null);
   } =>#t235;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t237.{core::Map::[]=}(#t238.{core::MapEntry::key}, #t238.{core::MapEntry::value});
     #t237.{core::Map::[]=}("baz", null);
   } =>#t237;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t240 in let final core::Set<core::List<core::int*>*>* #t241 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t242 = #t241.{core::Set::add}(<core::int*>[]) in #t241)
         #t239.{core::List::add}(#t240);
   } =>#t239;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t244 in let final core::Set<core::List<core::int*>*>* #t245 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t246 = #t245.{core::Set::add}(<core::int*>[]) in #t245)
         #t243.{core::Set::add}(#t244);
     #t243.{core::Set::add}(null);
   } =>#t243;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t248 in <core::List<core::int*>*>[<core::int*>[]])
           #t247.{core::List::add}(#t248);
   } =>#t247;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t250 in <core::List<core::int*>*>[<core::int*>[]])
           #t249.{core::Set::add}(#t250);
     #t249.{core::Set::add}(null);
   } =>#t249;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t251.{core::Map::[]=}(#t252.{core::MapEntry::key}, #t252.{core::MapEntry::value});
     #t251.{core::Map::[]=}("baz", null);
   } =>#t251;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t254 in <core::int*>[])
         #t253.{core::List::add}(#t254);
   } =>#t253;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t256 in <core::int*>[])
         #t255.{core::Set::add}(#t256);
     #t255.{core::Set::add}(null);
   } =>#t255;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::int*>* #t258 in <core::String*, core::int*>{}.{core::Map::entries})
         #t257.{core::Map::[]=}(#t258.{core::MapEntry::key}, #t258.{core::MapEntry::value});
     #t257.{core::Map::[]=}("baz", null);
   } =>#t257;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t260 in let final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>() in #t261)
         #t259.{core::List::add}(#t260);
   } =>#t259;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t263 in let final core::Set<core::int*>* #t264 = col::LinkedHashSet::•<core::int*>() in #t264)
         #t262.{core::Set::add}(#t263);
     #t262.{core::Set::add}(null);
   } =>#t262;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t265 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t266 in <core::int*>[])
           #t265.{core::List::add}(#t266);
   } =>#t265;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t268 in <core::int*>[])
           #t267.{core::Set::add}(#t268);
     #t267.{core::Set::add}(null);
   } =>#t267;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t270 in <core::List<core::int*>*>[<core::int*>[]])
         #t269.{core::List::add}(#t270);
   } =>#t269;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t272 in <core::List<core::int*>*>[<core::int*>[]])
         #t271.{core::Set::add}(#t272);
     #t271.{core::Set::add}(null);
   } =>#t271;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t273.{core::Map::[]=}(#t274.{core::MapEntry::key}, #t274.{core::MapEntry::value});
     #t273.{core::Map::[]=}("baz", null);
   } =>#t273;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t276 in <core::List<core::int*>*>[<core::int*>[]])
           #t275.{core::List::add}(#t276);
   } =>#t275;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t278 in <core::List<core::int*>*>[<core::int*>[]])
           #t277.{core::Set::add}(#t278);
     #t277.{core::Set::add}(null);
   } =>#t277;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t279.{core::Map::[]=}(#t280.{core::MapEntry::key}, #t280.{core::MapEntry::value});
     #t279.{core::Map::[]=}("baz", null);
   } =>#t279;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t281.{core::List::add}(<core::int*>[]);
   } =>#t281;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t282.{core::Set::add}(<core::int*>[]);
     #t282.{core::Set::add}(null);
   } =>#t282;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t283.{core::Map::[]=}("bar", <core::int*>[]);
     #t283.{core::Map::[]=}("baz", null);
   } =>#t283;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t284.{core::List::add}(<core::int*>[]);
   } =>#t284;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t285.{core::Set::add}(<core::int*>[]);
     #t285.{core::Set::add}(null);
   } =>#t285;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t286.{core::Map::[]=}("bar", <core::int*>[]);
     #t286.{core::Map::[]=}("baz", null);
   } =>#t286;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t287 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t287.{core::List::add}(42);
       else
         #t287.{core::List::add}(3.14);
   } =>#t287;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1598,8 +1598,8 @@
   } =>#t288;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -1607,8 +1607,8 @@
   } =>#t289;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t290 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t291 in listInt)
           #t290.{core::List::add}(#t291);
       else
@@ -1617,8 +1617,8 @@
   } =>#t290;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t294 in listInt)
           #t293.{core::Set::add}(#t294);
       else
@@ -1628,8 +1628,8 @@
   } =>#t293;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::num*>* #t297 in mapStringInt.{core::Map::entries})
           #t296.{core::Map::[]=}(#t297.{core::MapEntry::key}, #t297.{core::MapEntry::value});
       else
@@ -1639,40 +1639,40 @@
   } =>#t296;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t299 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t300 in listInt)
           #t299.{core::List::add}(#t300);
       else
-        for (final dynamic #t301 in dynVar as{TypeError} core::Iterable<dynamic>*)
+        for (final dynamic #t301 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
           #t299.{core::List::add}(#t301);
   } =>#t299;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t303 in listInt)
           #t302.{core::Set::add}(#t303);
       else
-        for (final dynamic #t304 in dynVar as{TypeError} core::Iterable<dynamic>*)
+        for (final dynamic #t304 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
           #t302.{core::Set::add}(#t304);
     #t302.{core::Set::add}(null);
   } =>#t302;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<dynamic, dynamic>* #t306 in mapStringInt.{core::Map::entries})
           #t305.{core::Map::[]=}(#t306.{core::MapEntry::key}, #t306.{core::MapEntry::value});
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
     #t305.{core::Map::[]=}("baz", null);
   } =>#t305;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t308 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else
         for (final core::num* #t309 in listDouble)
@@ -1680,8 +1680,8 @@
   } =>#t308;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t311 in listInt)
           #t310.{core::Set::add}(#t311);
       else
@@ -1690,8 +1690,8 @@
   } =>#t310;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::num*>* #t313 in mapStringInt.{core::Map::entries})
           #t312.{core::Map::[]=}(#t313.{core::MapEntry::key}, #t313.{core::MapEntry::value});
       else
@@ -1700,33 +1700,33 @@
   } =>#t312;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t314 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t314;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t315.{core::Set::add}(null);
   } =>#t315;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t316.{core::Map::[]=}("baz", null);
   } =>#t316;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t317 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final dynamic #t318 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t318 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t319 = #t318 as{TypeError} core::int*;
         #t317.{core::List::add}(#t319);
       }
   } =>#t317;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final dynamic #t321 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t321 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t322 = #t321 as{TypeError} core::int*;
         #t320.{core::Set::add}(#t322);
       }
@@ -1734,8 +1734,8 @@
   } =>#t320;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
         final core::String* #t325 = #t324.{core::MapEntry::key} as{TypeError} core::String*;
         final core::int* #t326 = #t324.{core::MapEntry::value} as{TypeError} core::int*;
         #t323.{core::Map::[]=}(#t325, #t326);
@@ -1744,17 +1744,17 @@
   } =>#t323;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
-    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t327.{core::List::add}(42);
   } =>#t327;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t329.{core::Set::add}(42);
   } =>#t329;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
-    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -1776,19 +1776,19 @@
   } =>#t335;
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t336.{core::List::add}(i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t337.{core::Set::add}(i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
     #t337.{core::Set::add}(null);
   } =>#t337;
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
     #t338.{core::Map::[]=}("baz", null);
   } =>#t338;
   core::List<core::int*>* list130 = block {
@@ -1810,14 +1810,14 @@
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
   block {
     final core::List<core::int*>* #t342 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
   } =>#t342;
   block {
     final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -1825,7 +1825,7 @@
   } =>#t344;
   block {
     final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1837,7 +1837,7 @@
   } =>#t346;
   block {
     final core::List<core::int*>* #t350 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1845,7 +1845,7 @@
   } =>#t350;
   block {
     final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1854,7 +1854,7 @@
   } =>#t353;
   block {
     final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1867,7 +1867,7 @@
   } =>#t356;
   block {
     final core::List<core::int*>* #t361 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -1875,7 +1875,7 @@
   } =>#t361;
   block {
     final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -1891,8 +1891,8 @@
                                                     ^": null};
   block {
     final core::List<core::String*>* #t363 = <core::String*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1903,8 +1903,8 @@
   } =>#t363;
   block {
     final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1916,8 +1916,8 @@
   } =>#t366;
   block {
     final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -1929,8 +1929,8 @@
   } =>#t369;
   block {
     final core::List<core::int*>* #t372 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -1940,8 +1940,8 @@
   } =>#t372;
   block {
     final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -1959,8 +1959,8 @@
                                                                      ^": null};
   block {
     final core::List<core::int*>* #t374 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t374.{core::List::add}(42);
       else
         #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1970,8 +1970,8 @@
   } =>#t374;
   block {
     final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t375.{core::Set::add}(42);
       else
         #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
index 82dc289..6dbb29f 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
@@ -444,58 +444,58 @@
 static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(42);
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(42);
     #t2.{core::Set::add}(null);
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}("bar", 42);
     #t3.{core::Map::[]=}("baz", null);
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t4.{core::List::add}(dynVar);
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t5.{core::Set::add}(dynVar);
     #t5.{core::Set::add}(null);
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t6.{core::Map::[]=}("bar", dynVar);
     #t6.{core::Map::[]=}("baz", null);
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t7.{core::List::add}(<core::int*>[42]);
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t8.{core::Set::add}(<core::int*>[42]);
     #t8.{core::Set::add}(null);
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t9.{core::Map::[]=}("bar", <core::int*>[42]);
     #t9.{core::Map::[]=}("baz", null);
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
@@ -505,7 +505,7 @@
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
@@ -516,7 +516,7 @@
   } =>#t12;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
@@ -527,7 +527,7 @@
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
@@ -537,7 +537,7 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
@@ -548,7 +548,7 @@
   } =>#t18;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
@@ -559,7 +559,7 @@
   } =>#t20;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
@@ -569,7 +569,7 @@
   } =>#t22;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
@@ -580,7 +580,7 @@
   } =>#t24;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
@@ -591,8 +591,8 @@
   } =>#t26;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t28 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
@@ -602,8 +602,8 @@
   } =>#t28;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
@@ -614,8 +614,8 @@
   } =>#t30;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
@@ -626,8 +626,8 @@
   } =>#t32;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t34 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
@@ -637,8 +637,8 @@
   } =>#t34;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
@@ -649,8 +649,8 @@
   } =>#t36;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
@@ -661,8 +661,8 @@
   } =>#t38;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
@@ -672,8 +672,8 @@
   } =>#t40;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
@@ -684,8 +684,8 @@
   } =>#t42;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
@@ -696,7 +696,7 @@
   } =>#t44;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
@@ -706,7 +706,7 @@
   } =>#t46;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
@@ -720,7 +720,7 @@
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
@@ -730,7 +730,7 @@
   } =>#t50;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
@@ -741,8 +741,8 @@
   } =>#t54;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
@@ -752,8 +752,8 @@
   } =>#t58;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
@@ -764,8 +764,8 @@
   } =>#t60;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
@@ -776,7 +776,7 @@
   } =>#t62;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t64 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
@@ -786,7 +786,7 @@
   } =>#t64;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
@@ -797,7 +797,7 @@
   } =>#t66;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
@@ -808,7 +808,7 @@
   } =>#t68;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
@@ -818,7 +818,7 @@
   } =>#t70;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
@@ -829,8 +829,8 @@
   } =>#t73;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t76 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
@@ -840,8 +840,8 @@
   } =>#t76;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
@@ -852,8 +852,8 @@
   } =>#t78;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
@@ -864,7 +864,7 @@
   } =>#t80;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
@@ -874,7 +874,7 @@
   } =>#t82;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
@@ -885,7 +885,7 @@
   } =>#t84;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
@@ -896,8 +896,8 @@
   } =>#t86;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
@@ -907,8 +907,8 @@
   } =>#t88;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
@@ -919,8 +919,8 @@
   } =>#t90;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
@@ -931,38 +931,38 @@
   } =>#t92;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t94.{core::List::add}(<core::int*>[]);
   } =>#t94;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t95.{core::Set::add}(<core::int*>[]);
     #t95.{core::Set::add}(null);
   } =>#t95;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t96.{core::List::add}(<core::int*>[]);
   } =>#t96;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t97.{core::Set::add}(<core::int*>[]);
     #t97.{core::Set::add}(null);
   } =>#t97;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t98 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t98.{core::List::add}(42);
     else
       #t98.{core::List::add}(3.14);
   } =>#t98;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -970,7 +970,7 @@
   } =>#t99;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -978,7 +978,7 @@
   } =>#t100;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t101 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
@@ -995,7 +995,7 @@
   } =>#t101;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
@@ -1013,7 +1013,7 @@
   } =>#t104;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
@@ -1031,7 +1031,7 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
@@ -1039,7 +1039,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         #t110.{core::List::add}(#t112);
@@ -1048,7 +1048,7 @@
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
@@ -1056,7 +1056,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         #t113.{core::Set::add}(#t115);
@@ -1066,13 +1066,13 @@
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
         #t116.{core::Set::add}(#t117);
@@ -1082,7 +1082,7 @@
   } =>#t116;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t118 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else {
       core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -1094,7 +1094,7 @@
   } =>#t118;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
@@ -1107,7 +1107,7 @@
   } =>#t120;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
@@ -1120,25 +1120,25 @@
   } =>#t122;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t124 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t124;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t125.{core::Set::add}(null);
   } =>#t125;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t126.{core::Map::[]=}("baz", null);
   } =>#t126;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t127 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1150,8 +1150,8 @@
   } =>#t127;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1164,8 +1164,8 @@
   } =>#t130;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1179,31 +1179,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t137.{core::List::add}(42);
   } =>#t137;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t138.{core::Set::add}(42);
   } =>#t138;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t139.{core::Map::[]=}(42, 42);
   } =>#t139;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t140 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -1211,7 +1211,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -1219,7 +1219,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1231,7 +1231,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1244,7 +1244,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
@@ -1257,7 +1257,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1265,7 +1265,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1281,7 +1281,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1292,7 +1292,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1304,7 +1304,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1316,7 +1316,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1326,7 +1326,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1344,7 +1344,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1354,7 +1354,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1411,7 +1411,7 @@
   } =>#t174;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t176 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1422,7 +1422,7 @@
   } =>#t176;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1433,7 +1433,7 @@
   } =>#t179;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1444,7 +1444,7 @@
   } =>#t182;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1457,58 +1457,58 @@
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t188 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t188.{core::List::add}(42);
   } =>#t188;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t189.{core::Set::add}(42);
     #t189.{core::Set::add}(null);
   } =>#t189;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t190.{core::Map::[]=}("bar", 42);
     #t190.{core::Map::[]=}("baz", null);
   } =>#t190;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t191 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t191.{core::List::add}(dynVar);
   } =>#t191;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t192.{core::Set::add}(dynVar);
     #t192.{core::Set::add}(null);
   } =>#t192;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t193.{core::Map::[]=}("bar", dynVar);
     #t193.{core::Map::[]=}("baz", null);
   } =>#t193;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t194.{core::List::add}(<core::int*>[42]);
   } =>#t194;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t195.{core::Set::add}(<core::int*>[42]);
     #t195.{core::Set::add}(null);
   } =>#t195;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t196.{core::Map::[]=}("bar", <core::int*>[42]);
     #t196.{core::Map::[]=}("baz", null);
   } =>#t196;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t197 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
@@ -1518,7 +1518,7 @@
   } =>#t197;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
@@ -1529,7 +1529,7 @@
   } =>#t199;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
@@ -1540,7 +1540,7 @@
   } =>#t201;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t203 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
@@ -1550,7 +1550,7 @@
   } =>#t203;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
@@ -1561,7 +1561,7 @@
   } =>#t205;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
@@ -1572,7 +1572,7 @@
   } =>#t207;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
@@ -1582,7 +1582,7 @@
   } =>#t209;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
@@ -1593,7 +1593,7 @@
   } =>#t211;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
@@ -1604,8 +1604,8 @@
   } =>#t213;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t215 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
@@ -1615,8 +1615,8 @@
   } =>#t215;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
@@ -1627,8 +1627,8 @@
   } =>#t217;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
@@ -1639,8 +1639,8 @@
   } =>#t219;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t221 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
@@ -1650,8 +1650,8 @@
   } =>#t221;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
@@ -1662,8 +1662,8 @@
   } =>#t223;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
@@ -1674,8 +1674,8 @@
   } =>#t225;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
@@ -1685,8 +1685,8 @@
   } =>#t227;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
@@ -1697,8 +1697,8 @@
   } =>#t229;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
@@ -1709,7 +1709,7 @@
   } =>#t231;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
@@ -1719,7 +1719,7 @@
   } =>#t233;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
@@ -1730,7 +1730,7 @@
   } =>#t235;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
@@ -1741,7 +1741,7 @@
   } =>#t237;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
@@ -1751,7 +1751,7 @@
   } =>#t239;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
@@ -1762,8 +1762,8 @@
   } =>#t243;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
@@ -1773,8 +1773,8 @@
   } =>#t247;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
@@ -1785,8 +1785,8 @@
   } =>#t249;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
@@ -1797,7 +1797,7 @@
   } =>#t251;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
@@ -1807,7 +1807,7 @@
   } =>#t253;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
@@ -1818,7 +1818,7 @@
   } =>#t255;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
@@ -1829,7 +1829,7 @@
   } =>#t257;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
@@ -1839,7 +1839,7 @@
   } =>#t259;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
@@ -1850,8 +1850,8 @@
   } =>#t262;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t265 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
@@ -1861,8 +1861,8 @@
   } =>#t265;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
@@ -1873,7 +1873,7 @@
   } =>#t267;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
@@ -1883,7 +1883,7 @@
   } =>#t269;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
@@ -1894,7 +1894,7 @@
   } =>#t271;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
@@ -1905,8 +1905,8 @@
   } =>#t273;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
@@ -1916,8 +1916,8 @@
   } =>#t275;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
@@ -1928,8 +1928,8 @@
   } =>#t277;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
@@ -1940,53 +1940,53 @@
   } =>#t279;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t281.{core::List::add}(<core::int*>[]);
   } =>#t281;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t282.{core::Set::add}(<core::int*>[]);
     #t282.{core::Set::add}(null);
   } =>#t282;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t283.{core::Map::[]=}("bar", <core::int*>[]);
     #t283.{core::Map::[]=}("baz", null);
   } =>#t283;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t284.{core::List::add}(<core::int*>[]);
   } =>#t284;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t285.{core::Set::add}(<core::int*>[]);
     #t285.{core::Set::add}(null);
   } =>#t285;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t286.{core::Map::[]=}("bar", <core::int*>[]);
     #t286.{core::Map::[]=}("baz", null);
   } =>#t286;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t287 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t287.{core::List::add}(42);
       else
         #t287.{core::List::add}(3.14);
   } =>#t287;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1994,8 +1994,8 @@
   } =>#t288;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -2003,8 +2003,8 @@
   } =>#t289;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t290 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
@@ -2021,8 +2021,8 @@
   } =>#t290;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
@@ -2040,8 +2040,8 @@
   } =>#t293;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
@@ -2059,8 +2059,8 @@
   } =>#t296;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t299 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
@@ -2068,7 +2068,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
           #t299.{core::List::add}(#t301);
@@ -2077,8 +2077,8 @@
   } =>#t299;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
@@ -2086,7 +2086,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
           #t302.{core::Set::add}(#t304);
@@ -2096,8 +2096,8 @@
   } =>#t302;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
@@ -2105,7 +2105,7 @@
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
@@ -2115,8 +2115,8 @@
   } =>#t305;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t308 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else {
         core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -2128,8 +2128,8 @@
   } =>#t308;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
@@ -2142,8 +2142,8 @@
   } =>#t310;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
@@ -2156,25 +2156,25 @@
   } =>#t312;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t314 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t314;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t315.{core::Set::add}(null);
   } =>#t315;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t316.{core::Map::[]=}("baz", null);
   } =>#t316;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t317 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2186,8 +2186,8 @@
   } =>#t317;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2200,8 +2200,8 @@
   } =>#t320;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2215,17 +2215,17 @@
   } =>#t323;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
-    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t327.{core::List::add}(42);
   } =>#t327;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t329.{core::Set::add}(42);
   } =>#t329;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
-    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -2263,20 +2263,20 @@
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t336.{core::List::add}(i as{TypeError} core::int*);
+        #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t337.{core::Set::add}(i as{TypeError} core::int*);
+        #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t337.{core::Set::add}(null);
@@ -2284,10 +2284,10 @@
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+        #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t338.{core::Map::[]=}("baz", null);
@@ -2326,14 +2326,14 @@
       {
         block {
           final core::List<core::int*>* #t342 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
         } =>#t342;
         block {
           final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -2341,7 +2341,7 @@
         } =>#t344;
         block {
           final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2353,7 +2353,7 @@
         } =>#t346;
         block {
           final core::List<core::int*>* #t350 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2365,7 +2365,7 @@
         } =>#t350;
         block {
           final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2378,7 +2378,7 @@
         } =>#t353;
         block {
           final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2395,7 +2395,7 @@
         } =>#t356;
         block {
           final core::List<core::int*>* #t361 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -2403,7 +2403,7 @@
         } =>#t361;
         block {
           final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -2419,8 +2419,8 @@
                                                     ^": null};
         block {
           final core::List<core::String*>* #t363 = <core::String*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2431,8 +2431,8 @@
         } =>#t363;
         block {
           final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2444,8 +2444,8 @@
         } =>#t366;
         block {
           final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -2457,8 +2457,8 @@
         } =>#t369;
         block {
           final core::List<core::int*>* #t372 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -2468,8 +2468,8 @@
         } =>#t372;
         block {
           final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -2487,8 +2487,8 @@
                                                                      ^": null};
         block {
           final core::List<core::int*>* #t374 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t374.{core::List::add}(42);
             else
               #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -2498,8 +2498,8 @@
         } =>#t374;
         block {
           final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t375.{core::Set::add}(42);
             else
               #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect b/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect b/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart b/pkg/front_end/testcases/general/invalid_operator.dart
new file mode 100644
index 0000000..609f1b0
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator.dart
@@ -0,0 +1,158 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Operators1 {
+  operator ==() => true;
+  operator <() => true;
+  operator >() => true;
+  operator <=() => true;
+  operator >=() => true;
+  operator +() => true;
+  operator /() => true;
+  operator ~/() => true;
+  operator *() => true;
+  operator %() => true;
+  operator |() => true;
+  operator ^() => true;
+  operator &() => true;
+  operator <<() => true;
+  operator >>() => true;
+  operator []=(a, b, c) => true;
+  operator []() => true;
+  operator ~(a) => true;
+}
+
+class Operators2 {
+  operator ==(a, b) => true;
+  operator <(a, b) => true;
+  operator >(a, b) => true;
+  operator <=(a, b) => true;
+  operator >=(a, b) => true;
+  operator -(a, b) => true;
+  operator +(a, b) => true;
+  operator /(a, b) => true;
+  operator ~/(a, b) => true;
+  operator *(a, b) => true;
+  operator %(a, b) => true;
+  operator |(a, b) => true;
+  operator ^(a, b) => true;
+  operator &(a, b) => true;
+  operator <<(a, b) => true;
+  operator >>(a, b) => true;
+  operator []=(a, b, c) => true;
+  operator [](a, b) => true;
+  operator ~(a, b) => true;
+}
+
+class Operators3 {
+  operator ==([a]) => true;
+  operator <([a]) => true;
+  operator >([a]) => true;
+  operator <=([a]) => true;
+  operator >=([a]) => true;
+  operator -([a]) => true;
+  operator +([a]) => true;
+  operator /([a]) => true;
+  operator ~/([a]) => true;
+  operator *([a]) => true;
+  operator %([a]) => true;
+  operator |([a]) => true;
+  operator ^([a]) => true;
+  operator &([a]) => true;
+  operator <<([a]) => true;
+  operator >>([a]) => true;
+  operator []=([a, b]) => true;
+  operator []([a]) => true;
+  operator ~([a]) => true;
+}
+
+class Operators4 {
+  operator ==({a}) => true;
+  operator <({a}) => true;
+  operator >({a}) => true;
+  operator <=({a}) => true;
+  operator >=({a}) => true;
+  operator -({a}) => true;
+  operator +({a}) => true;
+  operator /({a}) => true;
+  operator ~/({a}) => true;
+  operator *({a}) => true;
+  operator %({a}) => true;
+  operator |({a}) => true;
+  operator ^({a}) => true;
+  operator &({a}) => true;
+  operator <<({a}) => true;
+  operator >>({a}) => true;
+  operator []=({a, b}) => true;
+  operator []({a}) => true;
+  operator ~({a}) => true;
+}
+
+class Operators5 {
+  operator ==(a, [b]) => true;
+  operator <(a, [b]) => true;
+  operator >(a, [b]) => true;
+  operator <=(a, [b]) => true;
+  operator >=(a, [b]) => true;
+  operator -(a, [b]) => true;
+  operator +(a, [b]) => true;
+  operator /(a, [b]) => true;
+  operator ~/(a, [b]) => true;
+  operator *(a, [b]) => true;
+  operator %(a, [b]) => true;
+  operator |(a, [b]) => true;
+  operator ^(a, [b]) => true;
+  operator &(a, [b]) => true;
+  operator <<(a, [b]) => true;
+  operator >>(a, [b]) => true;
+  operator []=(a, b, [c]) => true;
+  operator [](a, [b]) => true;
+  operator ~(a, [b]) => true;
+}
+
+class Operators6 {
+  operator ==(a, {b}) => true;
+  operator <(a, {b}) => true;
+  operator >(a, {b}) => true;
+  operator <=(a, {b}) => true;
+  operator >=(a, {b}) => true;
+  operator -(a, {b}) => true;
+  operator +(a, {b}) => true;
+  operator /(a, {b}) => true;
+  operator ~/(a, {b}) => true;
+  operator *(a, {b}) => true;
+  operator %(a, {b}) => true;
+  operator |(a, {b}) => true;
+  operator ^(a, {b}) => true;
+  operator &(a, {b}) => true;
+  operator <<(a, {b}) => true;
+  operator >>(a, {b}) => true;
+  operator []=(a, b, {c}) => true;
+  operator [](a, {b}) => true;
+  operator ~(a, {b}) => true;
+}
+
+class Operators7 {
+  operator ==<T>(a) => true;
+  operator ><T>(a) => true;
+  operator <=<T>(a) => true;
+  operator >=<T>(a) => true;
+  operator -<T>() => true;
+  operator -<T>(a) => true;
+  operator +<T>(a) => true;
+  operator /<T>(a) => true;
+  operator ~/<T>(a) => true;
+  operator *<T>(a) => true;
+  operator %<T>(a) => true;
+  operator |<T>(a) => true;
+  operator ^<T>(a) => true;
+  operator &<T>(a) => true;
+  operator <<<T>(a) => true;
+  operator >><T>(a) => true;
+  operator []=<T>(a, b) => true;
+  operator []<T>(a) => true;
+  operator ~<T>() => true;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
new file mode 100644
index 0000000..fc36801
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
@@ -0,0 +1,859 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:7:12: Error: Operator '<' should have exactly one parameter.
+//   operator <() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:8:12: Error: Operator '>' should have exactly one parameter.
+//   operator >() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:9:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:10:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:11:12: Error: Operator '+' should have exactly one parameter.
+//   operator +() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:12:12: Error: Operator '/' should have exactly one parameter.
+//   operator /() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:13:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:14:12: Error: Operator '*' should have exactly one parameter.
+//   operator *() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:15:12: Error: Operator '%' should have exactly one parameter.
+//   operator %() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:16:12: Error: Operator '|' should have exactly one parameter.
+//   operator |() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:17:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:18:12: Error: Operator '&' should have exactly one parameter.
+//   operator &() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:19:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:20:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:21:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, c) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:22:12: Error: Operator '[]' should have exactly one parameter.
+//   operator []() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:23:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:28:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:29:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:30:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:31:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:32:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:33:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:34:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:35:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:36:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:37:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:38:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:39:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:40:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:41:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:42:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:43:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, c) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:44:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:45:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:49:16: Error: An operator can't have optional parameters.
+//   operator ==([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:50:15: Error: An operator can't have optional parameters.
+//   operator <([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:51:15: Error: An operator can't have optional parameters.
+//   operator >([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:52:16: Error: An operator can't have optional parameters.
+//   operator <=([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:53:16: Error: An operator can't have optional parameters.
+//   operator >=([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:54:15: Error: An operator can't have optional parameters.
+//   operator -([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:55:15: Error: An operator can't have optional parameters.
+//   operator +([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:56:15: Error: An operator can't have optional parameters.
+//   operator /([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:57:16: Error: An operator can't have optional parameters.
+//   operator ~/([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:58:15: Error: An operator can't have optional parameters.
+//   operator *([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:59:15: Error: An operator can't have optional parameters.
+//   operator %([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:60:15: Error: An operator can't have optional parameters.
+//   operator |([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:61:15: Error: An operator can't have optional parameters.
+//   operator ^([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:62:15: Error: An operator can't have optional parameters.
+//   operator &([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:63:16: Error: An operator can't have optional parameters.
+//   operator <<([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:64:16: Error: An operator can't have optional parameters.
+//   operator >>([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:65:17: Error: An operator can't have optional parameters.
+//   operator []=([a, b]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:65:20: Error: An operator can't have optional parameters.
+//   operator []=([a, b]) => true;
+//                    ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:66:16: Error: An operator can't have optional parameters.
+//   operator []([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:67:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~([a]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:71:16: Error: An operator can't have optional parameters.
+//   operator ==({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:72:15: Error: An operator can't have optional parameters.
+//   operator <({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:73:15: Error: An operator can't have optional parameters.
+//   operator >({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:74:16: Error: An operator can't have optional parameters.
+//   operator <=({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:75:16: Error: An operator can't have optional parameters.
+//   operator >=({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:76:15: Error: An operator can't have optional parameters.
+//   operator -({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:77:15: Error: An operator can't have optional parameters.
+//   operator +({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:78:15: Error: An operator can't have optional parameters.
+//   operator /({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:79:16: Error: An operator can't have optional parameters.
+//   operator ~/({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:80:15: Error: An operator can't have optional parameters.
+//   operator *({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:81:15: Error: An operator can't have optional parameters.
+//   operator %({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:82:15: Error: An operator can't have optional parameters.
+//   operator |({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:83:15: Error: An operator can't have optional parameters.
+//   operator ^({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:84:15: Error: An operator can't have optional parameters.
+//   operator &({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:85:16: Error: An operator can't have optional parameters.
+//   operator <<({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:86:16: Error: An operator can't have optional parameters.
+//   operator >>({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:87:17: Error: An operator can't have optional parameters.
+//   operator []=({a, b}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:87:20: Error: An operator can't have optional parameters.
+//   operator []=({a, b}) => true;
+//                    ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:88:16: Error: An operator can't have optional parameters.
+//   operator []({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:89:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~({a}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:93:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:94:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:95:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:96:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:97:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:98:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:99:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:100:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:101:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:102:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:103:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:104:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:105:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:106:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:107:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:108:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:109:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, [c]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:110:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:111:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:115:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:116:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:117:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:118:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:119:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:120:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:121:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:122:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:123:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:124:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:125:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:126:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:127:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:128:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:129:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:130:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:131:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, {c}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:132:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:133:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ==<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ><T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator <=<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >=<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator -<T>() => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator -<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator +<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator /<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ~/<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator *<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator %<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator |<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ^<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator &<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator <<<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >><T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator []=<T>(a, b) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator []<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ~<T>() => true;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    ;
+  operator ==() → dynamic
+    ;
+  operator <() → dynamic
+    ;
+  operator >() → dynamic
+    ;
+  operator <=() → dynamic
+    ;
+  operator >=() → dynamic
+    ;
+  operator +() → dynamic
+    ;
+  operator /() → dynamic
+    ;
+  operator ~/() → dynamic
+    ;
+  operator *() → dynamic
+    ;
+  operator %() → dynamic
+    ;
+  operator |() → dynamic
+    ;
+  operator ^() → dynamic
+    ;
+  operator &() → dynamic
+    ;
+  operator <<() → dynamic
+    ;
+  operator >>() → dynamic
+    ;
+  operator []=(dynamic a, dynamic b, dynamic c) → void
+    ;
+  operator []() → dynamic
+    ;
+  operator ~(dynamic a) → dynamic
+    ;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    ;
+  operator ==(dynamic a, dynamic b) → dynamic
+    ;
+  operator <(dynamic a, dynamic b) → dynamic
+    ;
+  operator >(dynamic a, dynamic b) → dynamic
+    ;
+  operator <=(dynamic a, dynamic b) → dynamic
+    ;
+  operator >=(dynamic a, dynamic b) → dynamic
+    ;
+  operator -(dynamic a, dynamic b) → dynamic
+    ;
+  operator +(dynamic a, dynamic b) → dynamic
+    ;
+  operator /(dynamic a, dynamic b) → dynamic
+    ;
+  operator ~/(dynamic a, dynamic b) → dynamic
+    ;
+  operator *(dynamic a, dynamic b) → dynamic
+    ;
+  operator %(dynamic a, dynamic b) → dynamic
+    ;
+  operator |(dynamic a, dynamic b) → dynamic
+    ;
+  operator ^(dynamic a, dynamic b) → dynamic
+    ;
+  operator &(dynamic a, dynamic b) → dynamic
+    ;
+  operator <<(dynamic a, dynamic b) → dynamic
+    ;
+  operator >>(dynamic a, dynamic b) → dynamic
+    ;
+  operator []=(dynamic a, dynamic b, dynamic c) → void
+    ;
+  operator [](dynamic a, dynamic b) → dynamic
+    ;
+  operator ~(dynamic a, dynamic b) → dynamic
+    ;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    ;
+  operator ==([dynamic a]) → core::bool*
+    ;
+  operator <([dynamic a]) → dynamic
+    ;
+  operator >([dynamic a]) → dynamic
+    ;
+  operator <=([dynamic a]) → dynamic
+    ;
+  operator >=([dynamic a]) → dynamic
+    ;
+  operator -([dynamic a]) → dynamic
+    ;
+  operator +([dynamic a]) → dynamic
+    ;
+  operator /([dynamic a]) → dynamic
+    ;
+  operator ~/([dynamic a]) → dynamic
+    ;
+  operator *([dynamic a]) → dynamic
+    ;
+  operator %([dynamic a]) → dynamic
+    ;
+  operator |([dynamic a]) → dynamic
+    ;
+  operator ^([dynamic a]) → dynamic
+    ;
+  operator &([dynamic a]) → dynamic
+    ;
+  operator <<([dynamic a]) → dynamic
+    ;
+  operator >>([dynamic a]) → dynamic
+    ;
+  operator []=([dynamic a, dynamic b]) → void
+    ;
+  operator []([dynamic a]) → dynamic
+    ;
+  operator ~([dynamic a]) → dynamic
+    ;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    ;
+  operator ==({dynamic a}) → dynamic
+    ;
+  operator <({dynamic a}) → dynamic
+    ;
+  operator >({dynamic a}) → dynamic
+    ;
+  operator <=({dynamic a}) → dynamic
+    ;
+  operator >=({dynamic a}) → dynamic
+    ;
+  operator -({dynamic a}) → dynamic
+    ;
+  operator +({dynamic a}) → dynamic
+    ;
+  operator /({dynamic a}) → dynamic
+    ;
+  operator ~/({dynamic a}) → dynamic
+    ;
+  operator *({dynamic a}) → dynamic
+    ;
+  operator %({dynamic a}) → dynamic
+    ;
+  operator |({dynamic a}) → dynamic
+    ;
+  operator ^({dynamic a}) → dynamic
+    ;
+  operator &({dynamic a}) → dynamic
+    ;
+  operator <<({dynamic a}) → dynamic
+    ;
+  operator >>({dynamic a}) → dynamic
+    ;
+  operator []=({dynamic a, dynamic b}) → void
+    ;
+  operator []({dynamic a}) → dynamic
+    ;
+  operator ~({dynamic a}) → dynamic
+    ;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    ;
+  operator ==(dynamic a, [dynamic b]) → core::bool*
+    ;
+  operator <(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator >(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator <=(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator >=(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator -(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator +(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator /(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator ~/(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator *(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator %(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator |(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator ^(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator &(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator <<(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator >>(dynamic a, [dynamic b]) → dynamic
+    ;
+  operator []=(dynamic a, dynamic b, [dynamic c]) → void
+    ;
+  operator [](dynamic a, [dynamic b]) → dynamic
+    ;
+  operator ~(dynamic a, [dynamic b]) → dynamic
+    ;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    ;
+  operator ==(dynamic a, {dynamic b}) → core::bool*
+    ;
+  operator <(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator >(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator <=(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator >=(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator -(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator +(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator /(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator ~/(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator *(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator %(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator |(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator ^(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator &(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator <<(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator >>(dynamic a, {dynamic b}) → dynamic
+    ;
+  operator []=(dynamic a, dynamic b, {dynamic c}) → void
+    ;
+  operator [](dynamic a, {dynamic b}) → dynamic
+    ;
+  operator ~(dynamic a, {dynamic b}) → dynamic
+    ;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    ;
+  operator ==<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator ><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator <=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator >=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator unary-<T extends core::Object* = dynamic>() → dynamic
+    ;
+  operator -<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator +<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator /<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator ~/<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator *<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator %<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator |<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator ^<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator &<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator <<<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator >><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator []=<T extends core::Object* = dynamic>(dynamic a, dynamic b) → void
+    ;
+  operator []<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+  operator ~<T extends core::Object* = dynamic>() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
new file mode 100644
index 0000000..e36b062
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
@@ -0,0 +1,869 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:7:12: Error: Operator '<' should have exactly one parameter.
+//   operator <() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:8:12: Error: Operator '>' should have exactly one parameter.
+//   operator >() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:9:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:10:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:11:12: Error: Operator '+' should have exactly one parameter.
+//   operator +() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:12:12: Error: Operator '/' should have exactly one parameter.
+//   operator /() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:13:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:14:12: Error: Operator '*' should have exactly one parameter.
+//   operator *() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:15:12: Error: Operator '%' should have exactly one parameter.
+//   operator %() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:16:12: Error: Operator '|' should have exactly one parameter.
+//   operator |() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:17:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:18:12: Error: Operator '&' should have exactly one parameter.
+//   operator &() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:19:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:20:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:21:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, c) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:22:12: Error: Operator '[]' should have exactly one parameter.
+//   operator []() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:23:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:28:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:29:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:30:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:31:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:32:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:33:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:34:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:35:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:36:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:37:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:38:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:39:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:40:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:41:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:42:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:43:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, c) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:44:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:45:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:49:16: Error: An operator can't have optional parameters.
+//   operator ==([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:50:15: Error: An operator can't have optional parameters.
+//   operator <([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:51:15: Error: An operator can't have optional parameters.
+//   operator >([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:52:16: Error: An operator can't have optional parameters.
+//   operator <=([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:53:16: Error: An operator can't have optional parameters.
+//   operator >=([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:54:15: Error: An operator can't have optional parameters.
+//   operator -([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:55:15: Error: An operator can't have optional parameters.
+//   operator +([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:56:15: Error: An operator can't have optional parameters.
+//   operator /([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:57:16: Error: An operator can't have optional parameters.
+//   operator ~/([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:58:15: Error: An operator can't have optional parameters.
+//   operator *([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:59:15: Error: An operator can't have optional parameters.
+//   operator %([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:60:15: Error: An operator can't have optional parameters.
+//   operator |([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:61:15: Error: An operator can't have optional parameters.
+//   operator ^([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:62:15: Error: An operator can't have optional parameters.
+//   operator &([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:63:16: Error: An operator can't have optional parameters.
+//   operator <<([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:64:16: Error: An operator can't have optional parameters.
+//   operator >>([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:65:17: Error: An operator can't have optional parameters.
+//   operator []=([a, b]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:65:20: Error: An operator can't have optional parameters.
+//   operator []=([a, b]) => true;
+//                    ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:66:16: Error: An operator can't have optional parameters.
+//   operator []([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:67:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~([a]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:71:16: Error: An operator can't have optional parameters.
+//   operator ==({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:72:15: Error: An operator can't have optional parameters.
+//   operator <({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:73:15: Error: An operator can't have optional parameters.
+//   operator >({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:74:16: Error: An operator can't have optional parameters.
+//   operator <=({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:75:16: Error: An operator can't have optional parameters.
+//   operator >=({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:76:15: Error: An operator can't have optional parameters.
+//   operator -({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:77:15: Error: An operator can't have optional parameters.
+//   operator +({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:78:15: Error: An operator can't have optional parameters.
+//   operator /({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:79:16: Error: An operator can't have optional parameters.
+//   operator ~/({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:80:15: Error: An operator can't have optional parameters.
+//   operator *({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:81:15: Error: An operator can't have optional parameters.
+//   operator %({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:82:15: Error: An operator can't have optional parameters.
+//   operator |({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:83:15: Error: An operator can't have optional parameters.
+//   operator ^({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:84:15: Error: An operator can't have optional parameters.
+//   operator &({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:85:16: Error: An operator can't have optional parameters.
+//   operator <<({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:86:16: Error: An operator can't have optional parameters.
+//   operator >>({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:87:17: Error: An operator can't have optional parameters.
+//   operator []=({a, b}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:87:20: Error: An operator can't have optional parameters.
+//   operator []=({a, b}) => true;
+//                    ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:88:16: Error: An operator can't have optional parameters.
+//   operator []({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:89:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~({a}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:93:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:94:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:95:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:96:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:97:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:98:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:99:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:100:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:101:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:102:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:103:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:104:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:105:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:106:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:107:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:108:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:109:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, [c]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:110:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:111:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:115:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:116:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:117:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:118:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:119:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:120:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:121:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:122:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:123:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:124:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:125:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:126:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:127:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:128:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:129:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:130:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:131:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, {c}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:132:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:133:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ==<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ><T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator <=<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >=<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator -<T>() => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator -<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator +<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator /<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ~/<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator *<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator %<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator |<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ^<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator &<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator <<<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >><T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator []=<T>(a, b) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator []<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ~<T>() => true;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    : super core::Object::•()
+    ;
+  operator ==() → dynamic
+    return true;
+  operator <() → dynamic
+    return true;
+  operator >() → dynamic
+    return true;
+  operator <=() → dynamic
+    return true;
+  operator >=() → dynamic
+    return true;
+  operator +() → dynamic
+    return true;
+  operator /() → dynamic
+    return true;
+  operator ~/() → dynamic
+    return true;
+  operator *() → dynamic
+    return true;
+  operator %() → dynamic
+    return true;
+  operator |() → dynamic
+    return true;
+  operator ^() → dynamic
+    return true;
+  operator &() → dynamic
+    return true;
+  operator <<() → dynamic
+    return true;
+  operator >>() → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, dynamic c) → void
+    return true;
+  operator []() → dynamic
+    return true;
+  operator ~(dynamic a) → dynamic
+    return true;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic a, dynamic b) → dynamic
+    return true;
+  operator <(dynamic a, dynamic b) → dynamic
+    return true;
+  operator >(dynamic a, dynamic b) → dynamic
+    return true;
+  operator <=(dynamic a, dynamic b) → dynamic
+    return true;
+  operator >=(dynamic a, dynamic b) → dynamic
+    return true;
+  operator -(dynamic a, dynamic b) → dynamic
+    return true;
+  operator +(dynamic a, dynamic b) → dynamic
+    return true;
+  operator /(dynamic a, dynamic b) → dynamic
+    return true;
+  operator ~/(dynamic a, dynamic b) → dynamic
+    return true;
+  operator *(dynamic a, dynamic b) → dynamic
+    return true;
+  operator %(dynamic a, dynamic b) → dynamic
+    return true;
+  operator |(dynamic a, dynamic b) → dynamic
+    return true;
+  operator ^(dynamic a, dynamic b) → dynamic
+    return true;
+  operator &(dynamic a, dynamic b) → dynamic
+    return true;
+  operator <<(dynamic a, dynamic b) → dynamic
+    return true;
+  operator >>(dynamic a, dynamic b) → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, dynamic c) → void
+    return true;
+  operator [](dynamic a, dynamic b) → dynamic
+    return true;
+  operator ~(dynamic a, dynamic b) → dynamic
+    return true;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    : super core::Object::•()
+    ;
+  operator ==([dynamic a = #C1]) → core::bool*
+    return true;
+  operator <([dynamic a = #C1]) → dynamic
+    return true;
+  operator >([dynamic a = #C1]) → dynamic
+    return true;
+  operator <=([dynamic a = #C1]) → dynamic
+    return true;
+  operator >=([dynamic a = #C1]) → dynamic
+    return true;
+  operator -([dynamic a = #C1]) → dynamic
+    return true;
+  operator +([dynamic a = #C1]) → dynamic
+    return true;
+  operator /([dynamic a = #C1]) → dynamic
+    return true;
+  operator ~/([dynamic a = #C1]) → dynamic
+    return true;
+  operator *([dynamic a = #C1]) → dynamic
+    return true;
+  operator %([dynamic a = #C1]) → dynamic
+    return true;
+  operator |([dynamic a = #C1]) → dynamic
+    return true;
+  operator ^([dynamic a = #C1]) → dynamic
+    return true;
+  operator &([dynamic a = #C1]) → dynamic
+    return true;
+  operator <<([dynamic a = #C1]) → dynamic
+    return true;
+  operator >>([dynamic a = #C1]) → dynamic
+    return true;
+  operator []=([dynamic a = #C1, dynamic b = #C1]) → void
+    return true;
+  operator []([dynamic a = #C1]) → dynamic
+    return true;
+  operator ~([dynamic a = #C1]) → dynamic
+    return true;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    : super core::Object::•()
+    ;
+  operator ==({dynamic a = #C1}) → dynamic
+    return true;
+  operator <({dynamic a = #C1}) → dynamic
+    return true;
+  operator >({dynamic a = #C1}) → dynamic
+    return true;
+  operator <=({dynamic a = #C1}) → dynamic
+    return true;
+  operator >=({dynamic a = #C1}) → dynamic
+    return true;
+  operator -({dynamic a = #C1}) → dynamic
+    return true;
+  operator +({dynamic a = #C1}) → dynamic
+    return true;
+  operator /({dynamic a = #C1}) → dynamic
+    return true;
+  operator ~/({dynamic a = #C1}) → dynamic
+    return true;
+  operator *({dynamic a = #C1}) → dynamic
+    return true;
+  operator %({dynamic a = #C1}) → dynamic
+    return true;
+  operator |({dynamic a = #C1}) → dynamic
+    return true;
+  operator ^({dynamic a = #C1}) → dynamic
+    return true;
+  operator &({dynamic a = #C1}) → dynamic
+    return true;
+  operator <<({dynamic a = #C1}) → dynamic
+    return true;
+  operator >>({dynamic a = #C1}) → dynamic
+    return true;
+  operator []=({dynamic a = #C1, dynamic b = #C1}) → void
+    return true;
+  operator []({dynamic a = #C1}) → dynamic
+    return true;
+  operator ~({dynamic a = #C1}) → dynamic
+    return true;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic a, [dynamic b = #C1]) → core::bool*
+    return true;
+  operator <(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator >(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator <=(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator >=(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator -(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator +(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator /(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator ~/(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator *(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator %(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator |(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator ^(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator &(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator <<(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator >>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, [dynamic c = #C1]) → void
+    return true;
+  operator [](dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator ~(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic a, {dynamic b = #C1}) → core::bool*
+    return true;
+  operator <(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator >(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator <=(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator >=(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator -(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator +(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator /(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator ~/(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator *(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator %(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator |(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator ^(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator &(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator <<(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator >>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, {dynamic c = #C1}) → void
+    return true;
+  operator [](dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator ~(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator ==<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator <=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator >=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator unary-<T extends core::Object* = dynamic>() → dynamic
+    return true;
+  operator -<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator +<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator /<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ~/<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator *<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator %<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator |<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ^<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator &<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator <<<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator >><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator []=<T extends core::Object* = dynamic>(dynamic a, dynamic b) → void
+    return true;
+  operator []<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ~<T extends core::Object* = dynamic>() → dynamic
+    return true;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart b/pkg/front_end/testcases/general/invalid_operator2.dart
new file mode 100644
index 0000000..8c6f693
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Operators7 {
+  operator <<T>(a) => true;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.outline.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.outline.expect
new file mode 100644
index 0000000..59cdc77
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.outline.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Expected '{' before this.
+//   operator <<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:15: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   operator <<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Type 'T' not found.
+//   operator <<T>(a) => true;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    ;
+  operator <<() → dynamic
+    ;
+  operator >(dynamic a) → invalid-type
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.strong.expect
new file mode 100644
index 0000000..ada9780
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.strong.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Expected '{' before this.
+//   operator <<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:15: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   operator <<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Type 'T' not found.
+//   operator <<T>(a) => true;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator <<() → dynamic {}
+  operator >(dynamic a) → invalid-type
+    return true as{TypeError} invalid-type;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.strong.transformed.expect
new file mode 100644
index 0000000..ada9780
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.strong.transformed.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Expected '{' before this.
+//   operator <<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:15: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   operator <<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Type 'T' not found.
+//   operator <<T>(a) => true;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator <<() → dynamic {}
+  operator >(dynamic a) → invalid-type
+    return true as{TypeError} invalid-type;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invocations.dart.strong.expect b/pkg/front_end/testcases/general/invocations.dart.strong.expect
index 390dc20..2e5cbcb 100644
--- a/pkg/front_end/testcases/general/invocations.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.strong.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect
index 390dc20..2e5cbcb 100644
--- a/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.strong.expect b/pkg/front_end/testcases/general/issue39344.dart.strong.expect
index 8c367fc..bca8a50 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.strong.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect
index 8c367fc..bca8a50 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
index f1b93c3..51f556d 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
index f1b93c3..51f556d 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect
index d20dd45..f5c5171 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect
index d20dd45..f5c5171 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect
index ea56f3e..fa9a400 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::Foo*
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect
index 18203ab..5d3f769 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect
@@ -10,8 +10,8 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
index f6157cd..eb4e616 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
-          self::Class* c = #t2 as{TypeError} self::Class*;
+          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/libraries.json b/pkg/front_end/testcases/general/platform_invalid_uris/libraries.json
new file mode 100644
index 0000000..154c73c
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/libraries.json
@@ -0,0 +1,12 @@
+{
+  "none": {
+    "libraries": {
+      "test": {
+        "patches": [
+          "patch_lib.dart"
+        ],
+        "uri": "origin_lib.dart"
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart
new file mode 100644
index 0000000..6e0cb95
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:test';
+
+main() {
+  new Class();
+}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.outline.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.outline.expect
new file mode 100644
index 0000000..5212d00
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.outline.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic
+  ;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:8:9: Error: Couldn't parse URI ':c':
+//   Invalid empty scheme.
+// import ':c';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:9:9: Error: Couldn't parse URI ':d':
+//   Invalid empty scheme.
+// export ':d';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:5:9: Error: Couldn't parse URI ':a':
+//   Invalid empty scheme.
+// import ':a';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:6:9: Error: Couldn't parse URI ':b':
+//   Invalid empty scheme.
+// export ':b';
+//         ^
+//
+import self as self2;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+import "org-dartlang-malformed-uri:?%3Ac";
+export "org-dartlang-malformed-uri:?%3Ad";
+import "org-dartlang-malformed-uri:?%3Aa";
+export "org-dartlang-malformed-uri:?%3Ab";
+
+@_in::patch
+class Class extends core::Object {
+  synthetic constructor •() → self2::Class*
+    ;
+}
+
+library;
+import self as self3;
+
+
+library;
+import self as self4;
+
+
+library;
+import self as self5;
+
+
+library;
+import self as self6;
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect
new file mode 100644
index 0000000..3bb4f07
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect
@@ -0,0 +1,70 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:8:9: Error: Couldn't parse URI ':c':
+//   Invalid empty scheme.
+// import ':c';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:9:9: Error: Couldn't parse URI ':d':
+//   Invalid empty scheme.
+// export ':d';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:5:9: Error: Couldn't parse URI ':a':
+//   Invalid empty scheme.
+// import ':a';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:6:9: Error: Couldn't parse URI ':b':
+//   Invalid empty scheme.
+// export ':b';
+//         ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+import "org-dartlang-malformed-uri:?%3Ac";
+export "org-dartlang-malformed-uri:?%3Ad";
+import "org-dartlang-malformed-uri:?%3Aa";
+export "org-dartlang-malformed-uri:?%3Ab";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class*
+    : super core::Object::•()
+    ;
+}
+
+library;
+import self as self2;
+
+
+library;
+import self as self3;
+
+
+library;
+import self as self4;
+
+
+library;
+import self as self5;
+
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..3bb4f07
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.transformed.expect
@@ -0,0 +1,70 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:8:9: Error: Couldn't parse URI ':c':
+//   Invalid empty scheme.
+// import ':c';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:9:9: Error: Couldn't parse URI ':d':
+//   Invalid empty scheme.
+// export ':d';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:5:9: Error: Couldn't parse URI ':a':
+//   Invalid empty scheme.
+// import ':a';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:6:9: Error: Couldn't parse URI ':b':
+//   Invalid empty scheme.
+// export ':b';
+//         ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+import "org-dartlang-malformed-uri:?%3Ac";
+export "org-dartlang-malformed-uri:?%3Ad";
+import "org-dartlang-malformed-uri:?%3Aa";
+export "org-dartlang-malformed-uri:?%3Ab";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class*
+    : super core::Object::•()
+    ;
+}
+
+library;
+import self as self2;
+
+
+library;
+import self as self3;
+
+
+library;
+import self as self4;
+
+
+library;
+import self as self5;
+
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart b/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart
new file mode 100644
index 0000000..5db6a48
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import ':a';
+export ':b';
+
+class Class {}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart b/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart
new file mode 100644
index 0000000..b898ab1
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// ignore: import_internal_library
+import 'dart:_internal';
+
+import ':c';
+export ':d';
+
+@patch
+class Class {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect
index 18814f3..4bfac34 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect
index 18814f3..4bfac34 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect
index 2a7da3d..48f5952 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect
@@ -160,18 +160,18 @@
   } =>#t18;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
-    for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t21 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t20.{core::List::add}(#t21);
   } =>#t20;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t23 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t22.{core::Set::add}(#t23);
     #t22.{core::Set::add}(42);
   } =>#t22;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
       #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
     #t24.{core::Map::[]=}("baz", 42);
   } =>#t24;
@@ -377,14 +377,14 @@
   } =>#t91;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
-    for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t96 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t97 = #t96 as{TypeError} core::int*;
       #t95.{core::List::add}(#t97);
     }
   } =>#t95;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
       final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
       final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
       #t98.{core::Map::[]=}(#t100, #t101);
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
index aac1419..22a6806 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
@@ -208,7 +208,7 @@
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         #t20.{core::List::add}(#t21);
@@ -218,7 +218,7 @@
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         #t22.{core::Set::add}(#t23);
@@ -229,7 +229,7 @@
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
         #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
@@ -554,7 +554,7 @@
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -567,7 +567,7 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general/super_call.dart.strong.expect b/pkg/front_end/testcases/general/super_call.dart.strong.expect
index a56e117..7ef570e 100644
--- a/pkg/front_end/testcases/general/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.strong.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general/super_call.dart:14:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect
index a56e117..7ef570e 100644
--- a/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general/super_call.dart:14:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.outline.expect b/pkg/front_end/testcases/general/super_nsm.dart.outline.expect
index 2da773b..4f2eabf 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.outline.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.strong.expect b/pkg/front_end/testcases/general/super_nsm.dart.strong.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.strong.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect
index 79514a6..09551dc 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect
@@ -31,7 +31,7 @@
     return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
 }
 static method main() → dynamic {
   new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
diff --git a/pkg/front_end/testcases/general/void_methods.dart.strong.expect b/pkg/front_end/testcases/general/void_methods.dart.strong.expect
index 3bde972..c503392 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.strong.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect
index 9f36d60..739251d 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart
new file mode 100644
index 0000000..f678004
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'extension_from_dill_lib.dart';
+
+main() {
+  "".foo();
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart
new file mode 100644
index 0000000..8d058b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'extension_from_dill_lib2.dart';
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.outline.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.outline.expect
new file mode 100644
index 0000000..f307bb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.outline.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+
+import "org-dartlang-testcase:///extension_from_dill_lib.dart";
+
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "extension_from_dill_lib2.dart" as ext;
+additionalExports = (ext::Extension)
+
+export "org-dartlang-testcase:///extension_from_dill_lib2.dart";
+
+
+library;
+import self as ext;
+import "dart:core" as core;
+
+extension Extension on core::String* {
+  method foo = ext::Extension|foo;
+  tearoff foo = ext::Extension|get#foo;
+}
+static method Extension|foo(final core::String* #this) → dynamic
+  ;
+static method Extension|get#foo(final core::String* #this) → () →* dynamic
+  return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.strong.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.strong.expect
new file mode 100644
index 0000000..01e6ac2
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.strong.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "extension_from_dill_lib2.dart" as ext;
+
+import "org-dartlang-testcase:///extension_from_dill_lib.dart";
+
+static method main() → dynamic {
+  ext::Extension|foo("");
+}
+
+library;
+import self as self2;
+import "extension_from_dill_lib2.dart" as ext;
+additionalExports = (ext::Extension)
+
+export "org-dartlang-testcase:///extension_from_dill_lib2.dart";
+
+
+library;
+import self as ext;
+import "dart:core" as core;
+
+extension Extension on core::String* {
+  method foo = ext::Extension|foo;
+  tearoff foo = ext::Extension|get#foo;
+}
+static method Extension|foo(final core::String* #this) → dynamic
+  return 42;
+static method Extension|get#foo(final core::String* #this) → () →* dynamic
+  return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.strong.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.strong.transformed.expect
new file mode 100644
index 0000000..01e6ac2
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart.strong.transformed.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "extension_from_dill_lib2.dart" as ext;
+
+import "org-dartlang-testcase:///extension_from_dill_lib.dart";
+
+static method main() → dynamic {
+  ext::Extension|foo("");
+}
+
+library;
+import self as self2;
+import "extension_from_dill_lib2.dart" as ext;
+additionalExports = (ext::Extension)
+
+export "org-dartlang-testcase:///extension_from_dill_lib2.dart";
+
+
+library;
+import self as ext;
+import "dart:core" as core;
+
+extension Extension on core::String* {
+  method foo = ext::Extension|foo;
+  tearoff foo = ext::Extension|get#foo;
+}
+static method Extension|foo(final core::String* #this) → dynamic
+  return 42;
+static method Extension|get#foo(final core::String* #this) → () →* dynamic
+  return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart
new file mode 100644
index 0000000..baf81eb
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+extension Extension on String {
+  foo() => 42;
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/link.options b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/link.options
new file mode 100644
index 0000000..51b39bc
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/link.options
@@ -0,0 +1,2 @@
+extension_from_dill_lib.dart
+extension_from_dill_lib2.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.outline.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.outline.expect
new file mode 100644
index 0000000..ffc3306
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.outline.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///variance_from_dill_lib.dart";
+
+typedef G<unrelated T extends core::Object* = dynamic> = (() →* dynamic) →* dynamic;
+static method main() → dynamic
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+typedef F<unrelated T extends core::Object* = dynamic> = () →* dynamic;
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.strong.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.strong.expect
new file mode 100644
index 0000000..663835f
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.strong.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///variance_from_dill_lib.dart";
+
+typedef G<unrelated T extends core::Object* = dynamic> = (() →* dynamic) →* dynamic;
+static method main() → dynamic {
+  core::print((() →* dynamic) →* dynamic);
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+typedef F<unrelated T extends core::Object* = dynamic> = () →* dynamic;
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.strong.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.strong.transformed.expect
new file mode 100644
index 0000000..663835f
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart.strong.transformed.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///variance_from_dill_lib.dart";
+
+typedef G<unrelated T extends core::Object* = dynamic> = (() →* dynamic) →* dynamic;
+static method main() → dynamic {
+  core::print((() →* dynamic) →* dynamic);
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+typedef F<unrelated T extends core::Object* = dynamic> = () →* dynamic;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect
index 9febcbc1..0f02aec 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect
@@ -186,7 +186,7 @@
   method cMethod() → dynamic
     ;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -202,7 +202,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -226,7 +226,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect
index eca4d92..4d04d03 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect
@@ -182,7 +182,7 @@
   method bMethod() → dynamic {}
   method cMethod() → dynamic {}
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -199,7 +199,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -225,7 +225,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
index eca4d92..4d04d03 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
@@ -182,7 +182,7 @@
   method bMethod() → dynamic {}
   method cMethod() → dynamic {}
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -199,7 +199,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -225,7 +225,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
index 7200a65..f027a20 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D*
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect
index 5c3da0c..6916565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect
@@ -20,7 +20,7 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
   core::print(actual);
   if(!actual.{core::String::==}(expected)) {
     throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect
index 27b7653..2fe75da 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[])), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", <self::Node*>[:async_temporary_2, :async_temporary_0, _in::unsafeCast<self::Node*>(:result)]);
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!actual.{core::String::==}(expected)) {
           throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect
index 5c3da0c..6916565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect
@@ -20,7 +20,7 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
   core::print(actual);
   if(!actual.{core::String::==}(expected)) {
     throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect
index 27b7653..2fe75da 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect
@@ -47,7 +47,7 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[])), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", <self::Node*>[:async_temporary_2, :async_temporary_0, _in::unsafeCast<self::Node*>(:result)]);
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!actual.{core::String::==}(expected)) {
           throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect
index 9cf401a..a0b6fdd 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect
@@ -14,14 +14,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -41,65 +41,65 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method others() → dynamic async {
   core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError} core::int*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
   self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
   core::bool* a = false;
   core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError} core::bool*;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect
index b6697d5..3840565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect
@@ -15,14 +15,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -42,7 +42,7 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
@@ -67,27 +67,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -122,23 +122,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -174,23 +174,23 @@
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1);
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -232,17 +232,17 @@
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         core::int* cnt = 2;
         core::List<core::int*>* b = <core::int*>[1, 2, 3];
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError} core::int*);
+        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError,ForDynamic} core::int*);
         self::expect(1, b.{core::List::[]}(cnt));
         :async_temporary_4 = b.{core::List::[]}(0);
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -282,7 +282,7 @@
           ;
         else {
           [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = (:result as{TypeError} core::bool*).==(true);
+          :async_temporary_0 = (:result as{TypeError,ForDynamic} core::bool*).==(true);
         }
         core::bool* c = :async_temporary_0;
         self::expect(true, c);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect
index 9cf401a..a0b6fdd 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect
@@ -14,14 +14,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -41,65 +41,65 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method others() → dynamic async {
   core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError} core::int*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
   self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
   core::bool* a = false;
   core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError} core::bool*;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect
index b6697d5..3840565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect
@@ -15,14 +15,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -42,7 +42,7 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
@@ -67,27 +67,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -122,23 +122,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -174,23 +174,23 @@
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1);
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -232,17 +232,17 @@
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         core::int* cnt = 2;
         core::List<core::int*>* b = <core::int*>[1, 2, 3];
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError} core::int*);
+        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError,ForDynamic} core::int*);
         self::expect(1, b.{core::List::[]}(cnt));
         :async_temporary_4 = b.{core::List::[]}(0);
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -282,7 +282,7 @@
           ;
         else {
           [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = (:result as{TypeError} core::bool*).==(true);
+          :async_temporary_0 = (:result as{TypeError,ForDynamic} core::bool*).==(true);
         }
         core::bool* c = :async_temporary_0;
         self::expect(true, c);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect
index 92d9353..5c59c15 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect
index 6da0135..441b505 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect
index 92d9353..5c59c15 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect
index 6da0135..441b505 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect
index f133a9d..3044135 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t1.{core::List::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t1.{core::List::add}(i);
@@ -27,19 +27,19 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t2.{core::Set::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t2.{core::Set::add}(i);
@@ -47,19 +47,19 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t3.{core::Map::[]=}(i, i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(i, i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t3.{core::Map::[]=}(i, i);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect
index ac4ad8d..7bd3d63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect
@@ -8,14 +8,14 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -28,7 +28,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t1.{core::List::add}(i);
       }
     }
@@ -38,14 +38,14 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -58,7 +58,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t2.{core::Set::add}(i);
       }
     }
@@ -68,14 +68,14 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -88,7 +88,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t3.{core::Map::[]=}(i, i);
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect
index f133a9d..3044135 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t1.{core::List::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t1.{core::List::add}(i);
@@ -27,19 +27,19 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t2.{core::Set::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t2.{core::Set::add}(i);
@@ -47,19 +47,19 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t3.{core::Map::[]=}(i, i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(i, i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t3.{core::Map::[]=}(i, i);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect
index ac4ad8d..7bd3d63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect
@@ -8,14 +8,14 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -28,7 +28,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t1.{core::List::add}(i);
       }
     }
@@ -38,14 +38,14 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -58,7 +58,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t2.{core::Set::add}(i);
       }
     }
@@ -68,14 +68,14 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -88,7 +88,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t3.{core::Map::[]=}(i, i);
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect
index 384c9be..2c46fb9 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect
@@ -443,193 +443,193 @@
 static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(42);
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(42);
     #t2.{core::Set::add}(null);
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}("bar", 42);
     #t3.{core::Map::[]=}("baz", null);
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t4.{core::List::add}(dynVar);
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t5.{core::Set::add}(dynVar);
     #t5.{core::Set::add}(null);
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t6.{core::Map::[]=}("bar", dynVar);
     #t6.{core::Map::[]=}("baz", null);
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t7.{core::List::add}(<core::int*>[42]);
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t8.{core::Set::add}(<core::int*>[42]);
     #t8.{core::Set::add}(null);
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t9.{core::Map::[]=}("bar", <core::int*>[42]);
     #t9.{core::Map::[]=}("baz", null);
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t11 in <core::int*>[42])
         #t10.{core::List::add}(#t11);
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t13 in <core::int*>[42])
         #t12.{core::Set::add}(#t13);
     #t12.{core::Set::add}(null);
   } =>#t12;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t15 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
         #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
     #t14.{core::Map::[]=}("baz", null);
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t17 in <dynamic>[dynVar])
         #t16.{core::List::add}(#t17);
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t19 in <dynamic>[dynVar])
         #t18.{core::Set::add}(#t19);
     #t18.{core::Set::add}(null);
   } =>#t18;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, dynamic>* #t21 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
         #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
     #t20.{core::Map::[]=}("baz", null);
   } =>#t20;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t23 in <core::List<core::int*>*>[<core::int*>[42]])
         #t22.{core::List::add}(#t23);
   } =>#t22;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t25 in <core::List<core::int*>*>[<core::int*>[42]])
         #t24.{core::Set::add}(#t25);
     #t24.{core::Set::add}(null);
   } =>#t24;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
         #t26.{core::Map::[]=}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
     #t26.{core::Map::[]=}("baz", null);
   } =>#t26;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t28 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t29 in <core::int*>[42])
           #t28.{core::List::add}(#t29);
   } =>#t28;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t31 in <core::int*>[42])
           #t30.{core::Set::add}(#t31);
     #t30.{core::Set::add}(null);
   } =>#t30;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t33 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
           #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
     #t32.{core::Map::[]=}("baz", null);
   } =>#t32;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t34 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t35 in <dynamic>[dynVar])
           #t34.{core::List::add}(#t35);
   } =>#t34;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t37 in <dynamic>[dynVar])
           #t36.{core::Set::add}(#t37);
     #t36.{core::Set::add}(null);
   } =>#t36;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, dynamic>* #t39 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
           #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
     #t38.{core::Map::[]=}("baz", null);
   } =>#t38;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t41 in <core::List<core::int*>*>[<core::int*>[42]])
           #t40.{core::List::add}(#t41);
   } =>#t40;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t43 in <core::List<core::int*>*>[<core::int*>[42]])
           #t42.{core::Set::add}(#t43);
     #t42.{core::Set::add}(null);
   } =>#t42;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
           #t44.{core::Map::[]=}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
     #t44.{core::Map::[]=}("baz", null);
   } =>#t44;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t47 in <core::List<core::int*>*>[<core::int*>[]])
         #t46.{core::List::add}(#t47);
   } =>#t46;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t49 in <core::List<core::int*>*>[<core::int*>[]])
         #t48.{core::Set::add}(#t49);
     #t48.{core::Set::add}(null);
@@ -639,173 +639,173 @@
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t51 in let final core::Set<core::List<core::int*>*>* #t52 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t53 = #t52.{core::Set::add}(<core::int*>[]) in #t52)
         #t50.{core::List::add}(#t51);
   } =>#t50;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t55 in let final core::Set<core::List<core::int*>*>* #t56 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t57 = #t56.{core::Set::add}(<core::int*>[]) in #t56)
         #t54.{core::Set::add}(#t55);
     #t54.{core::Set::add}(null);
   } =>#t54;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t59 in <core::List<core::int*>*>[<core::int*>[]])
           #t58.{core::List::add}(#t59);
   } =>#t58;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t61 in <core::List<core::int*>*>[<core::int*>[]])
           #t60.{core::Set::add}(#t61);
     #t60.{core::Set::add}(null);
   } =>#t60;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t62.{core::Map::[]=}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
     #t62.{core::Map::[]=}("baz", null);
   } =>#t62;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t64 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t65 in <core::int*>[])
         #t64.{core::List::add}(#t65);
   } =>#t64;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t67 in <core::int*>[])
         #t66.{core::Set::add}(#t67);
     #t66.{core::Set::add}(null);
   } =>#t66;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t69 in <core::String*, core::int*>{}.{core::Map::entries})
         #t68.{core::Map::[]=}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
     #t68.{core::Map::[]=}("baz", null);
   } =>#t68;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t71 in let final core::Set<core::int*>* #t72 = col::LinkedHashSet::•<core::int*>() in #t72)
         #t70.{core::List::add}(#t71);
   } =>#t70;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t74 in let final core::Set<core::int*>* #t75 = col::LinkedHashSet::•<core::int*>() in #t75)
         #t73.{core::Set::add}(#t74);
     #t73.{core::Set::add}(null);
   } =>#t73;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t76 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t77 in <core::int*>[])
           #t76.{core::List::add}(#t77);
   } =>#t76;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t79 in <core::int*>[])
           #t78.{core::Set::add}(#t79);
     #t78.{core::Set::add}(null);
   } =>#t78;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t81 in <core::String*, core::int*>{}.{core::Map::entries})
           #t80.{core::Map::[]=}(#t81.{core::MapEntry::key}, #t81.{core::MapEntry::value});
     #t80.{core::Map::[]=}("baz", null);
   } =>#t80;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t83 in <core::List<core::int*>*>[<core::int*>[]])
         #t82.{core::List::add}(#t83);
   } =>#t82;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t85 in <core::List<core::int*>*>[<core::int*>[]])
         #t84.{core::Set::add}(#t85);
     #t84.{core::Set::add}(null);
   } =>#t84;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
     #t86.{core::Map::[]=}("baz", null);
   } =>#t86;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t89 in <core::List<core::int*>*>[<core::int*>[]])
           #t88.{core::List::add}(#t89);
   } =>#t88;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t91 in <core::List<core::int*>*>[<core::int*>[]])
           #t90.{core::Set::add}(#t91);
     #t90.{core::Set::add}(null);
   } =>#t90;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t92.{core::Map::[]=}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
     #t92.{core::Map::[]=}("baz", null);
   } =>#t92;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t94.{core::List::add}(<core::int*>[]);
   } =>#t94;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t95.{core::Set::add}(<core::int*>[]);
     #t95.{core::Set::add}(null);
   } =>#t95;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t96.{core::List::add}(<core::int*>[]);
   } =>#t96;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t97.{core::Set::add}(<core::int*>[]);
     #t97.{core::Set::add}(null);
   } =>#t97;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t98 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t98.{core::List::add}(42);
     else
       #t98.{core::List::add}(3.14);
   } =>#t98;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -813,7 +813,7 @@
   } =>#t99;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -821,7 +821,7 @@
   } =>#t100;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t101 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t102 in listInt)
         #t101.{core::List::add}(#t102);
     else
@@ -830,7 +830,7 @@
   } =>#t101;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t105 in listInt)
         #t104.{core::Set::add}(#t105);
     else
@@ -840,7 +840,7 @@
   } =>#t104;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::num*>* #t108 in mapToInt.{core::Map::entries})
         #t107.{core::Map::[]=}(#t108.{core::MapEntry::key}, #t108.{core::MapEntry::value});
     else
@@ -850,38 +850,38 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t111 in listInt)
         #t110.{core::List::add}(#t111);
     else
-      for (final dynamic #t112 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t112 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t110.{core::List::add}(#t112);
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t114 in listInt)
         #t113.{core::Set::add}(#t114);
     else
-      for (final dynamic #t115 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t115 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t113.{core::Set::add}(#t115);
     #t113.{core::Set::add}(null);
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else
-      for (final dynamic #t117 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t117 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t116.{core::Set::add}(#t117);
     #t116.{core::Set::add}(null);
   } =>#t116;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t118 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else
       for (final core::num* #t119 in listDouble)
@@ -889,7 +889,7 @@
   } =>#t118;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t121 in listInt)
         #t120.{core::Set::add}(#t121);
     else
@@ -898,7 +898,7 @@
   } =>#t120;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::num*>* #t123 in mapToInt.{core::Map::entries})
         #t122.{core::Map::[]=}(#t123.{core::MapEntry::key}, #t123.{core::MapEntry::value});
     else
@@ -907,33 +907,33 @@
   } =>#t122;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t124 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t124;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t125.{core::Set::add}(null);
   } =>#t125;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t126.{core::Map::[]=}("baz", null);
   } =>#t126;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t127 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final dynamic #t128 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t128 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t129 = #t128 as{TypeError} core::int*;
         #t127.{core::List::add}(#t129);
       }
   } =>#t127;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final dynamic #t131 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t131 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t132 = #t131 as{TypeError} core::int*;
         #t130.{core::Set::add}(#t132);
       }
@@ -941,8 +941,8 @@
   } =>#t130;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
         final core::String* #t135 = #t134.{core::MapEntry::key} as{TypeError} core::String*;
         final core::int* #t136 = #t134.{core::MapEntry::value} as{TypeError} core::int*;
         #t133.{core::Map::[]=}(#t135, #t136);
@@ -951,31 +951,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t137.{core::List::add}(42);
   } =>#t137;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t138.{core::Set::add}(42);
   } =>#t138;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t139.{core::Map::[]=}(42, 42);
   } =>#t139;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t140 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -983,7 +983,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -991,7 +991,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*])
@@ -999,7 +999,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*])
@@ -1008,7 +1008,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
@@ -1017,7 +1017,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1025,7 +1025,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1041,7 +1041,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1052,7 +1052,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1064,7 +1064,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1076,7 +1076,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1086,7 +1086,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1104,7 +1104,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1114,7 +1114,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1171,7 +1171,7 @@
   } =>#t174;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t176 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1182,7 +1182,7 @@
   } =>#t176;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1193,7 +1193,7 @@
   } =>#t179;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1204,7 +1204,7 @@
   } =>#t182;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1217,380 +1217,380 @@
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t188 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t188.{core::List::add}(42);
   } =>#t188;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t189.{core::Set::add}(42);
     #t189.{core::Set::add}(null);
   } =>#t189;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t190.{core::Map::[]=}("bar", 42);
     #t190.{core::Map::[]=}("baz", null);
   } =>#t190;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t191 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t191.{core::List::add}(dynVar);
   } =>#t191;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t192.{core::Set::add}(dynVar);
     #t192.{core::Set::add}(null);
   } =>#t192;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t193.{core::Map::[]=}("bar", dynVar);
     #t193.{core::Map::[]=}("baz", null);
   } =>#t193;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t194.{core::List::add}(<core::int*>[42]);
   } =>#t194;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t195.{core::Set::add}(<core::int*>[42]);
     #t195.{core::Set::add}(null);
   } =>#t195;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t196.{core::Map::[]=}("bar", <core::int*>[42]);
     #t196.{core::Map::[]=}("baz", null);
   } =>#t196;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t197 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t198 in <core::int*>[42])
         #t197.{core::List::add}(#t198);
   } =>#t197;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t200 in <core::int*>[42])
         #t199.{core::Set::add}(#t200);
     #t199.{core::Set::add}(null);
   } =>#t199;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::int*>* #t202 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
         #t201.{core::Map::[]=}(#t202.{core::MapEntry::key}, #t202.{core::MapEntry::value});
     #t201.{core::Map::[]=}("baz", null);
   } =>#t201;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t203 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final dynamic #t204 in <dynamic>[dynVar])
         #t203.{core::List::add}(#t204);
   } =>#t203;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final dynamic #t206 in <dynamic>[dynVar])
         #t205.{core::Set::add}(#t206);
     #t205.{core::Set::add}(null);
   } =>#t205;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, dynamic>* #t208 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
         #t207.{core::Map::[]=}(#t208.{core::MapEntry::key}, #t208.{core::MapEntry::value});
     #t207.{core::Map::[]=}("baz", null);
   } =>#t207;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t210 in <core::List<core::int*>*>[<core::int*>[42]])
         #t209.{core::List::add}(#t210);
   } =>#t209;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t212 in <core::List<core::int*>*>[<core::int*>[42]])
         #t211.{core::Set::add}(#t212);
     #t211.{core::Set::add}(null);
   } =>#t211;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
         #t213.{core::Map::[]=}(#t214.{core::MapEntry::key}, #t214.{core::MapEntry::value});
     #t213.{core::Map::[]=}("baz", null);
   } =>#t213;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t215 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t216 in <core::int*>[42])
           #t215.{core::List::add}(#t216);
   } =>#t215;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t218 in <core::int*>[42])
           #t217.{core::Set::add}(#t218);
     #t217.{core::Set::add}(null);
   } =>#t217;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t220 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
           #t219.{core::Map::[]=}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
     #t219.{core::Map::[]=}("baz", null);
   } =>#t219;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t221 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t222 in <dynamic>[dynVar])
           #t221.{core::List::add}(#t222);
   } =>#t221;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t224 in <dynamic>[dynVar])
           #t223.{core::Set::add}(#t224);
     #t223.{core::Set::add}(null);
   } =>#t223;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, dynamic>* #t226 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
           #t225.{core::Map::[]=}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
     #t225.{core::Map::[]=}("baz", null);
   } =>#t225;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t228 in <core::List<core::int*>*>[<core::int*>[42]])
           #t227.{core::List::add}(#t228);
   } =>#t227;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t230 in <core::List<core::int*>*>[<core::int*>[42]])
           #t229.{core::Set::add}(#t230);
     #t229.{core::Set::add}(null);
   } =>#t229;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
           #t231.{core::Map::[]=}(#t232.{core::MapEntry::key}, #t232.{core::MapEntry::value});
     #t231.{core::Map::[]=}("baz", null);
   } =>#t231;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t234 in <core::List<core::int*>*>[<core::int*>[]])
         #t233.{core::List::add}(#t234);
   } =>#t233;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t236 in <core::List<core::int*>*>[<core::int*>[]])
         #t235.{core::Set::add}(#t236);
     #t235.{core::Set::add}(null);
   } =>#t235;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t237.{core::Map::[]=}(#t238.{core::MapEntry::key}, #t238.{core::MapEntry::value});
     #t237.{core::Map::[]=}("baz", null);
   } =>#t237;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t240 in let final core::Set<core::List<core::int*>*>* #t241 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t242 = #t241.{core::Set::add}(<core::int*>[]) in #t241)
         #t239.{core::List::add}(#t240);
   } =>#t239;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t244 in let final core::Set<core::List<core::int*>*>* #t245 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t246 = #t245.{core::Set::add}(<core::int*>[]) in #t245)
         #t243.{core::Set::add}(#t244);
     #t243.{core::Set::add}(null);
   } =>#t243;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t248 in <core::List<core::int*>*>[<core::int*>[]])
           #t247.{core::List::add}(#t248);
   } =>#t247;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t250 in <core::List<core::int*>*>[<core::int*>[]])
           #t249.{core::Set::add}(#t250);
     #t249.{core::Set::add}(null);
   } =>#t249;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t251.{core::Map::[]=}(#t252.{core::MapEntry::key}, #t252.{core::MapEntry::value});
     #t251.{core::Map::[]=}("baz", null);
   } =>#t251;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t254 in <core::int*>[])
         #t253.{core::List::add}(#t254);
   } =>#t253;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t256 in <core::int*>[])
         #t255.{core::Set::add}(#t256);
     #t255.{core::Set::add}(null);
   } =>#t255;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::int*>* #t258 in <core::String*, core::int*>{}.{core::Map::entries})
         #t257.{core::Map::[]=}(#t258.{core::MapEntry::key}, #t258.{core::MapEntry::value});
     #t257.{core::Map::[]=}("baz", null);
   } =>#t257;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t260 in let final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>() in #t261)
         #t259.{core::List::add}(#t260);
   } =>#t259;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t263 in let final core::Set<core::int*>* #t264 = col::LinkedHashSet::•<core::int*>() in #t264)
         #t262.{core::Set::add}(#t263);
     #t262.{core::Set::add}(null);
   } =>#t262;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t265 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t266 in <core::int*>[])
           #t265.{core::List::add}(#t266);
   } =>#t265;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t268 in <core::int*>[])
           #t267.{core::Set::add}(#t268);
     #t267.{core::Set::add}(null);
   } =>#t267;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t270 in <core::List<core::int*>*>[<core::int*>[]])
         #t269.{core::List::add}(#t270);
   } =>#t269;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t272 in <core::List<core::int*>*>[<core::int*>[]])
         #t271.{core::Set::add}(#t272);
     #t271.{core::Set::add}(null);
   } =>#t271;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t273.{core::Map::[]=}(#t274.{core::MapEntry::key}, #t274.{core::MapEntry::value});
     #t273.{core::Map::[]=}("baz", null);
   } =>#t273;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t276 in <core::List<core::int*>*>[<core::int*>[]])
           #t275.{core::List::add}(#t276);
   } =>#t275;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t278 in <core::List<core::int*>*>[<core::int*>[]])
           #t277.{core::Set::add}(#t278);
     #t277.{core::Set::add}(null);
   } =>#t277;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t279.{core::Map::[]=}(#t280.{core::MapEntry::key}, #t280.{core::MapEntry::value});
     #t279.{core::Map::[]=}("baz", null);
   } =>#t279;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t281.{core::List::add}(<core::int*>[]);
   } =>#t281;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t282.{core::Set::add}(<core::int*>[]);
     #t282.{core::Set::add}(null);
   } =>#t282;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t283.{core::Map::[]=}("bar", <core::int*>[]);
     #t283.{core::Map::[]=}("baz", null);
   } =>#t283;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t284.{core::List::add}(<core::int*>[]);
   } =>#t284;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t285.{core::Set::add}(<core::int*>[]);
     #t285.{core::Set::add}(null);
   } =>#t285;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t286.{core::Map::[]=}("bar", <core::int*>[]);
     #t286.{core::Map::[]=}("baz", null);
   } =>#t286;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t287 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t287.{core::List::add}(42);
       else
         #t287.{core::List::add}(3.14);
   } =>#t287;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1598,8 +1598,8 @@
   } =>#t288;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -1607,8 +1607,8 @@
   } =>#t289;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t290 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t291 in listInt)
           #t290.{core::List::add}(#t291);
       else
@@ -1617,8 +1617,8 @@
   } =>#t290;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t294 in listInt)
           #t293.{core::Set::add}(#t294);
       else
@@ -1628,8 +1628,8 @@
   } =>#t293;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::num*>* #t297 in mapStringInt.{core::Map::entries})
           #t296.{core::Map::[]=}(#t297.{core::MapEntry::key}, #t297.{core::MapEntry::value});
       else
@@ -1639,40 +1639,40 @@
   } =>#t296;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t299 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t300 in listInt)
           #t299.{core::List::add}(#t300);
       else
-        for (final dynamic #t301 in dynVar as{TypeError} core::Iterable<dynamic>*)
+        for (final dynamic #t301 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
           #t299.{core::List::add}(#t301);
   } =>#t299;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t303 in listInt)
           #t302.{core::Set::add}(#t303);
       else
-        for (final dynamic #t304 in dynVar as{TypeError} core::Iterable<dynamic>*)
+        for (final dynamic #t304 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
           #t302.{core::Set::add}(#t304);
     #t302.{core::Set::add}(null);
   } =>#t302;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<dynamic, dynamic>* #t306 in mapStringInt.{core::Map::entries})
           #t305.{core::Map::[]=}(#t306.{core::MapEntry::key}, #t306.{core::MapEntry::value});
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
     #t305.{core::Map::[]=}("baz", null);
   } =>#t305;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t308 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else
         for (final core::num* #t309 in listDouble)
@@ -1680,8 +1680,8 @@
   } =>#t308;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t311 in listInt)
           #t310.{core::Set::add}(#t311);
       else
@@ -1690,8 +1690,8 @@
   } =>#t310;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::num*>* #t313 in mapStringInt.{core::Map::entries})
           #t312.{core::Map::[]=}(#t313.{core::MapEntry::key}, #t313.{core::MapEntry::value});
       else
@@ -1700,33 +1700,33 @@
   } =>#t312;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t314 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t314;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t315.{core::Set::add}(null);
   } =>#t315;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t316.{core::Map::[]=}("baz", null);
   } =>#t316;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t317 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final dynamic #t318 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t318 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t319 = #t318 as{TypeError} core::int*;
         #t317.{core::List::add}(#t319);
       }
   } =>#t317;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final dynamic #t321 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t321 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t322 = #t321 as{TypeError} core::int*;
         #t320.{core::Set::add}(#t322);
       }
@@ -1734,8 +1734,8 @@
   } =>#t320;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
         final core::String* #t325 = #t324.{core::MapEntry::key} as{TypeError} core::String*;
         final core::int* #t326 = #t324.{core::MapEntry::value} as{TypeError} core::int*;
         #t323.{core::Map::[]=}(#t325, #t326);
@@ -1744,17 +1744,17 @@
   } =>#t323;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
-    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t327.{core::List::add}(42);
   } =>#t327;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t329.{core::Set::add}(42);
   } =>#t329;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
-    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -1776,19 +1776,19 @@
   } =>#t335;
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t336.{core::List::add}(i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t337.{core::Set::add}(i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
     #t337.{core::Set::add}(null);
   } =>#t337;
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
     #t338.{core::Map::[]=}("baz", null);
   } =>#t338;
   core::List<core::int*>* list130 = block {
@@ -1810,14 +1810,14 @@
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
   block {
     final core::List<core::int*>* #t342 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
   } =>#t342;
   block {
     final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -1825,7 +1825,7 @@
   } =>#t344;
   block {
     final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1837,7 +1837,7 @@
   } =>#t346;
   block {
     final core::List<core::int*>* #t350 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1845,7 +1845,7 @@
   } =>#t350;
   block {
     final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1854,7 +1854,7 @@
   } =>#t353;
   block {
     final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1867,7 +1867,7 @@
   } =>#t356;
   block {
     final core::List<core::int*>* #t361 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -1875,7 +1875,7 @@
   } =>#t361;
   block {
     final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -1891,8 +1891,8 @@
                                                     ^": null};
   block {
     final core::List<core::String*>* #t363 = <core::String*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1903,8 +1903,8 @@
   } =>#t363;
   block {
     final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1916,8 +1916,8 @@
   } =>#t366;
   block {
     final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -1929,8 +1929,8 @@
   } =>#t369;
   block {
     final core::List<core::int*>* #t372 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -1940,8 +1940,8 @@
   } =>#t372;
   block {
     final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -1959,8 +1959,8 @@
                                                                      ^": null};
   block {
     final core::List<core::int*>* #t374 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t374.{core::List::add}(42);
       else
         #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1970,8 +1970,8 @@
   } =>#t374;
   block {
     final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t375.{core::Set::add}(42);
       else
         #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect
index 2901fae..dfec04b 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect
@@ -444,58 +444,58 @@
 static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(42);
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(42);
     #t2.{core::Set::add}(null);
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}("bar", 42);
     #t3.{core::Map::[]=}("baz", null);
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t4.{core::List::add}(dynVar);
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t5.{core::Set::add}(dynVar);
     #t5.{core::Set::add}(null);
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t6.{core::Map::[]=}("bar", dynVar);
     #t6.{core::Map::[]=}("baz", null);
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t7.{core::List::add}(<core::int*>[42]);
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t8.{core::Set::add}(<core::int*>[42]);
     #t8.{core::Set::add}(null);
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t9.{core::Map::[]=}("bar", <core::int*>[42]);
     #t9.{core::Map::[]=}("baz", null);
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
@@ -505,7 +505,7 @@
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
@@ -516,7 +516,7 @@
   } =>#t12;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
@@ -527,7 +527,7 @@
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
@@ -537,7 +537,7 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
@@ -548,7 +548,7 @@
   } =>#t18;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
@@ -559,7 +559,7 @@
   } =>#t20;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
@@ -569,7 +569,7 @@
   } =>#t22;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
@@ -580,7 +580,7 @@
   } =>#t24;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
@@ -591,8 +591,8 @@
   } =>#t26;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t28 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
@@ -602,8 +602,8 @@
   } =>#t28;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
@@ -614,8 +614,8 @@
   } =>#t30;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
@@ -626,8 +626,8 @@
   } =>#t32;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t34 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
@@ -637,8 +637,8 @@
   } =>#t34;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
@@ -649,8 +649,8 @@
   } =>#t36;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
@@ -661,8 +661,8 @@
   } =>#t38;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
@@ -672,8 +672,8 @@
   } =>#t40;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
@@ -684,8 +684,8 @@
   } =>#t42;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
@@ -696,7 +696,7 @@
   } =>#t44;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
@@ -706,7 +706,7 @@
   } =>#t46;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
@@ -720,7 +720,7 @@
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
@@ -730,7 +730,7 @@
   } =>#t50;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
@@ -741,8 +741,8 @@
   } =>#t54;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
@@ -752,8 +752,8 @@
   } =>#t58;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
@@ -764,8 +764,8 @@
   } =>#t60;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
@@ -776,7 +776,7 @@
   } =>#t62;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t64 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
@@ -786,7 +786,7 @@
   } =>#t64;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
@@ -797,7 +797,7 @@
   } =>#t66;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
@@ -808,7 +808,7 @@
   } =>#t68;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
@@ -818,7 +818,7 @@
   } =>#t70;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
@@ -829,8 +829,8 @@
   } =>#t73;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t76 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
@@ -840,8 +840,8 @@
   } =>#t76;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
@@ -852,8 +852,8 @@
   } =>#t78;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
@@ -864,7 +864,7 @@
   } =>#t80;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
@@ -874,7 +874,7 @@
   } =>#t82;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
@@ -885,7 +885,7 @@
   } =>#t84;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
@@ -896,8 +896,8 @@
   } =>#t86;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
@@ -907,8 +907,8 @@
   } =>#t88;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
@@ -919,8 +919,8 @@
   } =>#t90;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
@@ -931,38 +931,38 @@
   } =>#t92;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t94.{core::List::add}(<core::int*>[]);
   } =>#t94;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t95.{core::Set::add}(<core::int*>[]);
     #t95.{core::Set::add}(null);
   } =>#t95;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t96.{core::List::add}(<core::int*>[]);
   } =>#t96;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t97.{core::Set::add}(<core::int*>[]);
     #t97.{core::Set::add}(null);
   } =>#t97;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t98 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t98.{core::List::add}(42);
     else
       #t98.{core::List::add}(3.14);
   } =>#t98;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -970,7 +970,7 @@
   } =>#t99;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -978,7 +978,7 @@
   } =>#t100;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t101 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
@@ -995,7 +995,7 @@
   } =>#t101;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
@@ -1013,7 +1013,7 @@
   } =>#t104;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
@@ -1031,7 +1031,7 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
@@ -1039,7 +1039,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         #t110.{core::List::add}(#t112);
@@ -1048,7 +1048,7 @@
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
@@ -1056,7 +1056,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         #t113.{core::Set::add}(#t115);
@@ -1066,13 +1066,13 @@
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
         #t116.{core::Set::add}(#t117);
@@ -1082,7 +1082,7 @@
   } =>#t116;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t118 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else {
       core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -1094,7 +1094,7 @@
   } =>#t118;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
@@ -1107,7 +1107,7 @@
   } =>#t120;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
@@ -1120,25 +1120,25 @@
   } =>#t122;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t124 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t124;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t125.{core::Set::add}(null);
   } =>#t125;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t126.{core::Map::[]=}("baz", null);
   } =>#t126;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t127 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1150,8 +1150,8 @@
   } =>#t127;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1164,8 +1164,8 @@
   } =>#t130;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1179,31 +1179,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t137.{core::List::add}(42);
   } =>#t137;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t138.{core::Set::add}(42);
   } =>#t138;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t139.{core::Map::[]=}(42, 42);
   } =>#t139;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t140 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -1211,7 +1211,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -1219,7 +1219,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1231,7 +1231,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1244,7 +1244,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
@@ -1257,7 +1257,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1265,7 +1265,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1281,7 +1281,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1292,7 +1292,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1304,7 +1304,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1316,7 +1316,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1326,7 +1326,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1344,7 +1344,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1354,7 +1354,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1411,7 +1411,7 @@
   } =>#t174;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t176 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1422,7 +1422,7 @@
   } =>#t176;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1433,7 +1433,7 @@
   } =>#t179;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1444,7 +1444,7 @@
   } =>#t182;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1457,58 +1457,58 @@
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t188 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t188.{core::List::add}(42);
   } =>#t188;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t189.{core::Set::add}(42);
     #t189.{core::Set::add}(null);
   } =>#t189;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t190.{core::Map::[]=}("bar", 42);
     #t190.{core::Map::[]=}("baz", null);
   } =>#t190;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t191 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t191.{core::List::add}(dynVar);
   } =>#t191;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t192.{core::Set::add}(dynVar);
     #t192.{core::Set::add}(null);
   } =>#t192;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t193.{core::Map::[]=}("bar", dynVar);
     #t193.{core::Map::[]=}("baz", null);
   } =>#t193;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t194.{core::List::add}(<core::int*>[42]);
   } =>#t194;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t195.{core::Set::add}(<core::int*>[42]);
     #t195.{core::Set::add}(null);
   } =>#t195;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t196.{core::Map::[]=}("bar", <core::int*>[42]);
     #t196.{core::Map::[]=}("baz", null);
   } =>#t196;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t197 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
@@ -1518,7 +1518,7 @@
   } =>#t197;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
@@ -1529,7 +1529,7 @@
   } =>#t199;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
@@ -1540,7 +1540,7 @@
   } =>#t201;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t203 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
@@ -1550,7 +1550,7 @@
   } =>#t203;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
@@ -1561,7 +1561,7 @@
   } =>#t205;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
@@ -1572,7 +1572,7 @@
   } =>#t207;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
@@ -1582,7 +1582,7 @@
   } =>#t209;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
@@ -1593,7 +1593,7 @@
   } =>#t211;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
@@ -1604,8 +1604,8 @@
   } =>#t213;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t215 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
@@ -1615,8 +1615,8 @@
   } =>#t215;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
@@ -1627,8 +1627,8 @@
   } =>#t217;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
@@ -1639,8 +1639,8 @@
   } =>#t219;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t221 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
@@ -1650,8 +1650,8 @@
   } =>#t221;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
@@ -1662,8 +1662,8 @@
   } =>#t223;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
@@ -1674,8 +1674,8 @@
   } =>#t225;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
@@ -1685,8 +1685,8 @@
   } =>#t227;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
@@ -1697,8 +1697,8 @@
   } =>#t229;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
@@ -1709,7 +1709,7 @@
   } =>#t231;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
@@ -1719,7 +1719,7 @@
   } =>#t233;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
@@ -1730,7 +1730,7 @@
   } =>#t235;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
@@ -1741,7 +1741,7 @@
   } =>#t237;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
@@ -1751,7 +1751,7 @@
   } =>#t239;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
@@ -1762,8 +1762,8 @@
   } =>#t243;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
@@ -1773,8 +1773,8 @@
   } =>#t247;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
@@ -1785,8 +1785,8 @@
   } =>#t249;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
@@ -1797,7 +1797,7 @@
   } =>#t251;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
@@ -1807,7 +1807,7 @@
   } =>#t253;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
@@ -1818,7 +1818,7 @@
   } =>#t255;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
@@ -1829,7 +1829,7 @@
   } =>#t257;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
@@ -1839,7 +1839,7 @@
   } =>#t259;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
@@ -1850,8 +1850,8 @@
   } =>#t262;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t265 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
@@ -1861,8 +1861,8 @@
   } =>#t265;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
@@ -1873,7 +1873,7 @@
   } =>#t267;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
@@ -1883,7 +1883,7 @@
   } =>#t269;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
@@ -1894,7 +1894,7 @@
   } =>#t271;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
@@ -1905,8 +1905,8 @@
   } =>#t273;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
@@ -1916,8 +1916,8 @@
   } =>#t275;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
@@ -1928,8 +1928,8 @@
   } =>#t277;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
@@ -1940,53 +1940,53 @@
   } =>#t279;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t281.{core::List::add}(<core::int*>[]);
   } =>#t281;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t282.{core::Set::add}(<core::int*>[]);
     #t282.{core::Set::add}(null);
   } =>#t282;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t283.{core::Map::[]=}("bar", <core::int*>[]);
     #t283.{core::Map::[]=}("baz", null);
   } =>#t283;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t284.{core::List::add}(<core::int*>[]);
   } =>#t284;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t285.{core::Set::add}(<core::int*>[]);
     #t285.{core::Set::add}(null);
   } =>#t285;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t286.{core::Map::[]=}("bar", <core::int*>[]);
     #t286.{core::Map::[]=}("baz", null);
   } =>#t286;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t287 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t287.{core::List::add}(42);
       else
         #t287.{core::List::add}(3.14);
   } =>#t287;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1994,8 +1994,8 @@
   } =>#t288;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -2003,8 +2003,8 @@
   } =>#t289;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t290 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
@@ -2021,8 +2021,8 @@
   } =>#t290;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
@@ -2040,8 +2040,8 @@
   } =>#t293;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
@@ -2059,8 +2059,8 @@
   } =>#t296;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t299 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
@@ -2068,7 +2068,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
           #t299.{core::List::add}(#t301);
@@ -2077,8 +2077,8 @@
   } =>#t299;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
@@ -2086,7 +2086,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
           #t302.{core::Set::add}(#t304);
@@ -2096,8 +2096,8 @@
   } =>#t302;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
@@ -2105,7 +2105,7 @@
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
@@ -2115,8 +2115,8 @@
   } =>#t305;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t308 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else {
         core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -2128,8 +2128,8 @@
   } =>#t308;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
@@ -2142,8 +2142,8 @@
   } =>#t310;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
@@ -2156,25 +2156,25 @@
   } =>#t312;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t314 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t314;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t315.{core::Set::add}(null);
   } =>#t315;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t316.{core::Map::[]=}("baz", null);
   } =>#t316;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t317 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2186,8 +2186,8 @@
   } =>#t317;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2200,8 +2200,8 @@
   } =>#t320;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2215,17 +2215,17 @@
   } =>#t323;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
-    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t327.{core::List::add}(42);
   } =>#t327;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t329.{core::Set::add}(42);
   } =>#t329;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
-    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -2263,20 +2263,20 @@
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t336.{core::List::add}(i as{TypeError} core::int*);
+        #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t337.{core::Set::add}(i as{TypeError} core::int*);
+        #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t337.{core::Set::add}(null);
@@ -2284,10 +2284,10 @@
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+        #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t338.{core::Map::[]=}("baz", null);
@@ -2326,14 +2326,14 @@
       {
         block {
           final core::List<core::int*>* #t342 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
         } =>#t342;
         block {
           final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -2341,7 +2341,7 @@
         } =>#t344;
         block {
           final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2353,7 +2353,7 @@
         } =>#t346;
         block {
           final core::List<core::int*>* #t350 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2365,7 +2365,7 @@
         } =>#t350;
         block {
           final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2378,7 +2378,7 @@
         } =>#t353;
         block {
           final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2395,7 +2395,7 @@
         } =>#t356;
         block {
           final core::List<core::int*>* #t361 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -2403,7 +2403,7 @@
         } =>#t361;
         block {
           final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -2419,8 +2419,8 @@
                                                     ^": null};
         block {
           final core::List<core::String*>* #t363 = <core::String*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2431,8 +2431,8 @@
         } =>#t363;
         block {
           final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2444,8 +2444,8 @@
         } =>#t366;
         block {
           final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -2457,8 +2457,8 @@
         } =>#t369;
         block {
           final core::List<core::int*>* #t372 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -2468,8 +2468,8 @@
         } =>#t372;
         block {
           final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -2487,8 +2487,8 @@
                                                                      ^": null};
         block {
           final core::List<core::int*>* #t374 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t374.{core::List::add}(42);
             else
               #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -2498,8 +2498,8 @@
         } =>#t374;
         block {
           final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t375.{core::Set::add}(42);
             else
               #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect
index 384c9be..2c46fb9 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect
@@ -443,193 +443,193 @@
 static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(42);
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(42);
     #t2.{core::Set::add}(null);
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}("bar", 42);
     #t3.{core::Map::[]=}("baz", null);
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t4.{core::List::add}(dynVar);
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t5.{core::Set::add}(dynVar);
     #t5.{core::Set::add}(null);
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t6.{core::Map::[]=}("bar", dynVar);
     #t6.{core::Map::[]=}("baz", null);
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t7.{core::List::add}(<core::int*>[42]);
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t8.{core::Set::add}(<core::int*>[42]);
     #t8.{core::Set::add}(null);
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t9.{core::Map::[]=}("bar", <core::int*>[42]);
     #t9.{core::Map::[]=}("baz", null);
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t11 in <core::int*>[42])
         #t10.{core::List::add}(#t11);
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t13 in <core::int*>[42])
         #t12.{core::Set::add}(#t13);
     #t12.{core::Set::add}(null);
   } =>#t12;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t15 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
         #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
     #t14.{core::Map::[]=}("baz", null);
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t17 in <dynamic>[dynVar])
         #t16.{core::List::add}(#t17);
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t19 in <dynamic>[dynVar])
         #t18.{core::Set::add}(#t19);
     #t18.{core::Set::add}(null);
   } =>#t18;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, dynamic>* #t21 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
         #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
     #t20.{core::Map::[]=}("baz", null);
   } =>#t20;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t23 in <core::List<core::int*>*>[<core::int*>[42]])
         #t22.{core::List::add}(#t23);
   } =>#t22;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t25 in <core::List<core::int*>*>[<core::int*>[42]])
         #t24.{core::Set::add}(#t25);
     #t24.{core::Set::add}(null);
   } =>#t24;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
         #t26.{core::Map::[]=}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
     #t26.{core::Map::[]=}("baz", null);
   } =>#t26;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t28 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t29 in <core::int*>[42])
           #t28.{core::List::add}(#t29);
   } =>#t28;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t31 in <core::int*>[42])
           #t30.{core::Set::add}(#t31);
     #t30.{core::Set::add}(null);
   } =>#t30;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t33 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
           #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
     #t32.{core::Map::[]=}("baz", null);
   } =>#t32;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t34 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t35 in <dynamic>[dynVar])
           #t34.{core::List::add}(#t35);
   } =>#t34;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t37 in <dynamic>[dynVar])
           #t36.{core::Set::add}(#t37);
     #t36.{core::Set::add}(null);
   } =>#t36;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, dynamic>* #t39 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
           #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
     #t38.{core::Map::[]=}("baz", null);
   } =>#t38;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t41 in <core::List<core::int*>*>[<core::int*>[42]])
           #t40.{core::List::add}(#t41);
   } =>#t40;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t43 in <core::List<core::int*>*>[<core::int*>[42]])
           #t42.{core::Set::add}(#t43);
     #t42.{core::Set::add}(null);
   } =>#t42;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
           #t44.{core::Map::[]=}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
     #t44.{core::Map::[]=}("baz", null);
   } =>#t44;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t47 in <core::List<core::int*>*>[<core::int*>[]])
         #t46.{core::List::add}(#t47);
   } =>#t46;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t49 in <core::List<core::int*>*>[<core::int*>[]])
         #t48.{core::Set::add}(#t49);
     #t48.{core::Set::add}(null);
@@ -639,173 +639,173 @@
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t51 in let final core::Set<core::List<core::int*>*>* #t52 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t53 = #t52.{core::Set::add}(<core::int*>[]) in #t52)
         #t50.{core::List::add}(#t51);
   } =>#t50;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t55 in let final core::Set<core::List<core::int*>*>* #t56 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t57 = #t56.{core::Set::add}(<core::int*>[]) in #t56)
         #t54.{core::Set::add}(#t55);
     #t54.{core::Set::add}(null);
   } =>#t54;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t59 in <core::List<core::int*>*>[<core::int*>[]])
           #t58.{core::List::add}(#t59);
   } =>#t58;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t61 in <core::List<core::int*>*>[<core::int*>[]])
           #t60.{core::Set::add}(#t61);
     #t60.{core::Set::add}(null);
   } =>#t60;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t62.{core::Map::[]=}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
     #t62.{core::Map::[]=}("baz", null);
   } =>#t62;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t64 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t65 in <core::int*>[])
         #t64.{core::List::add}(#t65);
   } =>#t64;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t67 in <core::int*>[])
         #t66.{core::Set::add}(#t67);
     #t66.{core::Set::add}(null);
   } =>#t66;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t69 in <core::String*, core::int*>{}.{core::Map::entries})
         #t68.{core::Map::[]=}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
     #t68.{core::Map::[]=}("baz", null);
   } =>#t68;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t71 in let final core::Set<core::int*>* #t72 = col::LinkedHashSet::•<core::int*>() in #t72)
         #t70.{core::List::add}(#t71);
   } =>#t70;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t74 in let final core::Set<core::int*>* #t75 = col::LinkedHashSet::•<core::int*>() in #t75)
         #t73.{core::Set::add}(#t74);
     #t73.{core::Set::add}(null);
   } =>#t73;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t76 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t77 in <core::int*>[])
           #t76.{core::List::add}(#t77);
   } =>#t76;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t79 in <core::int*>[])
           #t78.{core::Set::add}(#t79);
     #t78.{core::Set::add}(null);
   } =>#t78;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t81 in <core::String*, core::int*>{}.{core::Map::entries})
           #t80.{core::Map::[]=}(#t81.{core::MapEntry::key}, #t81.{core::MapEntry::value});
     #t80.{core::Map::[]=}("baz", null);
   } =>#t80;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t83 in <core::List<core::int*>*>[<core::int*>[]])
         #t82.{core::List::add}(#t83);
   } =>#t82;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::List<core::int*>* #t85 in <core::List<core::int*>*>[<core::int*>[]])
         #t84.{core::Set::add}(#t85);
     #t84.{core::Set::add}(null);
   } =>#t84;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
     #t86.{core::Map::[]=}("baz", null);
   } =>#t86;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t89 in <core::List<core::int*>*>[<core::int*>[]])
           #t88.{core::List::add}(#t89);
   } =>#t88;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t91 in <core::List<core::int*>*>[<core::int*>[]])
           #t90.{core::Set::add}(#t91);
     #t90.{core::Set::add}(null);
   } =>#t90;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t92.{core::Map::[]=}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
     #t92.{core::Map::[]=}("baz", null);
   } =>#t92;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t94.{core::List::add}(<core::int*>[]);
   } =>#t94;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t95.{core::Set::add}(<core::int*>[]);
     #t95.{core::Set::add}(null);
   } =>#t95;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t96.{core::List::add}(<core::int*>[]);
   } =>#t96;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t97.{core::Set::add}(<core::int*>[]);
     #t97.{core::Set::add}(null);
   } =>#t97;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t98 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t98.{core::List::add}(42);
     else
       #t98.{core::List::add}(3.14);
   } =>#t98;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -813,7 +813,7 @@
   } =>#t99;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -821,7 +821,7 @@
   } =>#t100;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t101 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t102 in listInt)
         #t101.{core::List::add}(#t102);
     else
@@ -830,7 +830,7 @@
   } =>#t101;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t105 in listInt)
         #t104.{core::Set::add}(#t105);
     else
@@ -840,7 +840,7 @@
   } =>#t104;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::num*>* #t108 in mapToInt.{core::Map::entries})
         #t107.{core::Map::[]=}(#t108.{core::MapEntry::key}, #t108.{core::MapEntry::value});
     else
@@ -850,38 +850,38 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t111 in listInt)
         #t110.{core::List::add}(#t111);
     else
-      for (final dynamic #t112 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t112 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t110.{core::List::add}(#t112);
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t114 in listInt)
         #t113.{core::Set::add}(#t114);
     else
-      for (final dynamic #t115 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t115 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t113.{core::Set::add}(#t115);
     #t113.{core::Set::add}(null);
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else
-      for (final dynamic #t117 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t117 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
         #t116.{core::Set::add}(#t117);
     #t116.{core::Set::add}(null);
   } =>#t116;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t118 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else
       for (final core::num* #t119 in listDouble)
@@ -889,7 +889,7 @@
   } =>#t118;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t121 in listInt)
         #t120.{core::Set::add}(#t121);
     else
@@ -898,7 +898,7 @@
   } =>#t120;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::num*>* #t123 in mapToInt.{core::Map::entries})
         #t122.{core::Map::[]=}(#t123.{core::MapEntry::key}, #t123.{core::MapEntry::value});
     else
@@ -907,33 +907,33 @@
   } =>#t122;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t124 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t124;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t125.{core::Set::add}(null);
   } =>#t125;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t126.{core::Map::[]=}("baz", null);
   } =>#t126;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t127 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final dynamic #t128 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t128 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t129 = #t128 as{TypeError} core::int*;
         #t127.{core::List::add}(#t129);
       }
   } =>#t127;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final dynamic #t131 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t131 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t132 = #t131 as{TypeError} core::int*;
         #t130.{core::Set::add}(#t132);
       }
@@ -941,8 +941,8 @@
   } =>#t130;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
         final core::String* #t135 = #t134.{core::MapEntry::key} as{TypeError} core::String*;
         final core::int* #t136 = #t134.{core::MapEntry::value} as{TypeError} core::int*;
         #t133.{core::Map::[]=}(#t135, #t136);
@@ -951,31 +951,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t137.{core::List::add}(42);
   } =>#t137;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t138.{core::Set::add}(42);
   } =>#t138;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t139.{core::Map::[]=}(42, 42);
   } =>#t139;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t140 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -983,7 +983,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -991,7 +991,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*])
@@ -999,7 +999,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*])
@@ -1008,7 +1008,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
@@ -1017,7 +1017,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1025,7 +1025,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1041,7 +1041,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1052,7 +1052,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1064,7 +1064,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1076,7 +1076,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1086,7 +1086,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1104,7 +1104,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1114,7 +1114,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1171,7 +1171,7 @@
   } =>#t174;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t176 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1182,7 +1182,7 @@
   } =>#t176;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1193,7 +1193,7 @@
   } =>#t179;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1204,7 +1204,7 @@
   } =>#t182;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1217,380 +1217,380 @@
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t188 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t188.{core::List::add}(42);
   } =>#t188;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t189.{core::Set::add}(42);
     #t189.{core::Set::add}(null);
   } =>#t189;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t190.{core::Map::[]=}("bar", 42);
     #t190.{core::Map::[]=}("baz", null);
   } =>#t190;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t191 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t191.{core::List::add}(dynVar);
   } =>#t191;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t192.{core::Set::add}(dynVar);
     #t192.{core::Set::add}(null);
   } =>#t192;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t193.{core::Map::[]=}("bar", dynVar);
     #t193.{core::Map::[]=}("baz", null);
   } =>#t193;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t194.{core::List::add}(<core::int*>[42]);
   } =>#t194;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t195.{core::Set::add}(<core::int*>[42]);
     #t195.{core::Set::add}(null);
   } =>#t195;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t196.{core::Map::[]=}("bar", <core::int*>[42]);
     #t196.{core::Map::[]=}("baz", null);
   } =>#t196;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t197 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t198 in <core::int*>[42])
         #t197.{core::List::add}(#t198);
   } =>#t197;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t200 in <core::int*>[42])
         #t199.{core::Set::add}(#t200);
     #t199.{core::Set::add}(null);
   } =>#t199;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::int*>* #t202 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
         #t201.{core::Map::[]=}(#t202.{core::MapEntry::key}, #t202.{core::MapEntry::value});
     #t201.{core::Map::[]=}("baz", null);
   } =>#t201;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t203 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final dynamic #t204 in <dynamic>[dynVar])
         #t203.{core::List::add}(#t204);
   } =>#t203;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final dynamic #t206 in <dynamic>[dynVar])
         #t205.{core::Set::add}(#t206);
     #t205.{core::Set::add}(null);
   } =>#t205;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, dynamic>* #t208 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
         #t207.{core::Map::[]=}(#t208.{core::MapEntry::key}, #t208.{core::MapEntry::value});
     #t207.{core::Map::[]=}("baz", null);
   } =>#t207;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t210 in <core::List<core::int*>*>[<core::int*>[42]])
         #t209.{core::List::add}(#t210);
   } =>#t209;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t212 in <core::List<core::int*>*>[<core::int*>[42]])
         #t211.{core::Set::add}(#t212);
     #t211.{core::Set::add}(null);
   } =>#t211;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
         #t213.{core::Map::[]=}(#t214.{core::MapEntry::key}, #t214.{core::MapEntry::value});
     #t213.{core::Map::[]=}("baz", null);
   } =>#t213;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t215 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t216 in <core::int*>[42])
           #t215.{core::List::add}(#t216);
   } =>#t215;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t218 in <core::int*>[42])
           #t217.{core::Set::add}(#t218);
     #t217.{core::Set::add}(null);
   } =>#t217;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::int*>* #t220 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
           #t219.{core::Map::[]=}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
     #t219.{core::Map::[]=}("baz", null);
   } =>#t219;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t221 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t222 in <dynamic>[dynVar])
           #t221.{core::List::add}(#t222);
   } =>#t221;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t224 in <dynamic>[dynVar])
           #t223.{core::Set::add}(#t224);
     #t223.{core::Set::add}(null);
   } =>#t223;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, dynamic>* #t226 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
           #t225.{core::Map::[]=}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
     #t225.{core::Map::[]=}("baz", null);
   } =>#t225;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t228 in <core::List<core::int*>*>[<core::int*>[42]])
           #t227.{core::List::add}(#t228);
   } =>#t227;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t230 in <core::List<core::int*>*>[<core::int*>[42]])
           #t229.{core::Set::add}(#t230);
     #t229.{core::Set::add}(null);
   } =>#t229;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
           #t231.{core::Map::[]=}(#t232.{core::MapEntry::key}, #t232.{core::MapEntry::value});
     #t231.{core::Map::[]=}("baz", null);
   } =>#t231;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t234 in <core::List<core::int*>*>[<core::int*>[]])
         #t233.{core::List::add}(#t234);
   } =>#t233;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t236 in <core::List<core::int*>*>[<core::int*>[]])
         #t235.{core::Set::add}(#t236);
     #t235.{core::Set::add}(null);
   } =>#t235;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t237.{core::Map::[]=}(#t238.{core::MapEntry::key}, #t238.{core::MapEntry::value});
     #t237.{core::Map::[]=}("baz", null);
   } =>#t237;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t240 in let final core::Set<core::List<core::int*>*>* #t241 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t242 = #t241.{core::Set::add}(<core::int*>[]) in #t241)
         #t239.{core::List::add}(#t240);
   } =>#t239;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t244 in let final core::Set<core::List<core::int*>*>* #t245 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t246 = #t245.{core::Set::add}(<core::int*>[]) in #t245)
         #t243.{core::Set::add}(#t244);
     #t243.{core::Set::add}(null);
   } =>#t243;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t248 in <core::List<core::int*>*>[<core::int*>[]])
           #t247.{core::List::add}(#t248);
   } =>#t247;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t250 in <core::List<core::int*>*>[<core::int*>[]])
           #t249.{core::Set::add}(#t250);
     #t249.{core::Set::add}(null);
   } =>#t249;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t251.{core::Map::[]=}(#t252.{core::MapEntry::key}, #t252.{core::MapEntry::value});
     #t251.{core::Map::[]=}("baz", null);
   } =>#t251;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t254 in <core::int*>[])
         #t253.{core::List::add}(#t254);
   } =>#t253;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t256 in <core::int*>[])
         #t255.{core::Set::add}(#t256);
     #t255.{core::Set::add}(null);
   } =>#t255;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::int*>* #t258 in <core::String*, core::int*>{}.{core::Map::entries})
         #t257.{core::Map::[]=}(#t258.{core::MapEntry::key}, #t258.{core::MapEntry::value});
     #t257.{core::Map::[]=}("baz", null);
   } =>#t257;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t260 in let final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>() in #t261)
         #t259.{core::List::add}(#t260);
   } =>#t259;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t263 in let final core::Set<core::int*>* #t264 = col::LinkedHashSet::•<core::int*>() in #t264)
         #t262.{core::Set::add}(#t263);
     #t262.{core::Set::add}(null);
   } =>#t262;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t265 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t266 in <core::int*>[])
           #t265.{core::List::add}(#t266);
   } =>#t265;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::int* #t268 in <core::int*>[])
           #t267.{core::Set::add}(#t268);
     #t267.{core::Set::add}(null);
   } =>#t267;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t270 in <core::List<core::int*>*>[<core::int*>[]])
         #t269.{core::List::add}(#t270);
   } =>#t269;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::List<core::int*>* #t272 in <core::List<core::int*>*>[<core::int*>[]])
         #t271.{core::Set::add}(#t272);
     #t271.{core::Set::add}(null);
   } =>#t271;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
         #t273.{core::Map::[]=}(#t274.{core::MapEntry::key}, #t274.{core::MapEntry::value});
     #t273.{core::Map::[]=}("baz", null);
   } =>#t273;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t276 in <core::List<core::int*>*>[<core::int*>[]])
           #t275.{core::List::add}(#t276);
   } =>#t275;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::List<core::int*>* #t278 in <core::List<core::int*>*>[<core::int*>[]])
           #t277.{core::Set::add}(#t278);
     #t277.{core::Set::add}(null);
   } =>#t277;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
           #t279.{core::Map::[]=}(#t280.{core::MapEntry::key}, #t280.{core::MapEntry::value});
     #t279.{core::Map::[]=}("baz", null);
   } =>#t279;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t281.{core::List::add}(<core::int*>[]);
   } =>#t281;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t282.{core::Set::add}(<core::int*>[]);
     #t282.{core::Set::add}(null);
   } =>#t282;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t283.{core::Map::[]=}("bar", <core::int*>[]);
     #t283.{core::Map::[]=}("baz", null);
   } =>#t283;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t284.{core::List::add}(<core::int*>[]);
   } =>#t284;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t285.{core::Set::add}(<core::int*>[]);
     #t285.{core::Set::add}(null);
   } =>#t285;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t286.{core::Map::[]=}("bar", <core::int*>[]);
     #t286.{core::Map::[]=}("baz", null);
   } =>#t286;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t287 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t287.{core::List::add}(42);
       else
         #t287.{core::List::add}(3.14);
   } =>#t287;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1598,8 +1598,8 @@
   } =>#t288;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -1607,8 +1607,8 @@
   } =>#t289;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t290 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t291 in listInt)
           #t290.{core::List::add}(#t291);
       else
@@ -1617,8 +1617,8 @@
   } =>#t290;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t294 in listInt)
           #t293.{core::Set::add}(#t294);
       else
@@ -1628,8 +1628,8 @@
   } =>#t293;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::num*>* #t297 in mapStringInt.{core::Map::entries})
           #t296.{core::Map::[]=}(#t297.{core::MapEntry::key}, #t297.{core::MapEntry::value});
       else
@@ -1639,40 +1639,40 @@
   } =>#t296;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t299 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t300 in listInt)
           #t299.{core::List::add}(#t300);
       else
-        for (final dynamic #t301 in dynVar as{TypeError} core::Iterable<dynamic>*)
+        for (final dynamic #t301 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
           #t299.{core::List::add}(#t301);
   } =>#t299;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final dynamic #t303 in listInt)
           #t302.{core::Set::add}(#t303);
       else
-        for (final dynamic #t304 in dynVar as{TypeError} core::Iterable<dynamic>*)
+        for (final dynamic #t304 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
           #t302.{core::Set::add}(#t304);
     #t302.{core::Set::add}(null);
   } =>#t302;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<dynamic, dynamic>* #t306 in mapStringInt.{core::Map::entries})
           #t305.{core::Map::[]=}(#t306.{core::MapEntry::key}, #t306.{core::MapEntry::value});
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
     #t305.{core::Map::[]=}("baz", null);
   } =>#t305;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t308 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else
         for (final core::num* #t309 in listDouble)
@@ -1680,8 +1680,8 @@
   } =>#t308;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t311 in listInt)
           #t310.{core::Set::add}(#t311);
       else
@@ -1690,8 +1690,8 @@
   } =>#t310;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::MapEntry<core::String*, core::num*>* #t313 in mapStringInt.{core::Map::entries})
           #t312.{core::Map::[]=}(#t313.{core::MapEntry::key}, #t313.{core::MapEntry::value});
       else
@@ -1700,33 +1700,33 @@
   } =>#t312;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t314 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t314;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t315.{core::Set::add}(null);
   } =>#t315;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t316.{core::Map::[]=}("baz", null);
   } =>#t316;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t317 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final dynamic #t318 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t318 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t319 = #t318 as{TypeError} core::int*;
         #t317.{core::List::add}(#t319);
       }
   } =>#t317;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final dynamic #t321 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t321 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t322 = #t321 as{TypeError} core::int*;
         #t320.{core::Set::add}(#t322);
       }
@@ -1734,8 +1734,8 @@
   } =>#t320;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
         final core::String* #t325 = #t324.{core::MapEntry::key} as{TypeError} core::String*;
         final core::int* #t326 = #t324.{core::MapEntry::value} as{TypeError} core::int*;
         #t323.{core::Map::[]=}(#t325, #t326);
@@ -1744,17 +1744,17 @@
   } =>#t323;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
-    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t327.{core::List::add}(42);
   } =>#t327;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t329.{core::Set::add}(42);
   } =>#t329;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
-    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -1776,19 +1776,19 @@
   } =>#t335;
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t336.{core::List::add}(i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t337.{core::Set::add}(i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
     #t337.{core::Set::add}(null);
   } =>#t337;
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
-    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
-      #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
     #t338.{core::Map::[]=}("baz", null);
   } =>#t338;
   core::List<core::int*>* list130 = block {
@@ -1810,14 +1810,14 @@
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
   block {
     final core::List<core::int*>* #t342 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
   } =>#t342;
   block {
     final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -1825,7 +1825,7 @@
   } =>#t344;
   block {
     final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1837,7 +1837,7 @@
   } =>#t346;
   block {
     final core::List<core::int*>* #t350 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1845,7 +1845,7 @@
   } =>#t350;
   block {
     final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1854,7 +1854,7 @@
   } =>#t353;
   block {
     final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1867,7 +1867,7 @@
   } =>#t356;
   block {
     final core::List<core::int*>* #t361 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -1875,7 +1875,7 @@
   } =>#t361;
   block {
     final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -1891,8 +1891,8 @@
                                                     ^": null};
   block {
     final core::List<core::String*>* #t363 = <core::String*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1903,8 +1903,8 @@
   } =>#t363;
   block {
     final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1916,8 +1916,8 @@
   } =>#t366;
   block {
     final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -1929,8 +1929,8 @@
   } =>#t369;
   block {
     final core::List<core::int*>* #t372 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -1940,8 +1940,8 @@
   } =>#t372;
   block {
     final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -1959,8 +1959,8 @@
                                                                      ^": null};
   block {
     final core::List<core::int*>* #t374 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t374.{core::List::add}(42);
       else
         #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1970,8 +1970,8 @@
   } =>#t374;
   block {
     final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t375.{core::Set::add}(42);
       else
         #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect
index 2901fae..dfec04b 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect
@@ -444,58 +444,58 @@
 static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(42);
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(42);
     #t2.{core::Set::add}(null);
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}("bar", 42);
     #t3.{core::Map::[]=}("baz", null);
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t4.{core::List::add}(dynVar);
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t5.{core::Set::add}(dynVar);
     #t5.{core::Set::add}(null);
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t6.{core::Map::[]=}("bar", dynVar);
     #t6.{core::Map::[]=}("baz", null);
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t7.{core::List::add}(<core::int*>[42]);
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t8.{core::Set::add}(<core::int*>[42]);
     #t8.{core::Set::add}(null);
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t9.{core::Map::[]=}("bar", <core::int*>[42]);
     #t9.{core::Map::[]=}("baz", null);
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
@@ -505,7 +505,7 @@
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
@@ -516,7 +516,7 @@
   } =>#t12;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
@@ -527,7 +527,7 @@
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
@@ -537,7 +537,7 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
@@ -548,7 +548,7 @@
   } =>#t18;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
@@ -559,7 +559,7 @@
   } =>#t20;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
@@ -569,7 +569,7 @@
   } =>#t22;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
@@ -580,7 +580,7 @@
   } =>#t24;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
@@ -591,8 +591,8 @@
   } =>#t26;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t28 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
@@ -602,8 +602,8 @@
   } =>#t28;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
@@ -614,8 +614,8 @@
   } =>#t30;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
@@ -626,8 +626,8 @@
   } =>#t32;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t34 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
@@ -637,8 +637,8 @@
   } =>#t34;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
@@ -649,8 +649,8 @@
   } =>#t36;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
@@ -661,8 +661,8 @@
   } =>#t38;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
@@ -672,8 +672,8 @@
   } =>#t40;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
@@ -684,8 +684,8 @@
   } =>#t42;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
@@ -696,7 +696,7 @@
   } =>#t44;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
@@ -706,7 +706,7 @@
   } =>#t46;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
@@ -720,7 +720,7 @@
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
@@ -730,7 +730,7 @@
   } =>#t50;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
@@ -741,8 +741,8 @@
   } =>#t54;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
@@ -752,8 +752,8 @@
   } =>#t58;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
@@ -764,8 +764,8 @@
   } =>#t60;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
@@ -776,7 +776,7 @@
   } =>#t62;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t64 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
@@ -786,7 +786,7 @@
   } =>#t64;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
@@ -797,7 +797,7 @@
   } =>#t66;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
@@ -808,7 +808,7 @@
   } =>#t68;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
@@ -818,7 +818,7 @@
   } =>#t70;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
@@ -829,8 +829,8 @@
   } =>#t73;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t76 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
@@ -840,8 +840,8 @@
   } =>#t76;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
@@ -852,8 +852,8 @@
   } =>#t78;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
@@ -864,7 +864,7 @@
   } =>#t80;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
@@ -874,7 +874,7 @@
   } =>#t82;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
@@ -885,7 +885,7 @@
   } =>#t84;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
@@ -896,8 +896,8 @@
   } =>#t86;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
@@ -907,8 +907,8 @@
   } =>#t88;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
@@ -919,8 +919,8 @@
   } =>#t90;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
@@ -931,38 +931,38 @@
   } =>#t92;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t94.{core::List::add}(<core::int*>[]);
   } =>#t94;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t95.{core::Set::add}(<core::int*>[]);
     #t95.{core::Set::add}(null);
   } =>#t95;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t96.{core::List::add}(<core::int*>[]);
   } =>#t96;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t97.{core::Set::add}(<core::int*>[]);
     #t97.{core::Set::add}(null);
   } =>#t97;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t98 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t98.{core::List::add}(42);
     else
       #t98.{core::List::add}(3.14);
   } =>#t98;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -970,7 +970,7 @@
   } =>#t99;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -978,7 +978,7 @@
   } =>#t100;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t101 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
@@ -995,7 +995,7 @@
   } =>#t101;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
@@ -1013,7 +1013,7 @@
   } =>#t104;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
@@ -1031,7 +1031,7 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
@@ -1039,7 +1039,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         #t110.{core::List::add}(#t112);
@@ -1048,7 +1048,7 @@
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
@@ -1056,7 +1056,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         #t113.{core::Set::add}(#t115);
@@ -1066,13 +1066,13 @@
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
         #t116.{core::Set::add}(#t117);
@@ -1082,7 +1082,7 @@
   } =>#t116;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t118 = <core::num*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else {
       core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -1094,7 +1094,7 @@
   } =>#t118;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
@@ -1107,7 +1107,7 @@
   } =>#t120;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
@@ -1120,25 +1120,25 @@
   } =>#t122;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t124 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t124;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t125.{core::Set::add}(null);
   } =>#t125;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
-      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t126.{core::Map::[]=}("baz", null);
   } =>#t126;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t127 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1150,8 +1150,8 @@
   } =>#t127;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1164,8 +1164,8 @@
   } =>#t130;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1179,31 +1179,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t137.{core::List::add}(42);
   } =>#t137;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t138.{core::Set::add}(42);
   } =>#t138;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
       #t139.{core::Map::[]=}(42, 42);
   } =>#t139;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t140 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -1211,7 +1211,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -1219,7 +1219,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1231,7 +1231,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1244,7 +1244,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
@@ -1257,7 +1257,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1265,7 +1265,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1281,7 +1281,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1292,7 +1292,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1304,7 +1304,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1316,7 +1316,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1326,7 +1326,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1344,7 +1344,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1354,7 +1354,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1411,7 +1411,7 @@
   } =>#t174;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t176 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1422,7 +1422,7 @@
   } =>#t176;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1433,7 +1433,7 @@
   } =>#t179;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1444,7 +1444,7 @@
   } =>#t182;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1457,58 +1457,58 @@
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t188 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t188.{core::List::add}(42);
   } =>#t188;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t189.{core::Set::add}(42);
     #t189.{core::Set::add}(null);
   } =>#t189;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t190.{core::Map::[]=}("bar", 42);
     #t190.{core::Map::[]=}("baz", null);
   } =>#t190;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t191 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t191.{core::List::add}(dynVar);
   } =>#t191;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t192.{core::Set::add}(dynVar);
     #t192.{core::Set::add}(null);
   } =>#t192;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t193.{core::Map::[]=}("bar", dynVar);
     #t193.{core::Map::[]=}("baz", null);
   } =>#t193;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t194.{core::List::add}(<core::int*>[42]);
   } =>#t194;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t195.{core::Set::add}(<core::int*>[42]);
     #t195.{core::Set::add}(null);
   } =>#t195;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t196.{core::Map::[]=}("bar", <core::int*>[42]);
     #t196.{core::Map::[]=}("baz", null);
   } =>#t196;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t197 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
@@ -1518,7 +1518,7 @@
   } =>#t197;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
@@ -1529,7 +1529,7 @@
   } =>#t199;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
@@ -1540,7 +1540,7 @@
   } =>#t201;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t203 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
@@ -1550,7 +1550,7 @@
   } =>#t203;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
@@ -1561,7 +1561,7 @@
   } =>#t205;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
@@ -1572,7 +1572,7 @@
   } =>#t207;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
@@ -1582,7 +1582,7 @@
   } =>#t209;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
@@ -1593,7 +1593,7 @@
   } =>#t211;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
@@ -1604,8 +1604,8 @@
   } =>#t213;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t215 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
@@ -1615,8 +1615,8 @@
   } =>#t215;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
@@ -1627,8 +1627,8 @@
   } =>#t217;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
@@ -1639,8 +1639,8 @@
   } =>#t219;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t221 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
@@ -1650,8 +1650,8 @@
   } =>#t221;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
@@ -1662,8 +1662,8 @@
   } =>#t223;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
@@ -1674,8 +1674,8 @@
   } =>#t225;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
@@ -1685,8 +1685,8 @@
   } =>#t227;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
@@ -1697,8 +1697,8 @@
   } =>#t229;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
@@ -1709,7 +1709,7 @@
   } =>#t231;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
@@ -1719,7 +1719,7 @@
   } =>#t233;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
@@ -1730,7 +1730,7 @@
   } =>#t235;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
@@ -1741,7 +1741,7 @@
   } =>#t237;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
@@ -1751,7 +1751,7 @@
   } =>#t239;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
@@ -1762,8 +1762,8 @@
   } =>#t243;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
@@ -1773,8 +1773,8 @@
   } =>#t247;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
@@ -1785,8 +1785,8 @@
   } =>#t249;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
@@ -1797,7 +1797,7 @@
   } =>#t251;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
@@ -1807,7 +1807,7 @@
   } =>#t253;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
@@ -1818,7 +1818,7 @@
   } =>#t255;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
@@ -1829,7 +1829,7 @@
   } =>#t257;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
@@ -1839,7 +1839,7 @@
   } =>#t259;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
@@ -1850,8 +1850,8 @@
   } =>#t262;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t265 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
@@ -1861,8 +1861,8 @@
   } =>#t265;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
@@ -1873,7 +1873,7 @@
   } =>#t267;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
@@ -1883,7 +1883,7 @@
   } =>#t269;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
@@ -1894,7 +1894,7 @@
   } =>#t271;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
@@ -1905,8 +1905,8 @@
   } =>#t273;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
@@ -1916,8 +1916,8 @@
   } =>#t275;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
@@ -1928,8 +1928,8 @@
   } =>#t277;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
@@ -1940,53 +1940,53 @@
   } =>#t279;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t281.{core::List::add}(<core::int*>[]);
   } =>#t281;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t282.{core::Set::add}(<core::int*>[]);
     #t282.{core::Set::add}(null);
   } =>#t282;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t283.{core::Map::[]=}("bar", <core::int*>[]);
     #t283.{core::Map::[]=}("baz", null);
   } =>#t283;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t284.{core::List::add}(<core::int*>[]);
   } =>#t284;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t285.{core::Set::add}(<core::int*>[]);
     #t285.{core::Set::add}(null);
   } =>#t285;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t286.{core::Map::[]=}("bar", <core::int*>[]);
     #t286.{core::Map::[]=}("baz", null);
   } =>#t286;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t287 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t287.{core::List::add}(42);
       else
         #t287.{core::List::add}(3.14);
   } =>#t287;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1994,8 +1994,8 @@
   } =>#t288;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -2003,8 +2003,8 @@
   } =>#t289;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t290 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
@@ -2021,8 +2021,8 @@
   } =>#t290;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
@@ -2040,8 +2040,8 @@
   } =>#t293;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
@@ -2059,8 +2059,8 @@
   } =>#t296;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t299 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
@@ -2068,7 +2068,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
           #t299.{core::List::add}(#t301);
@@ -2077,8 +2077,8 @@
   } =>#t299;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
@@ -2086,7 +2086,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
           #t302.{core::Set::add}(#t304);
@@ -2096,8 +2096,8 @@
   } =>#t302;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
@@ -2105,7 +2105,7 @@
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
@@ -2115,8 +2115,8 @@
   } =>#t305;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t308 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else {
         core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -2128,8 +2128,8 @@
   } =>#t308;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
@@ -2142,8 +2142,8 @@
   } =>#t310;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
@@ -2156,25 +2156,25 @@
   } =>#t312;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t314 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*);
   } =>#t314;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*);
     #t315.{core::Set::add}(null);
   } =>#t315;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*);
     #t316.{core::Map::[]=}("baz", null);
   } =>#t316;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t317 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2186,8 +2186,8 @@
   } =>#t317;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2200,8 +2200,8 @@
   } =>#t320;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2215,17 +2215,17 @@
   } =>#t323;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
-    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t327.{core::List::add}(42);
   } =>#t327;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t329.{core::Set::add}(42);
   } =>#t329;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
-    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -2263,20 +2263,20 @@
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t336.{core::List::add}(i as{TypeError} core::int*);
+        #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t337.{core::Set::add}(i as{TypeError} core::int*);
+        #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t337.{core::Set::add}(null);
@@ -2284,10 +2284,10 @@
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+        #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t338.{core::Map::[]=}("baz", null);
@@ -2326,14 +2326,14 @@
       {
         block {
           final core::List<core::int*>* #t342 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
         } =>#t342;
         block {
           final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -2341,7 +2341,7 @@
         } =>#t344;
         block {
           final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2353,7 +2353,7 @@
         } =>#t346;
         block {
           final core::List<core::int*>* #t350 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2365,7 +2365,7 @@
         } =>#t350;
         block {
           final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2378,7 +2378,7 @@
         } =>#t353;
         block {
           final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2395,7 +2395,7 @@
         } =>#t356;
         block {
           final core::List<core::int*>* #t361 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -2403,7 +2403,7 @@
         } =>#t361;
         block {
           final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -2419,8 +2419,8 @@
                                                     ^": null};
         block {
           final core::List<core::String*>* #t363 = <core::String*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2431,8 +2431,8 @@
         } =>#t363;
         block {
           final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2444,8 +2444,8 @@
         } =>#t366;
         block {
           final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -2457,8 +2457,8 @@
         } =>#t369;
         block {
           final core::List<core::int*>* #t372 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -2468,8 +2468,8 @@
         } =>#t372;
         block {
           final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -2487,8 +2487,8 @@
                                                                      ^": null};
         block {
           final core::List<core::int*>* #t374 = <core::int*>[];
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t374.{core::List::add}(42);
             else
               #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -2498,8 +2498,8 @@
         } =>#t374;
         block {
           final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
-            if(self::oracle<dynamic>() as{TypeError} core::bool*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t375.{core::Set::add}(42);
             else
               #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect
index ea56f3e..fa9a400 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::Foo*
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect
index 18203ab..5d3f769 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect
@@ -10,8 +10,8 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect
index f6157cd..eb4e616 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
-          self::Class* c = #t2 as{TypeError} self::Class*;
+          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect
index 18203ab..5d3f769 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect
@@ -10,8 +10,8 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect
index f6157cd..eb4e616 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect
@@ -12,11 +12,11 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
-          self::Class* c = #t2 as{TypeError} self::Class*;
+          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect
index 18814f3..4bfac34 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect
index 18814f3..4bfac34 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect
index 18814f3..4bfac34 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect
index 18814f3..4bfac34 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect
index cfeeadc..5ff3546 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect
@@ -160,18 +160,18 @@
   } =>#t18;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
-    for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t21 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t20.{core::List::add}(#t21);
   } =>#t20;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t23 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t22.{core::Set::add}(#t23);
     #t22.{core::Set::add}(42);
   } =>#t22;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
       #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
     #t24.{core::Map::[]=}("baz", 42);
   } =>#t24;
@@ -377,14 +377,14 @@
   } =>#t91;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
-    for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t96 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t97 = #t96 as{TypeError} core::int*;
       #t95.{core::List::add}(#t97);
     }
   } =>#t95;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
       final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
       final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
       #t98.{core::Map::[]=}(#t100, #t101);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect
index 1cfb2b0..db8baa1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect
@@ -208,7 +208,7 @@
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         #t20.{core::List::add}(#t21);
@@ -218,7 +218,7 @@
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         #t22.{core::Set::add}(#t23);
@@ -229,7 +229,7 @@
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
         #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
@@ -554,7 +554,7 @@
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -567,7 +567,7 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect
index cfeeadc..5ff3546 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect
@@ -160,18 +160,18 @@
   } =>#t18;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
-    for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t21 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t20.{core::List::add}(#t21);
   } =>#t20;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t23 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t22.{core::Set::add}(#t23);
     #t22.{core::Set::add}(42);
   } =>#t22;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
       #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
     #t24.{core::Map::[]=}("baz", 42);
   } =>#t24;
@@ -377,14 +377,14 @@
   } =>#t91;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
-    for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t96 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t97 = #t96 as{TypeError} core::int*;
       #t95.{core::List::add}(#t97);
     }
   } =>#t95;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
       final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
       final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
       #t98.{core::Map::[]=}(#t100, #t101);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect
index 1cfb2b0..db8baa1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect
@@ -208,7 +208,7 @@
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         #t20.{core::List::add}(#t21);
@@ -218,7 +218,7 @@
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         #t22.{core::Set::add}(#t23);
@@ -229,7 +229,7 @@
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
         #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
@@ -554,7 +554,7 @@
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -567,7 +567,7 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect
index 2da773b..4f2eabf 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect
index 8e4c18f..ae89f63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect
@@ -31,7 +31,7 @@
     return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart:24:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
 }
 static method main() → dynamic {
   new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect
index 8e4c18f..ae89f63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect
@@ -31,7 +31,7 @@
     return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart:24:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
 }
 static method main() → dynamic {
   new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect
index 3bde972..c503392 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect
index 9f36d60..739251d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect
index 3bde972..c503392 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect
index 9f36d60..739251d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml
index a98a4f5..16093f7 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml
@@ -35,10 +35,10 @@
     expectedContent:
       org-dartlang-test:///main.dart:
         - Procedure main
-        - Field lalala_SimulateTransformer
+        - Field unique_SimulateTransformer
       package:foo/foo.dart:
         - Field foo
-        - Field lalala_SimulateTransformer
+        - Field unique_SimulateTransformer
     neededDillLibraries:
       - package:foo/foo.dart
   - entry: main.dart
@@ -61,7 +61,7 @@
     expectedContent:
       org-dartlang-test:///main.dart:
         - Procedure main
-        - Field lalala_SimulateTransformer
+        - Field unique_SimulateTransformer
       package:foo/foo.dart:
         - Field foo2
-        - Field lalala_SimulateTransformer
+        - Field unique_SimulateTransformer
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.1.expect
index 71e4ef1..6ece7a5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.1.expect
@@ -2,13 +2,13 @@
 library from "package:foo/foo.dart" as foo {
 
   static field dart.core::bool* foo = true;
-  final field dynamic lalala_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer /* from null */;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "package:foo/foo.dart";
 
-  final field dynamic lalala_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer /* from null */;
   static method main() → dynamic {
     dart.core::print(foo::foo);
   }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.2.expect
index e13a156..90090ad 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_3.yaml.world.2.expect
@@ -2,13 +2,13 @@
 library from "package:foo/foo.dart" as foo {
 
   static field dart.core::bool* foo2 = true;
-  final field dynamic lalala_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer /* from null */;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "package:foo/foo.dart";
 
-  final field dynamic lalala_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer /* from null */;
   static method main() → dynamic {
     dart.core::print(foo::foo2);
   }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml
new file mode 100644
index 0000000..ae08c58
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml
@@ -0,0 +1,48 @@
+# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Force creation of "_exports#" caused by unserializable exports. It becomes
+# constant. Initializing from it should still be possible.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    errors: true
+    sources:
+      main.dart: |
+        export "lib1.dart" show x;
+        export "lib2.dart" show x;
+        main() {
+          print("exports");
+        }
+      lib1.dart: |
+        x() {
+          print("lib1.x!");
+        }
+      lib2.dart: |
+        x() {
+          print("lib2.x!");
+        }
+    expectedLibraryCount: 3
+  - entry: main.dart
+    errors: true
+    expectInitializeFromDill: true
+    invalidate:
+      - main.dart
+    sources:
+      main.dart: |
+        export "lib1.dart" show x;
+        export "lib2.dart" show x;
+        main() {
+          print("exports!");
+        }
+      lib1.dart: |
+        x() {
+          print("lib1.x!");
+        }
+      lib2.dart: |
+        x() {
+          print("lib2.x!");
+        }
+    expectedLibraryCount: 3
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml.world.1.expect
new file mode 100644
index 0000000..dd112fb
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml.world.1.expect
@@ -0,0 +1,33 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  static method x() → dynamic {
+    dart.core::print("lib1.x!");
+  }
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  static method x() → dynamic {
+    dart.core::print("lib2.x!");
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+//
+// Problems in library:
+//
+// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// export "lib2.dart" show x;
+// ^
+//
+
+  export "org-dartlang-test:///lib1.dart";
+  export "org-dartlang-test:///lib2.dart";
+
+  static const field dynamic _exports# = #C1 /* from null */;
+  static method main() → dynamic {
+    dart.core::print("exports");
+  }
+}
+constants  {
+  #C1 = "{\"x\":\"'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml.world.2.expect
new file mode 100644
index 0000000..d8da84c
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/constant_exports_hash.yaml.world.2.expect
@@ -0,0 +1,33 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  static method x() → dynamic {
+    dart.core::print("lib1.x!");
+  }
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  static method x() → dynamic {
+    dart.core::print("lib2.x!");
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+//
+// Problems in library:
+//
+// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// export "lib2.dart" show x;
+// ^
+//
+
+  export "org-dartlang-test:///lib1.dart";
+  export "org-dartlang-test:///lib2.dart";
+
+  static const field dynamic _exports# = #C1 /* from null */;
+  static method main() → dynamic {
+    dart.core::print("exports!");
+  }
+}
+constants  {
+  #C1 = "{\"x\":\"'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/expression_calculation_with_error.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/expression_calculation_with_error.yaml
index 9baf55e..51073a5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/expression_calculation_with_error.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/expression_calculation_with_error.yaml
@@ -20,6 +20,7 @@
     expressionCompilation:
       uri: main.dart
       expression: foo()
+      errors: true
   - entry: main.dart
     expectInitializeFromDill: false
     worldType: updated
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml
new file mode 100644
index 0000000..13a6a2e
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml
@@ -0,0 +1,20 @@
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Test expression compilation using extension on String.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        extension NumberParsing on String {
+          int parseInt() {
+            return int.parse(this);
+          }
+        }
+    expectedLibraryCount: 1
+    expressionCompilation:
+      uri: main.dart
+      expression: print("1234".parseInt())
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect
new file mode 100644
index 0000000..73e7fda
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect
@@ -0,0 +1,13 @@
+main = <No Member>;
+library from "org-dartlang-test:///main.dart" as main {
+
+  extension NumberParsing on dart.core::String* {
+    method parseInt = main::NumberParsing|parseInt;
+    tearoff parseInt = main::NumberParsing|get#parseInt;
+  }
+  static method NumberParsing|parseInt(final dart.core::String* #this) → dart.core::int* {
+    return dart.core::int::parse(#this);
+  }
+  static method NumberParsing|get#parseInt(final dart.core::String* #this) → () →* dart.core::int*
+    return () → dart.core::int* => main::NumberParsing|parseInt(#this);
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml
new file mode 100644
index 0000000..fb17878
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml
@@ -0,0 +1,96 @@
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Test extension on String from import from dill.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        import "lib1.dart";
+        import "lib2.dart";
+        import "lib3.dart";
+        main() {
+          "42".parseInt();
+          "42".fooMe1();
+          "42".fooMe2();
+        }
+      lib1.dart: |
+        extension NumberParsing on String {
+          int parseInt() {
+            return int.parse(this);
+          }
+        }
+      lib2.dart: |
+        extension DuplicateName on String {
+          String fooMe1() {
+            return "Foo1";
+          }
+        }
+      lib3.dart: |
+        extension DuplicateName on String {
+          String fooMe2() {
+            return "Foo2";
+          }
+        }
+    expectedLibraryCount: 4
+    expressionCompilation:
+      - uri: lib1.dart
+        expression: print("1234".parseInt())
+      - uri: lib2.dart
+        expression: print("1234".parseInt())
+        errors: true
+      - uri: lib3.dart
+        expression: print("1234".parseInt())
+        errors: true
+      - uri: main.dart
+        expression: print("1234".parseInt())
+      - uri: main.dart
+        expression: print("1234".fooMe1())
+  - entry: main.dart
+    invalidate:
+      - main.dart
+    sources:
+      main.dart: |
+        import "lib1.dart";
+        import "lib2.dart";
+        import "lib3.dart";
+        main() {
+          "42".parseInt();
+          "42".fooMe1();
+          "42".fooMe2();
+        }
+      lib1.dart: |
+        extension NumberParsing on String {
+          int parseInt() {
+            return int.parse(this);
+          }
+        }
+      lib2.dart: |
+        extension DuplicateName on String {
+          String fooMe1() {
+            return "Foo1";
+          }
+        }
+      lib3.dart: |
+        extension DuplicateName on String {
+          String fooMe2() {
+            return "Foo2";
+          }
+        }
+    expectedLibraryCount: 4
+    expressionCompilation:
+      - uri: lib1.dart
+        expression: print("1234".parseInt())
+      - uri: lib2.dart
+        expression: print("1234".parseInt())
+        errors: true
+      - uri: lib3.dart
+        expression: print("1234".parseInt())
+        errors: true
+      - uri: main.dart
+        expression: print("1234".parseInt())
+      - uri: main.dart
+        expression: print("1234".fooMe1())
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect
new file mode 100644
index 0000000..874b7c7
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect
@@ -0,0 +1,49 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  extension NumberParsing on dart.core::String* {
+    method parseInt = lib1::NumberParsing|parseInt;
+    tearoff parseInt = lib1::NumberParsing|get#parseInt;
+  }
+  static method NumberParsing|parseInt(final dart.core::String* #this) → dart.core::int* {
+    return dart.core::int::parse(#this);
+  }
+  static method NumberParsing|get#parseInt(final dart.core::String* #this) → () →* dart.core::int*
+    return () → dart.core::int* => lib1::NumberParsing|parseInt(#this);
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  extension DuplicateName on dart.core::String* {
+    method fooMe1 = lib2::DuplicateName|fooMe1;
+    tearoff fooMe1 = lib2::DuplicateName|get#fooMe1;
+  }
+  static method DuplicateName|fooMe1(final dart.core::String* #this) → dart.core::String* {
+    return "Foo1";
+  }
+  static method DuplicateName|get#fooMe1(final dart.core::String* #this) → () →* dart.core::String*
+    return () → dart.core::String* => lib2::DuplicateName|fooMe1(#this);
+}
+library from "org-dartlang-test:///lib3.dart" as lib3 {
+
+  extension DuplicateName on dart.core::String* {
+    method fooMe2 = lib3::DuplicateName|fooMe2;
+    tearoff fooMe2 = lib3::DuplicateName|get#fooMe2;
+  }
+  static method DuplicateName|fooMe2(final dart.core::String* #this) → dart.core::String* {
+    return "Foo2";
+  }
+  static method DuplicateName|get#fooMe2(final dart.core::String* #this) → () →* dart.core::String*
+    return () → dart.core::String* => lib3::DuplicateName|fooMe2(#this);
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+  import "org-dartlang-test:///lib3.dart";
+
+  static method main() → dynamic {
+    lib1::NumberParsing|parseInt("42");
+    lib2::DuplicateName|fooMe1("42");
+    lib3::DuplicateName|fooMe2("42");
+  }
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect
new file mode 100644
index 0000000..874b7c7
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect
@@ -0,0 +1,49 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  extension NumberParsing on dart.core::String* {
+    method parseInt = lib1::NumberParsing|parseInt;
+    tearoff parseInt = lib1::NumberParsing|get#parseInt;
+  }
+  static method NumberParsing|parseInt(final dart.core::String* #this) → dart.core::int* {
+    return dart.core::int::parse(#this);
+  }
+  static method NumberParsing|get#parseInt(final dart.core::String* #this) → () →* dart.core::int*
+    return () → dart.core::int* => lib1::NumberParsing|parseInt(#this);
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  extension DuplicateName on dart.core::String* {
+    method fooMe1 = lib2::DuplicateName|fooMe1;
+    tearoff fooMe1 = lib2::DuplicateName|get#fooMe1;
+  }
+  static method DuplicateName|fooMe1(final dart.core::String* #this) → dart.core::String* {
+    return "Foo1";
+  }
+  static method DuplicateName|get#fooMe1(final dart.core::String* #this) → () →* dart.core::String*
+    return () → dart.core::String* => lib2::DuplicateName|fooMe1(#this);
+}
+library from "org-dartlang-test:///lib3.dart" as lib3 {
+
+  extension DuplicateName on dart.core::String* {
+    method fooMe2 = lib3::DuplicateName|fooMe2;
+    tearoff fooMe2 = lib3::DuplicateName|get#fooMe2;
+  }
+  static method DuplicateName|fooMe2(final dart.core::String* #this) → dart.core::String* {
+    return "Foo2";
+  }
+  static method DuplicateName|get#fooMe2(final dart.core::String* #this) → () →* dart.core::String*
+    return () → dart.core::String* => lib3::DuplicateName|fooMe2(#this);
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+  import "org-dartlang-test:///lib3.dart";
+
+  static method main() → dynamic {
+    lib1::NumberParsing|parseInt("42");
+    lib2::DuplicateName|fooMe1("42");
+    lib3::DuplicateName|fooMe2("42");
+  }
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_01.yaml.world.2.expect
new file mode 100644
index 0000000..2fefb04
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_01.yaml.world.2.expect
@@ -0,0 +1,64 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  import "dart:ffi";
+
+  @#C3
+  class Coordinate extends dart.ffi::Struct {
+    @#C3
+    static final field dart.core::int* #sizeOf = (#C6).{dart.core::List::[]}(dart.ffi::_abi());
+    @#C3
+    constructor #fromPointer(dynamic #pointer) → dynamic
+      : super dart.ffi::Struct::_fromPointer(#pointer)
+      ;
+    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
+      return null;
+    }
+    get #_ptr_x() → dart.ffi::Pointer<dart.ffi::Double*>*
+      return this.{dart.ffi::Struct::_addressOf}.{dart.ffi::Pointer::cast}<dart.ffi::Double*>();
+    get x() → dart.core::double*
+      return dart.ffi::_loadDouble(this.{lib::Coordinate::#_ptr_x}, #C7);
+    set x(dart.core::double* #v) → void
+      return dart.ffi::_storeDouble(this.{lib::Coordinate::#_ptr_x}, #C7, #v);
+    get #_ptr_y() → dart.ffi::Pointer<dart.ffi::Double*>*
+      return this.{dart.ffi::Struct::_addressOf}.{dart.ffi::Pointer::_offsetBy}((#C9).{dart.core::List::[]}(dart.ffi::_abi())).{dart.ffi::Pointer::cast}<dart.ffi::Double*>();
+    get y() → dart.core::double*
+      return dart.ffi::_loadDouble(this.{lib::Coordinate::#_ptr_y}, #C7);
+    set y(dart.core::double* #v) → void
+      return dart.ffi::_storeDouble(this.{lib::Coordinate::#_ptr_y}, #C7, #v);
+    get #_ptr_next() → dart.ffi::Pointer<dart.ffi::Pointer<lib::Coordinate*>*>*
+      return this.{dart.ffi::Struct::_addressOf}.{dart.ffi::Pointer::_offsetBy}((#C11).{dart.core::List::[]}(dart.ffi::_abi())).{dart.ffi::Pointer::cast}<dart.ffi::Pointer<lib::Coordinate*>*>();
+    get next() → dart.ffi::Pointer<lib::Coordinate*>*
+      return dart.ffi::_loadPointer<dart.ffi::Pointer<lib::Coordinate*>*>(this.{lib::Coordinate::#_ptr_next}, #C7);
+    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
+      return dart.ffi::_storePointer<dart.ffi::Pointer<lib::Coordinate*>*>(this.{lib::Coordinate::#_ptr_next}, #C7, #v);
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  static method main() → dynamic {
+    lib::Coordinate* coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(coordinate.{lib::Coordinate::x});
+    dart.core::print(coordinate.{lib::Coordinate::y});
+    dart.core::print(coordinate.{lib::Coordinate::next});
+    main::done();
+  }
+  static method done() → dynamic {
+    dart.core::print("Done!");
+  }
+}
+constants  {
+  #C1 = "vm:entry-point"
+  #C2 = null
+  #C3 = dart.core::pragma {name:#C1, options:#C2}
+  #C4 = 24
+  #C5 = 20
+  #C6 = <dart.core::int*>[#C4, #C5, #C4]
+  #C7 = 0
+  #C8 = 8
+  #C9 = <dart.core::int*>[#C8, #C8, #C8]
+  #C10 = 16
+  #C11 = <dart.core::int*>[#C10, #C10, #C10]
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_02.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_02.yaml
new file mode 100644
index 0000000..be678ed
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_02.yaml
@@ -0,0 +1,42 @@
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Test FFI compilation. Do expression computation using a (converted to getter)
+# field in the FFI-struct class.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        import 'lib.dart';
+
+        Coordinate coordinate;
+
+        main() {
+          coordinate = new Coordinate.allocate(42.0, 42.0, null);
+          print(coordinate.x);
+          print(coordinate.y);
+          print(coordinate.next);
+        }
+      lib.dart: |
+        import 'dart:ffi';
+
+        class Coordinate extends Struct {
+          @Double()
+          double x;
+
+          @Double()
+          double y;
+
+          Pointer<Coordinate> next;
+
+          factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
+            return null;
+          }
+        }
+    expectedLibraryCount: 2
+    expressionCompilation:
+      uri: main.dart
+      expression: print(coordinate.x)
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_02.yaml.world.1.expect
new file mode 100644
index 0000000..51d68a9
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/ffi_02.yaml.world.1.expect
@@ -0,0 +1,61 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  import "dart:ffi";
+
+  @#C3
+  class Coordinate extends dart.ffi::Struct {
+    @#C3
+    static final field dart.core::int* #sizeOf = (#C6).{dart.core::List::[]}(dart.ffi::_abi());
+    @#C3
+    constructor #fromPointer(dynamic #pointer) → dynamic
+      : super dart.ffi::Struct::_fromPointer(#pointer)
+      ;
+    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
+      return null;
+    }
+    get #_ptr_x() → dart.ffi::Pointer<dart.ffi::Double*>*
+      return this.{dart.ffi::Struct::_addressOf}.{dart.ffi::Pointer::cast}<dart.ffi::Double*>();
+    get x() → dart.core::double*
+      return dart.ffi::_loadDouble(this.{lib::Coordinate::#_ptr_x}, #C7);
+    set x(dart.core::double* #v) → void
+      return dart.ffi::_storeDouble(this.{lib::Coordinate::#_ptr_x}, #C7, #v);
+    get #_ptr_y() → dart.ffi::Pointer<dart.ffi::Double*>*
+      return this.{dart.ffi::Struct::_addressOf}.{dart.ffi::Pointer::_offsetBy}((#C9).{dart.core::List::[]}(dart.ffi::_abi())).{dart.ffi::Pointer::cast}<dart.ffi::Double*>();
+    get y() → dart.core::double*
+      return dart.ffi::_loadDouble(this.{lib::Coordinate::#_ptr_y}, #C7);
+    set y(dart.core::double* #v) → void
+      return dart.ffi::_storeDouble(this.{lib::Coordinate::#_ptr_y}, #C7, #v);
+    get #_ptr_next() → dart.ffi::Pointer<dart.ffi::Pointer<lib::Coordinate*>*>*
+      return this.{dart.ffi::Struct::_addressOf}.{dart.ffi::Pointer::_offsetBy}((#C11).{dart.core::List::[]}(dart.ffi::_abi())).{dart.ffi::Pointer::cast}<dart.ffi::Pointer<lib::Coordinate*>*>();
+    get next() → dart.ffi::Pointer<lib::Coordinate*>*
+      return dart.ffi::_loadPointer<dart.ffi::Pointer<lib::Coordinate*>*>(this.{lib::Coordinate::#_ptr_next}, #C7);
+    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
+      return dart.ffi::_storePointer<dart.ffi::Pointer<lib::Coordinate*>*>(this.{lib::Coordinate::#_ptr_next}, #C7, #v);
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  static field lib::Coordinate* coordinate;
+  static method main() → dynamic {
+    main::coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(main::coordinate.{lib::Coordinate::x});
+    dart.core::print(main::coordinate.{lib::Coordinate::y});
+    dart.core::print(main::coordinate.{lib::Coordinate::next});
+  }
+}
+constants  {
+  #C1 = "vm:entry-point"
+  #C2 = null
+  #C3 = dart.core::pragma {name:#C1, options:#C2}
+  #C4 = 24
+  #C5 = 20
+  #C6 = <dart.core::int*>[#C4, #C5, #C4]
+  #C7 = 0
+  #C8 = 8
+  #C9 = <dart.core::int*>[#C8, #C8, #C8]
+  #C10 = 16
+  #C11 = <dart.core::int*>[#C10, #C10, #C10]
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect
index 5b6d98f..e1e5ded 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect
@@ -23,7 +23,7 @@
       dart.core::print("noSouchMethod!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
@@ -37,9 +37,9 @@
       dart.core::print("noSouchMethod!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ field() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect
index 11a8f3e..1b65ff5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect
@@ -23,7 +23,7 @@
       dart.core::print("noSouchMethod!!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
@@ -37,9 +37,9 @@
       dart.core::print("noSouchMethod!!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ field() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
index 6d4a7d3..faa6a66 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
@@ -284,7 +284,7 @@
       dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →* dart.core::int* #t7 = compare in #t7.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) →* dart.core::int*} #C6 : #t7);
     }
     static method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int* {
-      return dart.core::Comparable::compare(a as{TypeError} dart.core::Comparable<dynamic>*, b as{TypeError} dart.core::Comparable<dynamic>*);
+      return dart.core::Comparable::compare(a as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*, b as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*);
     }
     method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random* random = #C2]) → void {
       random.{dart.core::Object::==}(null) ?{dart.math::Random*} random = dart.math::Random::•() : null;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
index 6d4a7d3..faa6a66 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
@@ -284,7 +284,7 @@
       dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →* dart.core::int* #t7 = compare in #t7.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) →* dart.core::int*} #C6 : #t7);
     }
     static method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int* {
-      return dart.core::Comparable::compare(a as{TypeError} dart.core::Comparable<dynamic>*, b as{TypeError} dart.core::Comparable<dynamic>*);
+      return dart.core::Comparable::compare(a as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*, b as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*);
     }
     method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random* random = #C2]) → void {
       random.{dart.core::Object::==}(null) ?{dart.math::Random*} random = dart.math::Random::•() : null;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/status.status b/pkg/front_end/testcases/incremental_initialize_from_dill/status.status
index 6807261..4874153 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/status.status
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/status.status
@@ -4,4 +4,18 @@
 
 # Status file for the test suite ../test/incremental_load_from_dill_test.dart.
 
-ffi_01: Crash # http://dartbug.com/39840
+no_outline_change_1: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_2: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_6: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_7: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_9: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_10: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_11: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_12: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_13: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_14: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_21: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_24: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_27: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_33: Crash # Doesn't work on DillLibraryBuilders.
+no_outline_change_34: Crash # Doesn't work on DillLibraryBuilders.
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml
new file mode 100644
index 0000000..ca9f7f1
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml
@@ -0,0 +1,30 @@
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Re-create https://github.com/flutter/flutter/issues/48804.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    errors: false
+    sources:
+      main.dart: |
+        import "lib.dart";
+        typedef G<T> = Function(F<T>);
+      lib.dart: |
+        typedef F<T> = Function();
+    expectedLibraryCount: 2
+  - entry: main.dart
+    errors: false
+    expectInitializeFromDill: true
+    invalidate:
+      - main.dart
+    sources:
+      main.dart: |
+        import "lib.dart";
+        typedef G<T> = Function(F<T>);
+        main() {
+          print("Hello");
+        }
+    expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml.world.1.expect
new file mode 100644
index 0000000..6b0429d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml.world.1.expect
@@ -0,0 +1,11 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  typedef F<unrelated T extends dart.core::Object* = dynamic> = () →* dynamic;
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  typedef G<unrelated T extends dart.core::Object* = dynamic> = (() →* dynamic) →* dynamic;
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml.world.2.expect
new file mode 100644
index 0000000..30c96c7
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/typedef_crash_01.yaml.world.2.expect
@@ -0,0 +1,14 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  typedef F<unrelated T extends dart.core::Object* = dynamic> = () →* dynamic;
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  typedef G<unrelated T extends dart.core::Object* = dynamic> = (() →* dynamic) →* dynamic;
+  static method main() → dynamic {
+    dart.core::print("Hello");
+  }
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
new file mode 100644
index 0000000..22c9d3b
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
@@ -0,0 +1,42 @@
+# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Adopted from vm/cc/IRTest_TypedDataAOT_FunctionalIndexError.
+
+type: newworld
+worlds:
+  - entry: set-Uint8List.dart
+    sources:
+      set-Uint8List.dart: |
+        import 'dart:typed_data';
+        void setUint8List(Uint8List list, int index, int value) {
+          list[index] = value;
+        }
+    expectedLibraryCount: 1
+  - entry: set-Int8List.dart
+    worldType: updated
+    checkInvalidatedFiles: false
+    expectInitializeFromDill: false
+    invalidate:
+      - set-Int8List.dart
+    sources:
+      set-Int8List.dart: |
+        import 'dart:typed_data';
+        void setInt8List(Int8List list, int index, int value) {
+          list[index] = value;
+        }
+    expectedLibraryCount: 1
+  - entry: set-Uint8List.dart
+    worldType: updated
+    checkInvalidatedFiles: false
+    expectInitializeFromDill: false
+    invalidate:
+      - set-Uint8List.dart
+    sources:
+      set-Uint8List.dart: |
+        import 'dart:typed_data';
+        void setUint8List(Uint8List list, int index, int value) {
+          list[index] = value;
+        }
+    expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
new file mode 100644
index 0000000..6c62e4d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
@@ -0,0 +1,9 @@
+main = <No Member>;
+library from "org-dartlang-test:///set-Uint8List.dart" as set {
+
+  import "dart:typed_data";
+
+  static method setUint8List(dart.typed_data::Uint8List* list, dart.core::int* index, dart.core::int* value) → void {
+    list.{dart.core::List::[]=}(index, value);
+  }
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
new file mode 100644
index 0000000..543a390
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
@@ -0,0 +1,9 @@
+main = <No Member>;
+library from "org-dartlang-test:///set-Int8List.dart" as set {
+
+  import "dart:typed_data";
+
+  static method setInt8List(dart.typed_data::Int8List* list, dart.core::int* index, dart.core::int* value) → void {
+    list.{dart.core::List::[]=}(index, value);
+  }
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
new file mode 100644
index 0000000..6c62e4d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
@@ -0,0 +1,9 @@
+main = <No Member>;
+library from "org-dartlang-test:///set-Uint8List.dart" as set {
+
+  import "dart:typed_data";
+
+  static method setUint8List(dart.typed_data::Uint8List* list, dart.core::int* index, dart.core::int* value) → void {
+    list.{dart.core::List::[]=}(index, value);
+  }
+}
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.strong.expect b/pkg/front_end/testcases/inference/bug33324.dart.strong.expect
index b1e4298..74b0bb6 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/bug33324.dart.strong.expect
@@ -6,6 +6,6 @@
   core::Function* f = (dynamic x) → dynamic => x;
   core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}();
   l.{core::List::add}(42);
-  return l.{core::Iterable::first}.length as{TypeError} core::int*;
+  return l.{core::Iterable::first}.length as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect
index b1e4298..74b0bb6 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect
@@ -6,6 +6,6 @@
   core::Function* f = (dynamic x) → dynamic => x;
   core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}();
   l.{core::List::add}(42);
-  return l.{core::Iterable::first}.length as{TypeError} core::int*;
+  return l.{core::Iterable::first}.length as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
index 38a8a35..e095535 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
@@ -27,8 +27,8 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
index 88d238f..c7d6e17 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
@@ -21,8 +21,8 @@
 static method f() → dynamic {
   core::num* x;
   dynamic y;
-  core::num* a = math::max<core::num*>(x, y as{TypeError} core::num*);
-  core::Object* b = math::max<core::num*>(x, y as{TypeError} core::num*);
+  core::num* a = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
+  core::Object* b = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
   dynamic c = math::max<dynamic>(x, y);
   dynamic d = math::max<dynamic>(x, y);
 }
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
index 88d238f..c7d6e17 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
@@ -21,8 +21,8 @@
 static method f() → dynamic {
   core::num* x;
   dynamic y;
-  core::num* a = math::max<core::num*>(x, y as{TypeError} core::num*);
-  core::Object* b = math::max<core::num*>(x, y as{TypeError} core::num*);
+  core::num* a = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
+  core::Object* b = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
   dynamic c = math::max<dynamic>(x, y);
   dynamic d = math::max<dynamic>(x, y);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect
index 360f7c7..1a5ac1a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect
@@ -7,6 +7,6 @@
 
 static method main() → asy::Future<dynamic>* async {
   dynamic d;
-  core::List<core::int*>* l0 = await<core::int*>[d as{TypeError} core::int*];
-  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError} core::int*]);
+  core::List<core::int*>* l0 = await<core::int*>[d as{TypeError,ForDynamic} core::int*];
+  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect
index 947d113..92361c9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect
@@ -20,9 +20,9 @@
       #L1:
       {
         dynamic d;
-        [yield] let dynamic #t1 = asy::_awaitHelper(<core::int*>[d as{TypeError} core::int*], :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(<core::int*>[d as{TypeError,ForDynamic} core::int*], :async_op_then, :async_op_error, :async_op) in null;
         core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError} core::int*]), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]), :async_op_then, :async_op_error, :async_op) in null;
         core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index e52fb83..55385e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -110,7 +110,7 @@
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
-             ^^^^^^^^^" as{TypeError} core::String*;
+             ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
index e52fb83..55385e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
@@ -110,7 +110,7 @@
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
-             ^^^^^^^^^" as{TypeError} core::String*;
+             ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 40d578f..ee90542 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -126,7 +126,7 @@
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
-         ^^^^^^^^^" as{TypeError} core::String*;
+         ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
     z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
index 40d578f..ee90542 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
@@ -126,7 +126,7 @@
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
-         ^^^^^^^^^" as{TypeError} core::String*;
+         ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
     z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3);
   }
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
index 34a20de..93ecd39 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
@@ -11,10 +11,10 @@
   }
   core::int* y;
   for (final dynamic #t1 in o as{TypeError} core::Iterable<dynamic>*) {
-    y = #t1 as{TypeError} core::int*;
+    y = #t1 as{TypeError,ForDynamic} core::int*;
   }
   await for (final dynamic #t2 in o as{TypeError} asy::Stream<dynamic>*) {
-    y = #t2 as{TypeError} core::int*;
+    y = #t2 as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
index 6d20b98..2bc7b4c 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
             {
-              y = #t4 as{TypeError} core::int*;
+              y = #t4 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
@@ -72,7 +72,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  y = #t7 as{TypeError} core::int*;
+                  y = #t7 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
diff --git a/pkg/front_end/testcases/inference/future_then.dart.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
index 65247cd..c72502ef 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
index 8aa7e82..48ef203 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
index ae490fd762..7a95932 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
index 1e87f8a..a340d04 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
index 680db32..21c7bf4 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
index df9aa51..61dc898 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
index 0bfc7d0..f6f2fe5 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
index c349f97..36e80aa 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
index 0fc40e9..41e6861 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
index 1afc871..9d8eb63 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
index e7dfa46..de57433 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
index 9731f3b..9efbea1 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
index 1ce4d6d..741316a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
index 5abd329..c53bad4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
index f386e01..c1241f0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
index 852ab83..20f8e91 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
index 6d642c1..e223058 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
index 56e7a58..2be73df 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
index 37b74ef..c8a5337 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
index 8009681..ab579f5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
index 28e6554..4e1ca61 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
index 9cda589..f68b46e 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
index da92218..b54dfc2 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
index 50485af..a7f2f7a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
index 0bec8e6..87b52ee 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
index 760de92..9d9e7dc 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
index c40bb55..d16cbdf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 3865a9a..3766778 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -24,13 +24,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
index 3865a9a..3766778 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
@@ -24,13 +24,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
index c40bb55..d16cbdf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index ebacc67..a855441 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
index ebacc67..a855441 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
index f2d1f87..f7cb495 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index e7c7bc4..ddb7194 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
index e7c7bc4..ddb7194 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
index a8a37bc..ee3138c 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>*
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
index 5b4785c..6f320ff 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} asy::FutureOr<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
index 4f29e0f..0c1809a 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
   final asy::_AsyncAwaitCompleter<core::int*>* :async_completer = new asy::_AsyncAwaitCompleter::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
index a8a37bc..ee3138c 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>*
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
index e226a22..3bcd4ca 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} asy::FutureOr<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
index 46ac20c..1812257 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
   final asy::_AsyncAwaitCompleter<core::int*>* :async_completer = new asy::_AsyncAwaitCompleter::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
index 1fefba5..9065bcf 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index 8c541ca..b1f9997 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
index 2819009..829fcb3 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
index 1fefba5..9065bcf 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
index 7b7bf16..2b84966 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
index e4688e7..a99851d 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
index 239aaa9..ff2fae926 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index a309a4b..125547e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
index daeed90..585b9a59 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
index 239aaa9..ff2fae926 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
index 44c27d7..e4e496c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
index 7bd9b40..7448b01 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 4bc55c2..b4da5d7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -39,6 +39,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42) as{TypeError} core::int*;
+  core::int* y = new self::D::•().{self::D::m}<core::int*>(42) as{TypeError,ForDynamic} core::int*;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect
index 7eb5d33..dcb7d1d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect
@@ -6,12 +6,12 @@
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method functionExpressionInvocation() → void {
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect
index 7eb5d33..dcb7d1d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect
@@ -6,12 +6,12 @@
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method functionExpressionInvocation() → void {
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index dffe5df..1988b92 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -54,6 +54,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42) as{TypeError} core::int*;
+  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42) as{TypeError,ForDynamic} core::int*;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 7967409..05abfab 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -28,7 +28,7 @@
  - 'FutureOr' is from 'dart:async'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" as{TypeError} asy::FutureOr<core::String*>*));
+                                                                                                                          ^" as{TypeError,ForDynamic} asy::FutureOr<core::String*>*));
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
  - 'FutureOr' is from 'dart:async'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
index 7967409..05abfab 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
@@ -28,7 +28,7 @@
  - 'FutureOr' is from 'dart:async'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" as{TypeError} asy::FutureOr<core::String*>*));
+                                                                                                                          ^" as{TypeError,ForDynamic} asy::FutureOr<core::String*>*));
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
  - 'FutureOr' is from 'dart:async'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
index 1abf208..e2271dd 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
   set x(core::int* value) → void {}
 }
 class B extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect
index 1abf208..e2271dd 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
   set x(core::int* value) → void {}
 }
 class B extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index bb7d545..93b3edc 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -37,7 +37,7 @@
 static method foo() → dynamic {
   core::String* s;
   core::int* i;
-  s = new self::B::•().{self::B::x} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
   s = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
                                                              ^" in new self::B::•().{self::B::y} as{TypeError} core::String*;
@@ -45,7 +45,7 @@
   s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
                                                              ^" in new self::B::•().{self::B::w} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
   i = new self::B::•().{self::B::y};
   i = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:62: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
index bb7d545..93b3edc 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
 static method foo() → dynamic {
   core::String* s;
   core::int* i;
-  s = new self::B::•().{self::B::x} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
   s = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
                                                              ^" in new self::B::•().{self::B::y} as{TypeError} core::String*;
@@ -45,7 +45,7 @@
   s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
                                                              ^" in new self::B::•().{self::B::w} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
   i = new self::B::•().{self::B::y};
   i = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:62: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
index 077060d..0b8b396 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect
index 077060d..0b8b396 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
index 43604a1..3a5f33d 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect
index 43604a1..3a5f33d 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
index 0ab7323..1611ea4 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B*
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect
index 0ab7323..1611ea4 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B*
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
index 8038d01..dc05112 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
@@ -27,8 +27,8 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index 12a0f49..a073b10 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -71,7 +71,7 @@
                                             ^" in x as{TypeError} core::String*;
   }
   for (dynamic x in list) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
   for (final self::Foo* #t4 in list) {
     core::String* x = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -84,16 +84,16 @@
   dynamic z;
   for (final self::Foo* #t6 in list) {
     z = #t6;
-    core::String* y = z as{TypeError} core::String*;
+    core::String* y = z as{TypeError,ForDynamic} core::String*;
   }
   core::Iterable<dynamic>* iter = list;
   for (final dynamic #t7 in iter) {
-    self::Foo* x = #t7 as{TypeError} self::Foo*;
+    self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t8 in iter2 as{TypeError} core::Iterable<dynamic>*) {
-    self::Foo* x = #t8 as{TypeError} self::Foo*;
+  for (final dynamic #t8 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
@@ -103,7 +103,7 @@
  - 'Iterable' is from 'dart:core'.
   for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                      ^" in map as{TypeError} core::Iterable<dynamic>*) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
   for (core::String* x in map.{core::Map::keys}) {
     core::String* y = x;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
index 67247a8..8b874fc 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
@@ -94,7 +94,7 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic x = :sync-for-iterator.{core::Iterator::current};
       {
-        core::String* y = x as{TypeError} core::String*;
+        core::String* y = x as{TypeError,ForDynamic} core::String*;
       }
     }
   }
@@ -119,7 +119,7 @@
       final self::Foo* #t6 = :sync-for-iterator.{core::Iterator::current};
       {
         z = #t6;
-        core::String* y = z as{TypeError} core::String*;
+        core::String* y = z as{TypeError,ForDynamic} core::String*;
       }
     }
   }
@@ -129,18 +129,18 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
       {
-        self::Foo* x = #t7 as{TypeError} self::Foo*;
+        self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
         self::Foo* y = x;
       }
     }
   }
   dynamic iter2 = list;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(iter2 as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
-        self::Foo* x = #t8 as{TypeError} self::Foo*;
+        self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
         self::Foo* y = x;
       }
     }
@@ -156,7 +156,7 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic x = :sync-for-iterator.{core::Iterator::current};
       {
-        core::String* y = x as{TypeError} core::String*;
+        core::String* y = x as{TypeError,ForDynamic} core::String*;
       }
     }
   }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index ab6817c..ba99001 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -78,7 +78,7 @@
                                             ^" in x as{TypeError} core::String*;
   }
   await for (dynamic x in myStream) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
   await for (final self::Foo* #t4 in myStream) {
     core::String* x = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -91,16 +91,16 @@
   dynamic z;
   await for (final self::Foo* #t6 in myStream) {
     z = #t6;
-    core::String* y = z as{TypeError} core::String*;
+    core::String* y = z as{TypeError,ForDynamic} core::String*;
   }
   asy::Stream<dynamic>* stream = myStream;
   await for (final dynamic #t7 in stream) {
-    self::Foo* x = #t7 as{TypeError} self::Foo*;
+    self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   dynamic stream2 = myStream;
-  await for (final dynamic #t8 in stream2 as{TypeError} asy::Stream<dynamic>*) {
-    self::Foo* x = #t8 as{TypeError} self::Foo*;
+  await for (final dynamic #t8 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
@@ -110,7 +110,7 @@
  - 'Stream' is from 'dart:async'.
   await for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                            ^" in map as{TypeError} asy::Stream<dynamic>*) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
index 7fe8c70..7f3335c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
@@ -222,7 +222,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String* y = x as{TypeError} core::String*;
+                  core::String* y = x as{TypeError,ForDynamic} core::String*;
                 }
               }
               else
@@ -277,7 +277,7 @@
                 final self::Foo* #t23 = :for-iterator.{asy::_StreamIterator::current};
                 {
                   z = #t23;
-                  core::String* y = z as{TypeError} core::String*;
+                  core::String* y = z as{TypeError,ForDynamic} core::String*;
                 }
               }
               else
@@ -302,7 +302,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t27 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  self::Foo* x = #t27 as{TypeError} self::Foo*;
+                  self::Foo* x = #t27 as{TypeError,ForDynamic} self::Foo*;
                   self::Foo* y = x;
                 }
               }
@@ -317,7 +317,7 @@
         }
         dynamic stream2 = myStream;
         {
-          dynamic :stream = stream2 as{TypeError} asy::Stream<dynamic>*;
+          dynamic :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
@@ -328,7 +328,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t31 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  self::Foo* x = #t31 as{TypeError} self::Foo*;
+                  self::Foo* x = #t31 as{TypeError,ForDynamic} self::Foo*;
                   self::Foo* y = x;
                 }
               }
@@ -359,7 +359,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String* y = x as{TypeError} core::String*;
+                  core::String* y = x as{TypeError,ForDynamic} core::String*;
                 }
               }
               else
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
index 4d47083..82851a6 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
@@ -10,6 +10,6 @@
     return (self::C::T* y) → core::Null? {};
 }
 static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
+  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
index 4d47083..82851a6 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
@@ -10,6 +10,6 @@
     return (self::C::T* y) → core::Null? {};
 }
 static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
+  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
index 29d7a60..8c5aa72 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
@@ -10,7 +10,7 @@
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError} self::A*;
+  self::A* b = a as{TypeError,ForDynamic} self::A*;
   core::print(a.x);
   core::print(a.x.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect
index 29d7a60..8c5aa72 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError} self::A*;
+  self::A* b = a as{TypeError,ForDynamic} self::A*;
   core::print(a.x);
   core::print(a.x.+(2));
 }
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
index 3fb8cb6..2620e6d 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
@@ -13,7 +13,7 @@
 static field core::int* intValue = 0;
 static field core::num* numValue = 0;
 static field core::double* doubleValue = 0.0;
-static field invalid-type a = (() → core::num* => self::intValue.{core::num::+}(self::b as{TypeError} core::num*)) as{TypeError} invalid-type;
+static field invalid-type a = (() → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*)) as{TypeError} invalid-type;
 static field dynamic b = self::a.call();
 static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d);
 static field core::num* d = self::c.call();
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index 13e6c5e..970333f 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -32,26 +32,26 @@
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
                 ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    core::int* x = #t1 as{TypeError} core::int*;
+    core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
   }
   await for (final dynamic #t3 in let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (int x in s) {}
                       ^" in s as{TypeError} asy::Stream<dynamic>*) {
-    core::int* x = #t3 as{TypeError} core::int*;
+    core::int* x = #t3 as{TypeError,ForDynamic} core::int*;
   }
   core::int* y;
   for (final dynamic #t5 in let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (y in s) {}
             ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    y = #t5 as{TypeError} core::int*;
+    y = #t5 as{TypeError,ForDynamic} core::int*;
   }
   await for (final dynamic #t7 in let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (y in s) {}
                   ^" in s as{TypeError} asy::Stream<dynamic>*) {
-    y = #t7 as{TypeError} core::int*;
+    y = #t7 as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
index 367cb2e..796c34d 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
             {
-              core::int* x = #t2 as{TypeError} core::int*;
+              core::int* x = #t2 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
@@ -71,7 +71,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t6 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::int* x = #t6 as{TypeError} core::int*;
+                  core::int* x = #t6 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
@@ -92,7 +92,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
             {
-              y = #t9 as{TypeError} core::int*;
+              y = #t9 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
@@ -111,7 +111,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t13 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  y = #t13 as{TypeError} core::int*;
+                  y = #t13 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart b/pkg/front_end/testcases/nnbd/assign_type_variable.dart
new file mode 100644
index 0000000..e644495
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class<E> {
+  void method(E e) {
+    e = id(e);
+    e = id<E>(e);
+    if (e != null) {
+      var e2 = e;
+      e2 = id(e);
+      e2 = id<E>(e);
+      e2 = id(e2);
+      e2 = id<E>(e2);
+    }
+  }
+}
+
+T id<T>(T t) => t;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.outline.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.outline.expect
new file mode 100644
index 0000000..0d12318
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::E%>
+    ;
+  method method(generic-covariant-impl self::Class::E% e) → void
+    ;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
new file mode 100644
index 0000000..ee9e3f6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::E%>
+    : super core::Object::•()
+    ;
+  method method(generic-covariant-impl self::Class::E% e) → void {
+    e = self::id<self::Class::E%>(e);
+    e = self::id<self::Class::E%>(e);
+    if(!e.{core::Object::==}(null)) {
+      self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e2);
+      e2 = self::id<self::Class::E%>(e2);
+    }
+  }
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
new file mode 100644
index 0000000..ee9e3f6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::E%>
+    : super core::Object::•()
+    ;
+  method method(generic-covariant-impl self::Class::E% e) → void {
+    e = self::id<self::Class::E%>(e);
+    e = self::id<self::Class::E%>(e);
+    if(!e.{core::Object::==}(null)) {
+      self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e2);
+      e2 = self::id<self::Class::E%>(e2);
+    }
+  }
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
new file mode 100644
index 0000000..ee9e3f6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::E%>
+    : super core::Object::•()
+    ;
+  method method(generic-covariant-impl self::Class::E% e) → void {
+    e = self::id<self::Class::E%>(e);
+    e = self::id<self::Class::E%>(e);
+    if(!e.{core::Object::==}(null)) {
+      self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e2);
+      e2 = self::id<self::Class::E%>(e2);
+    }
+  }
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
new file mode 100644
index 0000000..ee9e3f6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::E%>
+    : super core::Object::•()
+    ;
+  method method(generic-covariant-impl self::Class::E% e) → void {
+    e = self::id<self::Class::E%>(e);
+    e = self::id<self::Class::E%>(e);
+    if(!e.{core::Object::==}(null)) {
+      self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e2);
+      e2 = self::id<self::Class::E%>(e2);
+    }
+  }
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
index 56f107d..803bc0a 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
@@ -383,10 +383,9 @@
 //   functionVar = toVoidNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:202:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
 //   functionVar = tearoffableNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
@@ -476,9 +475,9 @@
 //   toVoidVar = toVoidNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:223:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
 //   toVoidVar = tearoffableNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = xNonNullArg;
@@ -995,7 +994,7 @@
   dynamicVar = xPotentiallyNullArg;
   dynamicVar = yNonNullArg;
   dynamicVar = yPotentiallyNullArg;
-  core::Object objectVar = dynamicArg as{TypeError} core::Object;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   objectVar = objectArg;
   objectVar = numArg;
   objectVar = intArg;
@@ -1004,789 +1003,788 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
   core::Object objectVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
-                     ^" in objectNullableArg as{TypeError} core::Object;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::Object;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::Object;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::Object;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::Object;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::Object;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::Object;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::Object;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::Object;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   core::num numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
-               ^" in objectArg as{TypeError} core::num;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::num;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
   numVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::num;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
   numVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::num;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
   numVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::num;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   core::int intVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
-               ^" in objectArg as{TypeError} core::int;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::int;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
-           ^" in numArg as{TypeError} core::int;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::int;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
   intVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::int;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   core::double doubleVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
-                     ^" in objectArg as{TypeError} core::double;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} core::double;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
-              ^" in numArg as{TypeError} core::double;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::double;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
   doubleVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::double;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   core::Function functionVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
-                         ^" in objectArg as{TypeError} core::Function;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} core::Function;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} core::Function;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
- - 'Function' is from 'dart:core'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
-  ^" in (let final self::Tearoffable? #t88 = tearoffableNullableArg in #t88.==(null) ?{() →? void} null : #t88.{self::Tearoffable::call}) as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
-  () → void toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
-                              ^" in objectArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
-              ^" in functionArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
-  ^" in (let final self::Tearoffable? #t109 = tearoffableNullableArg in #t109.==(null) ?{() →? void} null : #t109.{self::Tearoffable::call}) as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
-  self::Tearoffable tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
-                               ^" in objectArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
-                   ^" in objectNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-                   ^" in tearoffableNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YnonNull yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YnonNull yNonNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
-                        ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t219 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t220 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
index 56f107d..803bc0a 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
@@ -383,10 +383,9 @@
 //   functionVar = toVoidNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:202:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
 //   functionVar = tearoffableNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
@@ -476,9 +475,9 @@
 //   toVoidVar = toVoidNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:223:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
 //   toVoidVar = tearoffableNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = xNonNullArg;
@@ -995,7 +994,7 @@
   dynamicVar = xPotentiallyNullArg;
   dynamicVar = yNonNullArg;
   dynamicVar = yPotentiallyNullArg;
-  core::Object objectVar = dynamicArg as{TypeError} core::Object;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   objectVar = objectArg;
   objectVar = numArg;
   objectVar = intArg;
@@ -1004,789 +1003,788 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
   core::Object objectVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
-                     ^" in objectNullableArg as{TypeError} core::Object;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::Object;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::Object;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::Object;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::Object;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::Object;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::Object;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::Object;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::Object;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   core::num numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
-               ^" in objectArg as{TypeError} core::num;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::num;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
   numVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::num;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
   numVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::num;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
   numVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::num;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   core::int intVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
-               ^" in objectArg as{TypeError} core::int;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::int;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
-           ^" in numArg as{TypeError} core::int;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::int;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
   intVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::int;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   core::double doubleVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
-                     ^" in objectArg as{TypeError} core::double;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} core::double;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
-              ^" in numArg as{TypeError} core::double;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::double;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
   doubleVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::double;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   core::Function functionVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
-                         ^" in objectArg as{TypeError} core::Function;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} core::Function;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} core::Function;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
- - 'Function' is from 'dart:core'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
-  ^" in (let final self::Tearoffable? #t88 = tearoffableNullableArg in #t88.==(null) ?{() →? void} null : #t88.{self::Tearoffable::call}) as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
-  () → void toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
-                              ^" in objectArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
-              ^" in functionArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:3: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
-  ^" in (let final self::Tearoffable? #t109 = tearoffableNullableArg in #t109.==(null) ?{() →? void} null : #t109.{self::Tearoffable::call}) as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
-  self::Tearoffable tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
-                               ^" in objectArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
-                   ^" in objectNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-                   ^" in tearoffableNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YnonNull yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YnonNull yNonNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
-                        ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t219 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t220 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
index 8775e92..55036c6 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
@@ -383,10 +383,9 @@
 //   functionVar = toVoidNullableArg;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:202:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Warning: Tearing off method 'call' from a potentially null value.
 //   functionVar = tearoffableNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
@@ -476,9 +475,9 @@
 //   toVoidVar = toVoidNullableArg;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:223:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Warning: Tearing off method 'call' from a potentially null value.
 //   toVoidVar = tearoffableNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = xNonNullArg;
@@ -1004,32 +1003,32 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
@@ -1046,582 +1045,582 @@
   objectVar = yNonNullNullableArg;
   objectVar = yPotentiallyNullArg;
   objectVar = yPotentiallyNullNullableArg;
-  core::num numVar = objectArg as{TypeError} core::num;
-  numVar = objectNullableArg as{TypeError} core::num;
+  core::num numVar = objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = numNullableArg;
   numVar = intNullableArg;
   numVar = doubleNullableArg;
   numVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
-  core::int intVar = objectArg as{TypeError} core::int;
-  intVar = objectNullableArg as{TypeError} core::int;
-  intVar = numArg as{TypeError} core::int;
-  intVar = numNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  core::int intVar = objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = intNullableArg;
   intVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
-  core::double doubleVar = objectArg as{TypeError} core::double;
-  doubleVar = objectNullableArg as{TypeError} core::double;
-  doubleVar = numArg as{TypeError} core::double;
-  doubleVar = numNullableArg as{TypeError} core::double;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::double doubleVar = objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = doubleNullableArg;
   doubleVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
-  core::Function functionVar = objectArg as{TypeError} core::Function;
-  functionVar = objectNullableArg as{TypeError} core::Function;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  core::Function functionVar = objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = functionNullableArg;
   functionVar = toVoidNullableArg;
-  functionVar = let final self::Tearoffable? #t55 = tearoffableNullableArg in #t55.==(null) ?{() →? void} null : #t55.{self::Tearoffable::call};
-  functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
-  () → void toVoidVar = objectArg as{TypeError} () → void;
-  toVoidVar = objectNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
-  toVoidVar = functionArg as{TypeError} () → void;
-  toVoidVar = functionNullableArg as{TypeError} () → void;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidNullableArg;
-  toVoidVar = let final self::Tearoffable? #t70 = tearoffableNullableArg in #t70.==(null) ?{() →? void} null : #t70.{self::Tearoffable::call};
-  toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
-  self::Tearoffable tearoffableVar = objectArg as{TypeError} self::Tearoffable;
-  tearoffableVar = objectNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableNullableArg;
-  tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = objectArg as{TypeError} self::error::XnonNull;
-  xNonNullVar = objectNullableArg as{TypeError} self::error::XnonNull;
-  xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
+  xNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
+  xNonNullVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = xNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = yNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = objectNullableArg as{TypeError} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
+  xPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
+  xPotentiallyNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-  xPotentiallyNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-  self::error::YnonNull yNonNullVar = objectArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = objectNullableArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  self::error::YnonNull yNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = xNonNullArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = xNonNullNullableArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = xNonNullArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = yNonNullNullableArg;
-  yNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = objectNullableArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
index 8775e92..55036c6 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
@@ -383,10 +383,9 @@
 //   functionVar = toVoidNullableArg;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:202:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Warning: Tearing off method 'call' from a potentially null value.
 //   functionVar = tearoffableNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
@@ -476,9 +475,9 @@
 //   toVoidVar = toVoidNullableArg;
 //   ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:223:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Warning: Tearing off method 'call' from a potentially null value.
 //   toVoidVar = tearoffableNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = xNonNullArg;
@@ -1004,32 +1003,32 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
@@ -1046,582 +1045,582 @@
   objectVar = yNonNullNullableArg;
   objectVar = yPotentiallyNullArg;
   objectVar = yPotentiallyNullNullableArg;
-  core::num numVar = objectArg as{TypeError} core::num;
-  numVar = objectNullableArg as{TypeError} core::num;
+  core::num numVar = objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = numNullableArg;
   numVar = intNullableArg;
   numVar = doubleNullableArg;
   numVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
-  core::int intVar = objectArg as{TypeError} core::int;
-  intVar = objectNullableArg as{TypeError} core::int;
-  intVar = numArg as{TypeError} core::int;
-  intVar = numNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  core::int intVar = objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = intNullableArg;
   intVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
-  core::double doubleVar = objectArg as{TypeError} core::double;
-  doubleVar = objectNullableArg as{TypeError} core::double;
-  doubleVar = numArg as{TypeError} core::double;
-  doubleVar = numNullableArg as{TypeError} core::double;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::double doubleVar = objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = doubleNullableArg;
   doubleVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
-  core::Function functionVar = objectArg as{TypeError} core::Function;
-  functionVar = objectNullableArg as{TypeError} core::Function;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  core::Function functionVar = objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = functionNullableArg;
   functionVar = toVoidNullableArg;
-  functionVar = let final self::Tearoffable? #t55 = tearoffableNullableArg in #t55.==(null) ?{() →? void} null : #t55.{self::Tearoffable::call};
-  functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
-  () → void toVoidVar = objectArg as{TypeError} () → void;
-  toVoidVar = objectNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
-  toVoidVar = functionArg as{TypeError} () → void;
-  toVoidVar = functionNullableArg as{TypeError} () → void;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidNullableArg;
-  toVoidVar = let final self::Tearoffable? #t70 = tearoffableNullableArg in #t70.==(null) ?{() →? void} null : #t70.{self::Tearoffable::call};
-  toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
-  self::Tearoffable tearoffableVar = objectArg as{TypeError} self::Tearoffable;
-  tearoffableVar = objectNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableNullableArg;
-  tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = objectArg as{TypeError} self::error::XnonNull;
-  xNonNullVar = objectNullableArg as{TypeError} self::error::XnonNull;
-  xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
+  xNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
+  xNonNullVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = xNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = yNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  xNonNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = objectNullableArg as{TypeError} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
+  xPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
+  xPotentiallyNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-  xPotentiallyNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-  self::error::YnonNull yNonNullVar = objectArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = objectNullableArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  self::error::YnonNull yNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = xNonNullArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = xNonNullNullableArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = xNonNullArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = yNonNullNullableArg;
-  yNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
-  yNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = objectNullableArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
index dc3ec6b..0f795fe 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
@@ -55,21 +55,21 @@
   for (core::int x in let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
-                ^" in i2 as{TypeError} core::Iterable<dynamic>)
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
     final core::List<core::int> #t2 = <core::int>[];
     for (core::int x in let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
-                 ^" in i2 as{TypeError} core::Iterable<dynamic>)
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
       #t2.{core::List::add}(x);
   } =>#t2;
   for (core::int x in let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
-                ^" in l2 as{TypeError} core::Iterable<dynamic>)
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
     final core::List<core::int> #t5 = <core::int>[];
@@ -77,15 +77,15 @@
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
-                 ^" in l2 as{TypeError} core::Iterable<dynamic>)
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
       #t5.{core::List::add}(x);
   } =>#t5;
   for (final dynamic #t7 in let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
-                ^" in o1 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t7 as{TypeError} core::int;
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t7 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
@@ -94,8 +94,8 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
-                 ^" in o1 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t10 as{TypeError} core::int;
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t9.{core::List::add}(x);
     }
   } =>#t9;
@@ -103,8 +103,8 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
-                ^" in o2 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t12 as{TypeError} core::int;
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
@@ -113,8 +113,8 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
-                 ^" in o2 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t15 as{TypeError} core::int;
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t14.{core::List::add}(x);
     }
   } =>#t14;
@@ -134,14 +134,14 @@
     for (core::int x in l1)
       #t18.{core::List::add}(x);
   } =>#t18;
-  for (final dynamic #t19 in d as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t19 as{TypeError} core::int;
+  for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t20 = <core::int>[];
-    for (final dynamic #t21 in d as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t21 as{TypeError} core::int;
+    for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t20.{core::List::add}(x);
     }
   } =>#t20;
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
index 04b46d0..ac3b55d 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
@@ -57,7 +57,7 @@
     core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
-                ^" in i2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::int x = :sync-for-iterator.{core::Iterator::current};
       x;
@@ -69,7 +69,7 @@
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
-                 ^" in i2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
         #t2.{core::List::add}(x);
@@ -81,7 +81,7 @@
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
-                ^" in l2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::int x = :sync-for-iterator.{core::Iterator::current};
       x;
@@ -94,7 +94,7 @@
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
-                 ^" in l2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
         #t5.{core::List::add}(x);
@@ -106,11 +106,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
-                ^" in o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t8 as{TypeError} core::int;
+        core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -122,11 +122,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
-                 ^" in o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t11 as{TypeError} core::int;
+          core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t9.{core::List::add}(x);
         }
       }
@@ -137,11 +137,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
-                ^" in o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t13 as{TypeError} core::int;
+        core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -153,11 +153,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
-                 ^" in o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t16 as{TypeError} core::int;
+          core::int x = #t16 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t14.{core::List::add}(x);
         }
       }
@@ -200,11 +200,11 @@
     }
   } =>#t18;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t19 as{TypeError} core::int;
+        core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -212,11 +212,11 @@
   block {
     final core::List<core::int> #t20 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t21 as{TypeError} core::int;
+          core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t20.{core::List::add}(x);
         }
       }
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
index 12c0f2c..7a50a15 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
@@ -66,25 +66,25 @@
     for (core::int x in l2)
       #t2.{core::List::add}(x);
   } =>#t2;
-  for (final dynamic #t3 in o1 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t3 as{TypeError} core::int;
+  for (final dynamic #t3 in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t4 = <core::int>[];
-    for (final dynamic #t5 in o1 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t5 as{TypeError} core::int;
+    for (final dynamic #t5 in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t4.{core::List::add}(x);
     }
   } =>#t4;
-  for (final dynamic #t6 in o2 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t6 as{TypeError} core::int;
+  for (final dynamic #t6 in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t7 = <core::int>[];
-    for (final dynamic #t8 in o2 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t8 as{TypeError} core::int;
+    for (final dynamic #t8 in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t7.{core::List::add}(x);
     }
   } =>#t7;
@@ -104,14 +104,14 @@
     for (core::int x in l1)
       #t10.{core::List::add}(x);
   } =>#t10;
-  for (final dynamic #t11 in d as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t11 as{TypeError} core::int;
+  for (final dynamic #t11 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t12 = <core::int>[];
-    for (final dynamic #t13 in d as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t13 as{TypeError} core::int;
+    for (final dynamic #t13 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t12.{core::List::add}(x);
     }
   } =>#t12;
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
index 1cf6aaf..39aa91b 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
@@ -88,11 +88,11 @@
     }
   } =>#t2;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t3 as{TypeError} core::int;
+        core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -100,22 +100,22 @@
   block {
     final core::List<core::int> #t4 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t5 as{TypeError} core::int;
+          core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t4.{core::List::add}(x);
         }
       }
     }
   } =>#t4;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t6 as{TypeError} core::int;
+        core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -123,11 +123,11 @@
   block {
     final core::List<core::int> #t7 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t8 as{TypeError} core::int;
+          core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t7.{core::List::add}(x);
         }
       }
@@ -170,11 +170,11 @@
     }
   } =>#t10;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t11 as{TypeError} core::int;
+        core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -182,11 +182,11 @@
   block {
     final core::List<core::int> #t12 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t13 as{TypeError} core::int;
+          core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t12.{core::List::add}(x);
         }
       }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
index 7facb01..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
@@ -22,18 +22,18 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
-      self::Foo::T% & self::B? /* '%' & '?' = '%' */ bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
-        self::Foo::T% & self::C? /* '%' & '?' = '%' */ baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
+    if(t is{ForNonNullableByDefault} self::B?) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
+        self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
-      self::Foo::T% & self::B /* '%' & '!' = '!' */ bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
-        self::Foo::T & self::C /* '!' & '!' = '!' */ baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
+    if(t is{ForNonNullableByDefault} self::B) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
+        self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
   }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
index 7facb01..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
@@ -22,18 +22,18 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
-      self::Foo::T% & self::B? /* '%' & '?' = '%' */ bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
-        self::Foo::T% & self::C? /* '%' & '?' = '%' */ baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
+    if(t is{ForNonNullableByDefault} self::B?) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
+        self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
-      self::Foo::T% & self::B /* '%' & '!' = '!' */ bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
-        self::Foo::T & self::C /* '!' & '!' = '!' */ baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
+    if(t is{ForNonNullableByDefault} self::B) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
+        self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
   }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
index 7facb01..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
@@ -22,18 +22,18 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
-      self::Foo::T% & self::B? /* '%' & '?' = '%' */ bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
-        self::Foo::T% & self::C? /* '%' & '?' = '%' */ baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
+    if(t is{ForNonNullableByDefault} self::B?) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
+        self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
-      self::Foo::T% & self::B /* '%' & '!' = '!' */ bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
-        self::Foo::T & self::C /* '!' & '!' = '!' */ baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
+    if(t is{ForNonNullableByDefault} self::B) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
+        self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
   }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
index 7facb01..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
@@ -22,18 +22,18 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
-      self::Foo::T% & self::B? /* '%' & '?' = '%' */ bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
-        self::Foo::T% & self::C? /* '%' & '?' = '%' */ baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
+    if(t is{ForNonNullableByDefault} self::B?) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
+        self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
-      self::Foo::T% & self::B /* '%' & '!' = '!' */ bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
-        self::Foo::T & self::C /* '!' & '!' = '!' */ baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
+    if(t is{ForNonNullableByDefault} self::B) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
+        self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
   }
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index 182f45e..3327046 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -118,7 +118,7 @@
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index b079c14..f87102a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -186,7 +186,7 @@
         function #s1#initializer() → core::String
           return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         late core::String s1 = #s1#initializer.call();
         function #s2#initializer() → core::String
           return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index 182f45e..3327046 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -118,7 +118,7 @@
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index b079c14..f87102a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -186,7 +186,7 @@
         function #s1#initializer() → core::String
           return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         late core::String s1 = #s1#initializer.call();
         function #s2#initializer() → core::String
           return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect
index 84b205c4..123a821 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect
@@ -108,22 +108,22 @@
 static method testOptIn() → dynamic {
   self::nullableVar = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in self::nonNullableVar as{TypeError} () →? core::int;
+                ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in self::nullableVar as{TypeError} core::double;
+                   ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in self::nullableVar as{TypeError} core::String*;
+              ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   self::nullableVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in mes::legacyVar as{TypeError} () →? core::int;
+                ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in mes::legacyVar as{TypeError} core::double;
+                   ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in self::nonNullableVar as{TypeError} core::String*;
+              ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect
index 84b205c4..123a821 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect
@@ -108,22 +108,22 @@
 static method testOptIn() → dynamic {
   self::nullableVar = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in self::nonNullableVar as{TypeError} () →? core::int;
+                ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in self::nullableVar as{TypeError} core::double;
+                   ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in self::nullableVar as{TypeError} core::String*;
+              ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   self::nullableVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in mes::legacyVar as{TypeError} () →? core::int;
+                ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in mes::legacyVar as{TypeError} core::double;
+                   ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in self::nonNullableVar as{TypeError} core::String*;
+              ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect
index 846f621..2b26e9b 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect
@@ -235,20 +235,20 @@
 static method testOptIn() → dynamic {
   mes::nullableVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in mes::nonNullableVar as{TypeError} () →? core::int;
+                ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in mes::nullableVar as{TypeError} core::double;
+                   ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in mes::nullableVar as{TypeError} core::String*;
+              ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   mes::nullableVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in self::legacyVar as{TypeError} () →? core::int;
+                ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in self::legacyVar as{TypeError} core::double;
+                   ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in mes::nonNullableVar as{TypeError} core::String*;
+              ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect
index 846f621..2b26e9b 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect
@@ -235,20 +235,20 @@
 static method testOptIn() → dynamic {
   mes::nullableVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in mes::nonNullableVar as{TypeError} () →? core::int;
+                ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in mes::nullableVar as{TypeError} core::double;
+                   ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in mes::nullableVar as{TypeError} core::String*;
+              ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   mes::nullableVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in self::legacyVar as{TypeError} () →? core::int;
+                ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in self::legacyVar as{TypeError} core::double;
+                   ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in mes::nonNullableVar as{TypeError} core::String*;
+              ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
index d981a0b..4572332 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
@@ -48,14 +48,17 @@
 //   b.toString(0);
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
 //   Function f1 = a;
-//            ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:19: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
 //   void Function() f2 = a;
-//                   ^
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
 //
 import self as self;
 import "dart:core" as core;
@@ -115,14 +118,15 @@
 Try calling using ?. instead.
   b.toString(0);
     ^^^^^^^^" in b.{self::B::toString}(0);
-  core::Function f1 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
- - 'Function' is from 'dart:core'.
+  core::Function f1 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
-           ^" in (let final self::A? #t10 = a in #t10.==(null) ?{() →? void} null : #t10.{self::A::call}) as{TypeError} core::Function;
-  () → void f2 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:19: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
   void Function() f2 = a;
-                  ^" in (let final self::A? #t12 = a in #t12.==(null) ?{() →? void} null : #t12.{self::A::call}) as{TypeError} () → void;
-  () →? void f3 = let final self::A? #t13 = a in #t13.==(null) ?{() →? void} null : #t13.{self::A::call};
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object? = core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
   s.{core::String::==}(s);
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
index d981a0b..4572332 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
@@ -48,14 +48,17 @@
 //   b.toString(0);
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
 //   Function f1 = a;
-//            ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:19: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
 //   void Function() f2 = a;
-//                   ^
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
 //
 import self as self;
 import "dart:core" as core;
@@ -115,14 +118,15 @@
 Try calling using ?. instead.
   b.toString(0);
     ^^^^^^^^" in b.{self::B::toString}(0);
-  core::Function f1 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
- - 'Function' is from 'dart:core'.
+  core::Function f1 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
-           ^" in (let final self::A? #t10 = a in #t10.==(null) ?{() →? void} null : #t10.{self::A::call}) as{TypeError} core::Function;
-  () → void f2 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:19: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
   void Function() f2 = a;
-                  ^" in (let final self::A? #t12 = a in #t12.==(null) ?{() →? void} null : #t12.{self::A::call}) as{TypeError} () → void;
-  () →? void f3 = let final self::A? #t13 = a in #t13.==(null) ?{() →? void} null : #t13.{self::A::call};
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object? = core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
   s.{core::String::==}(s);
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
index 54ee84d..cd79d91 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
@@ -48,14 +48,17 @@
 //   b.toString(0);
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:12: Warning: Assigning value of type 'void Function()?' to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Warning: Tearing off method 'call' from a potentially null value.
 //   Function f1 = a;
-//            ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:19: Warning: Assigning value of type 'void Function()?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Warning: Tearing off method 'call' from a potentially null value.
 //   void Function() f2 = a;
-//                   ^
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Warning: Tearing off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
 //
 import self as self;
 import "dart:core" as core;
@@ -85,9 +88,9 @@
   a.{self::A::baz} = 42;
   a.{self::A::call}();
   b.{self::B::toString}(0);
-  core::Function f1 = let final self::A? #t1 = a in #t1.==(null) ?{() →? void} null : #t1.{self::A::call};
-  () → void f2 = let final self::A? #t2 = a in #t2.==(null) ?{() →? void} null : #t2.{self::A::call};
-  () →? void f3 = let final self::A? #t3 = a in #t3.==(null) ?{() →? void} null : #t3.{self::A::call};
+  core::Function f1 = a as{TypeError} core::Function;
+  () → void f2 = a as{TypeError} () → void;
+  () →? void f3 = a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object? = core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
   s.{core::String::==}(s);
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
index 54ee84d..cd79d91 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
@@ -48,14 +48,17 @@
 //   b.toString(0);
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:12: Warning: Assigning value of type 'void Function()?' to a variable of type 'Function'.
-//  - 'Function' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Warning: Tearing off method 'call' from a potentially null value.
 //   Function f1 = a;
-//            ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:19: Warning: Assigning value of type 'void Function()?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Warning: Tearing off method 'call' from a potentially null value.
 //   void Function() f2 = a;
-//                   ^
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Warning: Tearing off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
 //
 import self as self;
 import "dart:core" as core;
@@ -85,9 +88,9 @@
   a.{self::A::baz} = 42;
   a.{self::A::call}();
   b.{self::B::toString}(0);
-  core::Function f1 = let final self::A? #t1 = a in #t1.==(null) ?{() →? void} null : #t1.{self::A::call};
-  () → void f2 = let final self::A? #t2 = a in #t2.==(null) ?{() →? void} null : #t2.{self::A::call};
-  () →? void f3 = let final self::A? #t3 = a in #t3.==(null) ?{() →? void} null : #t3.{self::A::call};
+  core::Function f1 = a as{TypeError} core::Function;
+  () → void f2 = a as{TypeError} () → void;
+  () →? void f3 = a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object? = core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
   s.{core::String::==}(s);
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/libraries.json b/pkg/front_end/testcases/nnbd/platform_optional_parameters/libraries.json
new file mode 100644
index 0000000..154c73c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/libraries.json
@@ -0,0 +1,12 @@
+{
+  "none": {
+    "libraries": {
+      "test": {
+        "patches": [
+          "patch_lib.dart"
+        ],
+        "uri": "origin_lib.dart"
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart
new file mode 100644
index 0000000..8610ab9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:test';
+
+main() {
+  Class? c = new Class();
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect
new file mode 100644
index 0000000..ab6f690
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.outline.expect
@@ -0,0 +1,67 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic
+  ;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void patchedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void _injectedMethod([int i]) {}
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void patchedMethod([int i]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void _injectedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void method([int i]) {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   external void patchedMethod([int i]);
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void method([int i]) {}
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// external void patchedMethod([int i]);
+//                                  ^
+//
+import self as self2;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@_in::patch
+class Class extends core::Object {
+  synthetic constructor •() → self2::Class
+    ;
+  method method([core::int i]) → void
+    ;
+  @_in::patch
+  external method patchedMethod([core::int i]) → void;
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i]) → void
+    ;
+}
+static method method([core::int i]) → void
+  ;
+@_in::patch
+external static abstract method patchedMethod([core::int i]) → void;
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i]) → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
new file mode 100644
index 0000000..1f952a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
@@ -0,0 +1,71 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class? c = new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void patchedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void _injectedMethod([int i]) {}
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void patchedMethod([int i]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void _injectedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void method([int i]) {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   external void patchedMethod([int i]);
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void method([int i]) {}
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// external void patchedMethod([int i]);
+//                                  ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class
+    : super core::Object::•()
+    ;
+  method method([core::int i = #C2]) → void {}
+  @#C1
+  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+}
+static method method([core::int i = #C2]) → void {}
+@#C1
+static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..1f952a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
@@ -0,0 +1,71 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class? c = new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void patchedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void _injectedMethod([int i]) {}
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void patchedMethod([int i]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void _injectedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   void method([int i]) {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+//   external void patchedMethod([int i]);
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// void method([int i]) {}
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
+// external void patchedMethod([int i]);
+//                                  ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class
+    : super core::Object::•()
+    ;
+  method method([core::int i = #C2]) → void {}
+  @#C1
+  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+}
+static method method([core::int i = #C2]) → void {}
+@#C1
+static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
new file mode 100644
index 0000000..33e8f39
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
@@ -0,0 +1,71 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class? c = new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   void patchedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   void _injectedMethod([int i]) {}
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// void patchedMethod([int i]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// void _injectedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   void method([int i]) {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   external void patchedMethod([int i]);
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// void method([int i]) {}
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// external void patchedMethod([int i]);
+//                                  ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class
+    : super core::Object::•()
+    ;
+  method method([core::int i = #C2]) → void {}
+  @#C1
+  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+}
+static method method([core::int i = #C2]) → void {}
+@#C1
+static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..33e8f39
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
@@ -0,0 +1,71 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class? c = new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   void patchedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   void _injectedMethod([int i]) {}
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// void patchedMethod([int i]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// void _injectedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   void method([int i]) {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+//   external void patchedMethod([int i]);
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// void method([int i]) {}
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// external void patchedMethod([int i]);
+//                                  ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class
+    : super core::Object::•()
+    ;
+  method method([core::int i = #C2]) → void {}
+  @#C1
+  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+}
+static method method([core::int i = #C2]) → void {}
+@#C1
+static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart b/pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart
new file mode 100644
index 0000000..afda628
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class {
+  void method([int i]) {}
+
+  external void patchedMethod([int i]);
+}
+
+void method([int i]) {}
+
+external void patchedMethod([int i]);
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart b/pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart
new file mode 100644
index 0000000..74deeb3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// ignore: import_internal_library
+import 'dart:_internal';
+
+@patch
+class Class {
+  @patch
+  void patchedMethod([int i]) {}
+
+  void _injectedMethod([int i]) {}
+}
+
+@patch
+void patchedMethod([int i]) {}
+
+void _injectedMethod([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart
new file mode 100644
index 0000000..69083d2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  int call() => 0;
+}
+
+functionContext(int Function() f) {}
+
+nullableFunctionContext(int Function()? f) {}
+
+foo<T extends C?>(C? c, T t, T? nt) {
+  functionContext(null as C?); // Error.
+  nullableFunctionContext(null as C?); // Error.
+  functionContext(c); // Error.
+  nullableFunctionContext(c); // Error.
+  functionContext(t); // Error.
+  nullableFunctionContext(t); // Error.
+  functionContext(nt); // Error.
+  nullableFunctionContext(nt); // Error.
+}
+
+bar<T extends C>(C c, T t) {
+  functionContext(c); // Shouldn't result in a compile-time error.
+  nullableFunctionContext(c); // Shouldn't result in a compile-time error.
+  functionContext(t); // Shouldn't result in a compile-time error.
+  nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.outline.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.outline.expect
new file mode 100644
index 0000000..8f8831c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.outline.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  method call() → core::int
+    ;
+}
+static method functionContext(() → core::int f) → dynamic
+  ;
+static method nullableFunctionContext(() →? core::int f) → dynamic
+  ;
+static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic
+  ;
+static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
new file mode 100644
index 0000000..249b918
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+//   functionContext(null as C?); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+//   nullableFunctionContext(null as C?); // Error.
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+//   functionContext(c); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+//   nullableFunctionContext(c); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(nt); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(nt); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Shouldn't result in a compile-time error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call() → core::int
+    return 0;
+}
+static method functionContext(() → core::int f) → dynamic {}
+static method nullableFunctionContext(() →? core::int f) → dynamic {}
+static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
+  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(null as C?); // Error.
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(null as C?); // Error.
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(c); // Error.
+                  ^" in c as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(c); // Error.
+                          ^" in c as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  functionContext(nt); // Error.
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(nt); // Error.
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
+  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Shouldn't result in a compile-time error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
new file mode 100644
index 0000000..249b918
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+//   functionContext(null as C?); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+//   nullableFunctionContext(null as C?); // Error.
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+//   functionContext(c); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+//   nullableFunctionContext(c); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(nt); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(nt); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Shouldn't result in a compile-time error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call() → core::int
+    return 0;
+}
+static method functionContext(() → core::int f) → dynamic {}
+static method nullableFunctionContext(() →? core::int f) → dynamic {}
+static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
+  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(null as C?); // Error.
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(null as C?); // Error.
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(c); // Error.
+                  ^" in c as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(c); // Error.
+                          ^" in c as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  functionContext(nt); // Error.
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(nt); // Error.
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
+  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Shouldn't result in a compile-time error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
new file mode 100644
index 0000000..c9f6d6a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Warning: Tearing off method 'call' from a potentially null value.
+//   functionContext(null as C?); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Warning: Tearing off method 'call' from a potentially null value.
+//   nullableFunctionContext(null as C?); // Error.
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Warning: Tearing off method 'call' from a potentially null value.
+//   functionContext(c); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Warning: Tearing off method 'call' from a potentially null value.
+//   nullableFunctionContext(c); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(nt); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(nt); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Shouldn't result in a compile-time error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call() → core::int
+    return 0;
+}
+static method functionContext(() → core::int f) → dynamic {}
+static method nullableFunctionContext(() →? core::int f) → dynamic {}
+static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
+  self::functionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(c as{TypeError} () → core::int);
+  self::nullableFunctionContext(c as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  functionContext(nt); // Error.
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(nt); // Error.
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
+  self::functionContext(let final self::C #t5 = c in #t5.==(null) ?{() → core::int} null : #t5.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t6 = c in #t6.==(null) ?{() → core::int} null : #t6.{self::C::call});
+  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Shouldn't result in a compile-time error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
new file mode 100644
index 0000000..c9f6d6a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Warning: Tearing off method 'call' from a potentially null value.
+//   functionContext(null as C?); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Warning: Tearing off method 'call' from a potentially null value.
+//   nullableFunctionContext(null as C?); // Error.
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Warning: Tearing off method 'call' from a potentially null value.
+//   functionContext(c); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Warning: Tearing off method 'call' from a potentially null value.
+//   nullableFunctionContext(c); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(nt); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(nt); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Shouldn't result in a compile-time error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call() → core::int
+    return 0;
+}
+static method functionContext(() → core::int f) → dynamic {}
+static method nullableFunctionContext(() →? core::int f) → dynamic {}
+static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
+  self::functionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(c as{TypeError} () → core::int);
+  self::nullableFunctionContext(c as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  functionContext(nt); // Error.
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(nt); // Error.
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
+  self::functionContext(let final self::C #t5 = c in #t5.==(null) ?{() → core::int} null : #t5.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t6 = c in #t6.==(null) ?{() → core::int} null : #t6.{self::C::call});
+  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Shouldn't result in a compile-time error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
index 249511a..3181c17 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
index d0abe78..40aaf93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return "bar";
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
index d0abe78..40aaf93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return "bar";
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
index d24cfba..f84f93d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
index e95119b..1f2525d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
@@ -17,7 +17,7 @@
     return null;
   }
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
index 8e06be7..da816df 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
     return null;
   }
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
index d228612..300cb94 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
@@ -33,7 +33,7 @@
   synthetic constructor •() → self::E*
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
index 928ca75..b85a18a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
@@ -37,7 +37,7 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
index 928ca75..b85a18a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
index a96d89a..fc853fa 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
index 2291f79..375d95c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return <dynamic>[];
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
index 2291f79..375d95c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return <dynamic>[];
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
index 2ad76c7..3adb9f5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
@@ -19,7 +19,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B = self::A with self::B {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
index 80a80e1..ad2597a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
@@ -21,7 +21,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return null;
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B = self::A with self::B {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
index 29e5abb..23455fe 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return null;
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B extends self::A implements self::B {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect
index 235d557..d3a6abd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect
@@ -14,9 +14,9 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo({core::String* bar}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#bar: bar}))) as{TypeError} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#bar: bar}))) as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#hest, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#hest, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
index 860c12b..c1ba2a7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
@@ -24,9 +24,9 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
index 860c12b..c1ba2a7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
@@ -24,9 +24,9 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
index d332188..6983d47 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
index ab2e7eb..64693b8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
@@ -26,7 +26,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
index daf083f..fe3fabb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 9df9418..8875144 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -6,6 +6,7 @@
 general/bug30695: TypeCheckError
 general/bug30695: TypeCheckError
 general/ignore_function: TypeCheckError
+general/invalid_operator: TypeCheckError
 general/mixin_application_override: TypeCheckError
 general/override_check_accessor_after_inference: TypeCheckError
 general/override_check_accessor_basic: TypeCheckError
@@ -14,7 +15,6 @@
 general/override_check_basic: TypeCheckError
 general/override_check_with_covariant_modifier: TypeCheckError
 general/override_setter_with_field: TypeCheckError
-general/with_dependencies/variance_from_dill/variance_from_dill: Crash
 
 general_nnbd_opt_out/abstract_members: TypeCheckError
 general_nnbd_opt_out/bug30695: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect
index ee3a0ca..f7d1185 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect
@@ -18,7 +18,7 @@
   dynamic n;
   for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
     n = #t1;
-    f = f.{core::num::*}(n as{TypeError} core::num*) as{TypeError} core::int*;
+    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
   }
   return f;
 }
@@ -26,7 +26,7 @@
   core::int* f = 1;
   for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
     self::global = #t2;
-    f = f.{core::num::*}(self::global as{TypeError} core::num*) as{TypeError} core::int*;
+    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
   }
   return f;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
index 024a770..b962902 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
       final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
       {
         n = #t1;
-        f = f.{core::num::*}(n as{TypeError} core::num*) as{TypeError} core::int*;
+        f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
       }
     }
   }
@@ -43,7 +43,7 @@
       final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
       {
         self::global = #t2;
-        f = f.{core::num::*}(self::global as{TypeError} core::num*) as{TypeError} core::int*;
+        f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
       }
     }
   }
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
index c501ddc..9c3fa75 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
@@ -80,12 +80,12 @@
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" as{TypeError} self::C*;
+                             ^" as{TypeError,ForDynamic} self::C*;
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
 a b(c) = d;
-         ^" as{TypeError} invalid-type;
+         ^" as{TypeError,ForDynamic} invalid-type;
 static method main() → dynamic {
   self::C* c = null;
   core::print(#C1);
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
index 54451d2..e576061 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
@@ -80,12 +80,12 @@
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" as{TypeError} self::C*;
+                             ^" as{TypeError,ForDynamic} self::C*;
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
 a b(c) = d;
-         ^" as{TypeError} invalid-type;
+         ^" as{TypeError,ForDynamic} invalid-type;
 static method main() → dynamic {
   self::C* c = null;
   core::print(#C1);
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect b/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect
index d620e90..13f78fd 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect
@@ -23,11 +23,11 @@
 static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
   if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-      ^" as{TypeError} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+      ^" as{TypeError,ForDynamic} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-        ^") as{TypeError} core::bool*)
-    return b as{TypeError} core::int*;
-  return a.+(b).+(c) as{TypeError} core::int*;
+        ^") as{TypeError,ForDynamic} core::bool*)
+    return b as{TypeError,ForDynamic} core::int*;
+  return a.+(b).+(c) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect
index d620e90..13f78fd 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect
@@ -23,11 +23,11 @@
 static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
   if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-      ^" as{TypeError} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+      ^" as{TypeError,ForDynamic} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-        ^") as{TypeError} core::bool*)
-    return b as{TypeError} core::int*;
-  return a.+(b).+(c) as{TypeError} core::int*;
+        ^") as{TypeError,ForDynamic} core::bool*)
+    return b as{TypeError,ForDynamic} core::int*;
+  return a.+(b).+(c) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect
index c41f760..4b6f9c8 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect
@@ -91,7 +91,7 @@
     : super core::Object::•()
     ;
   method it1(dynamic x) → dynamic {
-    for (final dynamic #t1 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t1 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
@@ -103,13 +103,13 @@
       print(key);
             ^^^");
     }
-    for (final dynamic #t2 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t2 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Setter not found: 'Fisk'.
     for (Fisk in x) {
          ^^^^";
       core::print(self::Fisk*);
     }
-    for (final dynamic #t3 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t3 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
     for (collection in x) {
          ^^^^^^^^^^";
@@ -117,7 +117,7 @@
       print(collection);
             ^^^^^^^^^^");
     }
-    for (final dynamic #t4 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t4 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Setter not found: 'VoidFunction'.
     for (VoidFunction in x) {
          ^^^^^^^^^^^^";
@@ -127,7 +127,7 @@
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
-      for (final dynamic #t5 in x as{TypeError} core::Iterable<dynamic>*) {
+      for (final dynamic #t5 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
@@ -143,7 +143,7 @@
 }
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
-  for (final dynamic #t6 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t6 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
   for (key in arguments) {
        ^^^";
@@ -151,13 +151,13 @@
     print(key);
           ^^^");
   }
-  for (final dynamic #t7 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t7 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Setter not found: 'Fisk'.
   for (Fisk in arguments) {
        ^^^^";
     core::print(self::Fisk*);
   }
-  for (final dynamic #t8 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t8 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
   for (collection in arguments) {
        ^^^^^^^^^^";
@@ -165,7 +165,7 @@
     print(collection);
           ^^^^^^^^^^");
   }
-  for (final dynamic #t9 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t9 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Setter not found: 'VoidFunction'.
   for (VoidFunction in arguments) {
        ^^^^^^^^^^^^";
@@ -175,7 +175,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
-    for (final dynamic #t10 in arguments as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t10 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
index e5f407f..1cc912e 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
@@ -93,7 +93,7 @@
     ;
   method it1(dynamic x) → dynamic {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -111,7 +111,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -123,7 +123,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -137,7 +137,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -153,7 +153,7 @@
     for (1 in x) {
          ^";
       {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
           {
@@ -175,7 +175,7 @@
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -189,7 +189,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -201,7 +201,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -215,7 +215,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -231,7 +231,7 @@
   for (1 in arguments) {
        ^";
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index 4b691f5..7ababc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -21,7 +21,7 @@
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
   for (int i = i;; false) {}
-               ^") as{TypeError} core::int*; ; false) {
+               ^") as{TypeError,ForDynamic} core::int*; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
index 4b691f5..7ababc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
   for (int i = i;; false) {}
-               ^") as{TypeError} core::int*; ; false) {
+               ^") as{TypeError,ForDynamic} core::int*; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index ffc6739..ed5c611 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -23,9 +23,9 @@
 static method bad() → dynamic {
   for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
-                  ^" as{TypeError} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
+                  ^" as{TypeError,ForDynamic} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^".>(10) as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+                    ^".>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect
index ffc6739..ed5c611 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect
@@ -23,9 +23,9 @@
 static method bad() → dynamic {
   for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
-                  ^" as{TypeError} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
+                  ^" as{TypeError,ForDynamic} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^".>(10) as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+                    ^".>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
index 4723bc6..b100603 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
@@ -25,7 +25,7 @@
 static method test2() → core::int* {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   self::i;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
index 4723bc6..b100603 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
 static method test2() → core::int* {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   self::i;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
index 57ea785..5874008 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
@@ -34,6 +34,6 @@
  - 'Type' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
 type T = Map<A, B>
-            ^" as{TypeError} invalid-type;
+            ^" as{TypeError,ForDynamic} invalid-type;
 static field invalid-type B;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
index 57ea785..5874008 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
@@ -34,6 +34,6 @@
  - 'Type' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
 type T = Map<A, B>
-            ^" as{TypeError} invalid-type;
+            ^" as{TypeError,ForDynamic} invalid-type;
 static field invalid-type B;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
index d7c940a..555c1a6 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
@@ -29,5 +29,5 @@
 static method main() → dynamic {
   self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
-            ^" as{TypeError} self::X*;
+            ^" as{TypeError,ForDynamic} self::X*;
 }
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
index a5bb9cf..a6de672 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
@@ -29,5 +29,5 @@
 static method main() → dynamic {
   self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
-            ^" as{TypeError} self::X*;
+            ^" as{TypeError,ForDynamic} self::X*;
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect b/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect
index 3166bc2..0ea7212 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect
@@ -26,13 +26,13 @@
   function f_async_star() → core::int* async* {
     yield 42;
   }
-  await for (dynamic x in (f_async_star.call() as dynamic) as{TypeError} asy::Stream<dynamic>*) {
+  await for (dynamic x in (f_async_star.call() as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
     core::print(x);
   }
   function f_sync_star() → core::int* sync* {
     yield 42;
   }
-  for (dynamic x in (f_sync_star.call() as dynamic) as{TypeError} core::Iterable<dynamic>*) {
+  for (dynamic x in (f_sync_star.call() as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     core::print(x);
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
index 12c970e..79ba707 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
@@ -100,7 +100,7 @@
           return :controller_stream;
         }
         {
-          dynamic :stream = (f_async_star.call() as dynamic) as{TypeError} asy::Stream<dynamic>*;
+          dynamic :stream = (f_async_star.call() as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
@@ -138,7 +138,7 @@
           return new core::_SyncIterable::•<dynamic>(:sync_op);
         }
         {
-          core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((f_sync_star.call() as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+          core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((f_sync_star.call() as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             dynamic x = :sync-for-iterator.{core::Iterator::current};
             {
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
index af9bd50..a71b9df 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
index af9bd50..a71b9df 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
index 81ef72b..c3985a6 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
index 81ef72b..c3985a6 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
index 75a8771..55f630b 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
index 75a8771..55f630b 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
index c0b0076..cbf825e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
@@ -13,7 +13,7 @@
     return this.{self::C::_x};
 }
 static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f} as{TypeError} () →* (core::num*) →* void;
+  return c.{self::C::f} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
 }
 static method h(core::int* i) → void {
   core::print("${i}");
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
index c0b0076..cbf825e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
     return this.{self::C::_x};
 }
 static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f} as{TypeError} () →* (core::num*) →* void;
+  return c.{self::C::f} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
 }
 static method h(core::int* i) → void {
   core::print("${i}");
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
index 4fe5da3..6014e7af 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (c.{self::C::y} as{TypeError} (core::num*) →* void).call(1.5);
+  (c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void).call(1.5);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
index 4fe5da3..6014e7af 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (c.{self::C::y} as{TypeError} (core::num*) →* void).call(1.5);
+  (c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void).call(1.5);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
index 30b8696..77f902d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
index 30b8696..77f902d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
index 2e4bee0..974091e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
index 2e4bee0..974091e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
index 023e6058..61cd6f8e1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
@@ -32,7 +32,7 @@
   method f(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
   x.call("hi");
   new self::E::•().{self::C::g1}(1.5);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
index 023e6058..61cd6f8e1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
   method f(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
   x.call("hi");
   new self::E::•().{self::C::g1}(1.5);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
index 873a975..55cc7d2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
@@ -21,19 +21,19 @@
   operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
 }
 static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  b = b.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*);
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*);
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
 }
 static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  self::C::y = self::C::y.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
index 873a975..55cc7d2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
@@ -21,19 +21,19 @@
   operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
 }
 static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  b = b.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*);
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*);
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
 }
 static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  self::C::y = self::C::y.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index 1a716ef..d6df34f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -54,13 +54,13 @@
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
   let final self::D* #t1 = d in #t1.{self::D::value} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → core::Null? {
     let final self::D* #t3 = d in #t3.{self::D::value} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
index 1a716ef..d6df34f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
@@ -54,13 +54,13 @@
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
   let final self::D* #t1 = d in #t1.{self::D::value} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → core::Null? {
     let final self::D* #t3 = d in #t3.{self::D::value} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 8060719..2d0bf7f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -42,19 +42,19 @@
   set x(self::B<(self::C::T*) →* void>* value) → void {}
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                               ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
index 8060719..2d0bf7f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
@@ -42,19 +42,19 @@
   set x(self::B<(self::C::T*) →* void>* value) → void {}
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                               ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
index 41e53d1..a93c374 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
@@ -20,9 +20,9 @@
 }
 static method test(self::C<core::num*>* c) → void {
   c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>());
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
index 41e53d1..a93c374 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
@@ -20,9 +20,9 @@
 }
 static method test(self::C<core::num*>* c) → void {
   c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>());
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
index a351f22..28a5438 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
@@ -11,6 +11,6 @@
     return null;
 }
 static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0) as{TypeError} (core::num*) →* void;
+  return c.{self::C::[]}(0) as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
index a351f22..28a5438 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
@@ -11,6 +11,6 @@
     return null;
 }
 static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0) as{TypeError} (core::num*) →* void;
+  return c.{self::C::[]}(0) as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index f05fdc6..743737c 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -37,6 +37,7 @@
 general/ignore_function: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/invalid_type: TypeCheckError
+general/invalid_operator: TypeCheckError
 general/invocations: RuntimeError
 general/issue34899: TypeCheckError
 general/issue37776: RuntimeError
@@ -65,7 +66,6 @@
 general/unsound_promotion: TypeCheckError
 general/void_methods: RuntimeError
 general/warn_unresolved_sends: InstrumentationMismatch # Test assumes Dart 1.0 semantics
-general/with_dependencies/variance_from_dill/variance_from_dill: Crash
 general_nnbd_opt_out/abstract_members: TypeCheckError
 general_nnbd_opt_out/accessors: RuntimeError
 general_nnbd_opt_out/ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index efca1d2..57367c1 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -207,6 +207,8 @@
 general/interface_covariantInterface_from_class: TextSerializationFailure
 general/invalid_assignment: TextSerializationFailure # Was: Pass
 general/invalid_cast: TextSerializationFailure # Was: Pass
+general/invalid_operator: TypeCheckError
+general/invalid_operator2: TextSerializationFailure
 general/invalid_type: TypeCheckError
 general/invocations: TextSerializationFailure # Was: RuntimeError
 general/issue129167943: TextSerializationFailure
@@ -281,6 +283,7 @@
 general/part_part_of_different_unnamed_library: TextSerializationFailure
 general/part_part_of_differently_named_library: TextSerializationFailure
 general/platform: TextSerializationFailure
+general/platform_invalid_uris/main: TextSerializationFailure
 general/prefer_baseclass: TextSerializationFailure # Was: Pass
 general/private_method_tearoff: TextSerializationFailure # Was: Pass
 general/private_method_tearoff_lib: TextSerializationFailure # Was: Pass
@@ -336,7 +339,8 @@
 general/var_as_type_name: TextSerializationFailure # Was: Pass
 general/void_methods: TextSerializationFailure
 general/warn_unresolved_sends: InstrumentationMismatch # Test assumes Dart 1.0 semantics
-general/with_dependencies/variance_from_dill/variance_from_dill: Crash
+general/with_dependencies/extension_from_dill/extension_from_dill: TextSerializationFailure
+general/with_dependencies/variance_from_dill/variance_from_dill: TextSerializationFailure
 general_nnbd_opt_out/DeltaBlue: TextSerializationFailure # Was: Pass
 general_nnbd_opt_out/abstract_members: TypeCheckError
 general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method: TextSerializationFailure
@@ -1199,6 +1203,7 @@
 late_lowering/override: TextSerializationFailure
 late_lowering/return_late: TextSerializationFailure
 new_const_insertion/simple: TextSerializationFailure # Was: Pass
+nnbd/assign_type_variable: TextSerializationFailure
 nnbd/assignability: TextSerializationFailure
 nnbd/call: TextSerializationFailure
 nnbd/definite_assignment_and_completion: TextSerializationFailure
@@ -1241,6 +1246,7 @@
 nnbd/nullable_param: TextSerializationFailure
 nnbd/nullable_receiver: TextSerializationFailure
 nnbd/opt_out: TextSerializationFailure
+nnbd/platform_optional_parameters/main: TextSerializationFailure
 nnbd/potentially_non_nullable_field: TextSerializationFailure
 nnbd/regress_null_aware: TextSerializationFailure
 nnbd/required: TextSerializationFailure
@@ -1251,6 +1257,7 @@
 nnbd/sink_hierarchy: TextSerializationFailure
 nnbd/strictly_non_nullable_warnings: TextSerializationFailure
 nnbd/substitution_in_inference: TextSerializationFailure
+nnbd/tearoff_from_nullable_receiver: TextSerializationFailure
 nnbd/type_parameter_types: TextSerializationFailure
 no_such_method_forwarders/abstract_accessors_from_field: TextSerializationFailure # Was: Pass
 no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in: TextSerializationFailure # Was: Pass
@@ -1515,6 +1522,7 @@
 runtime_checks_new/stub_from_interface_covariant_from_interface: TextSerializationFailure # Was: Pass
 runtime_checks_new/stub_from_interface_covariant_from_super: TextSerializationFailure # Was: Pass
 set_literals/disambiguation_rule: TextSerializationFailure # Was: RuntimeError
+triple_shift/invalid_operator: TextSerializationFailure
 top_level_variance_test: TextSerializationFailure
 unified_collections/mixed_entries: TextSerializationFailure
 unified_collections/string_concatenation: TextSerializationFailure
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart b/pkg/front_end/testcases/triple_shift/invalid_operator.dart
new file mode 100644
index 0000000..97cbba7
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Operators1 {
+  operator >>>() => true;
+}
+
+class Operators2 {
+  operator >>>(a, b) => true;
+}
+
+class Operators3 {
+  operator >>>([a]) => true;
+}
+
+class Operators4 {
+  operator >>>({a}) => true;
+}
+
+class Operators5 {
+  operator >>>(a, [b]) => true;
+}
+
+class Operators6 {
+  operator >>>(a, {b}) => true;
+}
+
+class Operators7 {
+  operator >>><T>(a) => true;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.outline.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.outline.expect
new file mode 100644
index 0000000..f27ac1c
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.outline.expect
@@ -0,0 +1,80 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:6:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>() => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:10:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, b) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:14:17: Error: An operator can't have optional parameters.
+//   operator >>>([a]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:18:17: Error: An operator can't have optional parameters.
+//   operator >>>({a}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:22:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, [b]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:26:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, {b}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >>><T>(a) => true;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    ;
+  operator >>>() → dynamic
+    ;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    ;
+  operator >>>(dynamic a, dynamic b) → dynamic
+    ;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    ;
+  operator >>>([dynamic a]) → dynamic
+    ;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    ;
+  operator >>>({dynamic a}) → dynamic
+    ;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    ;
+  operator >>>(dynamic a, [dynamic b]) → dynamic
+    ;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    ;
+  operator >>>(dynamic a, {dynamic b}) → dynamic
+    ;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    ;
+  operator >>><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect
new file mode 100644
index 0000000..a8d5e4d
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:6:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>() => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:10:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, b) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:14:17: Error: An operator can't have optional parameters.
+//   operator >>>([a]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:18:17: Error: An operator can't have optional parameters.
+//   operator >>>({a}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:22:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, [b]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:26:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, {b}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >>><T>(a) => true;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    : super core::Object::•()
+    ;
+  operator >>>() → dynamic
+    return true;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, dynamic b) → dynamic
+    return true;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    : super core::Object::•()
+    ;
+  operator >>>([dynamic a = #C1]) → dynamic
+    return true;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    : super core::Object::•()
+    ;
+  operator >>>({dynamic a = #C1}) → dynamic
+    return true;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator >>><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect
new file mode 100644
index 0000000..a8d5e4d
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:6:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>() => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:10:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, b) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:14:17: Error: An operator can't have optional parameters.
+//   operator >>>([a]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:18:17: Error: An operator can't have optional parameters.
+//   operator >>>({a}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:22:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, [b]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:26:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, {b}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >>><T>(a) => true;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    : super core::Object::•()
+    ;
+  operator >>>() → dynamic
+    return true;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, dynamic b) → dynamic
+    return true;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    : super core::Object::•()
+    ;
+  operator >>>([dynamic a = #C1]) → dynamic
+    return true;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    : super core::Object::•()
+    ;
+  operator >>>({dynamic a = #C1}) → dynamic
+    return true;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator >>><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.expect
new file mode 100644
index 0000000..a8d5e4d
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:6:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>() => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:10:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, b) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:14:17: Error: An operator can't have optional parameters.
+//   operator >>>([a]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:18:17: Error: An operator can't have optional parameters.
+//   operator >>>({a}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:22:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, [b]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:26:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, {b}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >>><T>(a) => true;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    : super core::Object::•()
+    ;
+  operator >>>() → dynamic
+    return true;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, dynamic b) → dynamic
+    return true;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    : super core::Object::•()
+    ;
+  operator >>>([dynamic a = #C1]) → dynamic
+    return true;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    : super core::Object::•()
+    ;
+  operator >>>({dynamic a = #C1}) → dynamic
+    return true;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator >>><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.transformed.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.transformed.expect
new file mode 100644
index 0000000..a8d5e4d
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.transformed.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:6:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>() => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:10:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, b) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:14:17: Error: An operator can't have optional parameters.
+//   operator >>>([a]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:18:17: Error: An operator can't have optional parameters.
+//   operator >>>({a}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:22:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, [b]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:26:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, {b}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >>><T>(a) => true;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    : super core::Object::•()
+    ;
+  operator >>>() → dynamic
+    return true;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, dynamic b) → dynamic
+    return true;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    : super core::Object::•()
+    ;
+  operator >>>([dynamic a = #C1]) → dynamic
+    return true;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    : super core::Object::•()
+    ;
+  operator >>>({dynamic a = #C1}) → dynamic
+    return true;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator >>><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/triple_shift/test.options b/pkg/front_end/testcases/triple_shift/test.options
new file mode 100644
index 0000000..55774c6
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/test.options
@@ -0,0 +1 @@
+--enable-experiment=triple-shift
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect
index 7d0b0e0..0014b22 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect
@@ -73,9 +73,9 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder get x() → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder method method(self::NoSuchMethod::T* x) → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder set y(self::NoSuchMethod::T* x) → void
     return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#y=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set x(self::NoSuchMethod::T* value) → void
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect
index fa18fb9..e28e55a 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect
@@ -77,9 +77,9 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return 3;
   no-such-method-forwarder get x() → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder method method(self::NoSuchMethod::T* x) → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder set y(self::NoSuchMethod::T* x) → void
     return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
   no-such-method-forwarder set x(self::NoSuchMethod::T* value) → void
@@ -91,10 +91,10 @@
   a.{self::A::method}(3, (core::num* num) → core::Null? {}, "test");
   a.{self::A::method2}(3);
   a.{self::A::x} = 3;
-  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError} core::Map<core::num*, self::Contravariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError} core::Map<core::num*, (core::String*) →* void>*;
-  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError} core::Map<core::num*, self::Invariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError} core::Map<core::num*, (core::String*) →* core::String*>*;
+  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Contravariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* void>*;
+  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Invariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* core::String*>*;
   self::B<core::int*>* b = new self::B::•<core::int*>();
   b.{self::B::x} = 3;
   self::expect(3, b.{self::B::x});
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect
index fa18fb9..e28e55a 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect
@@ -77,9 +77,9 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return 3;
   no-such-method-forwarder get x() → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder method method(self::NoSuchMethod::T* x) → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder set y(self::NoSuchMethod::T* x) → void
     return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
   no-such-method-forwarder set x(self::NoSuchMethod::T* value) → void
@@ -91,10 +91,10 @@
   a.{self::A::method}(3, (core::num* num) → core::Null? {}, "test");
   a.{self::A::method2}(3);
   a.{self::A::x} = 3;
-  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError} core::Map<core::num*, self::Contravariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError} core::Map<core::num*, (core::String*) →* void>*;
-  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError} core::Map<core::num*, self::Invariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError} core::Map<core::num*, (core::String*) →* core::String*>*;
+  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Contravariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* void>*;
+  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Invariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* core::String*>*;
   self::B<core::int*>* b = new self::B::•<core::int*>();
   b.{self::B::x} = 3;
   self::expect(3, b.{self::B::x});
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index afa117c..5032126 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -284,8 +284,6 @@
         "test/fasta/super_mixins_test\\.dart$",
         "test/fasta/types/subtypes_benchmark\\.dart$",
         "test/fasta/unlinked_scope_test\\.dart$",
-        "test/incremental_load_from_dill_suite\\.dart$",
-        "test/incremental_load_from_invalid_dill_test\\.dart$",
         "test/memory_file_system_test\\.dart$",
         "test/scanner_fasta_test\\.dart$",
         "test/scanner_test\\.dart$",
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 12f3b1f..6c70435 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -143,7 +143,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 37;
+  UInt32 formatVersion = 38;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
   UriSource sourceMap;
@@ -776,6 +776,7 @@
 type IsExpression extends Expression {
   Byte tag = 37;
   FileOffset fileOffset;
+  Byte flags (isForNonNullableByDefault);
   Expression operand;
   DartType type;
 }
@@ -783,7 +784,7 @@
 type AsExpression extends Expression {
   Byte tag = 38;
   FileOffset fileOffset;
-  Byte flags (isTypeError);
+  Byte flags (isTypeError,isCovarianceCheck,isForDynamic,isForNonNullableByDefault);
   Expression operand;
   DartType type;
 }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 2e89ba6..1b452d2 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -3952,6 +3952,7 @@
 
 /// Expression of form `x is T`.
 class IsExpression extends Expression {
+  int flags = 0;
   Expression operand;
   DartType type;
 
@@ -3959,6 +3960,22 @@
     operand?.parent = this;
   }
 
+  // Must match serialized bit positions.
+  static const int FlagForNonNullableByDefault = 1 << 0;
+
+  /// If `true`, this test take the nullability of [type] into account.
+  ///
+  /// This is the case for is-tests written in libraries that are opted in to
+  /// the non nullable by default feature.
+  bool get isForNonNullableByDefault =>
+      flags & FlagForNonNullableByDefault != 0;
+
+  void set isForNonNullableByDefault(bool value) {
+    flags = value
+        ? (flags | FlagForNonNullableByDefault)
+        : (flags & ~FlagForNonNullableByDefault);
+  }
+
   DartType getStaticType(StaticTypeContext context) =>
       context.typeEnvironment.coreTypes.boolRawType(context.nonNullable);
 
@@ -3992,17 +4009,66 @@
 
   // Must match serialized bit positions.
   static const int FlagTypeError = 1 << 0;
+  static const int FlagCovarianceCheck = 1 << 1;
+  static const int FlagForDynamic = 1 << 2;
+  static const int FlagForNonNullableByDefault = 1 << 3;
 
-  /// Indicates the type of error that should be thrown if the check fails.
+  /// If `true`, this test is an implicit down cast.
   ///
-  /// `true` means that a TypeError should be thrown.  `false` means that a
-  /// CastError should be thrown.
+  /// If `true` a TypeError should be thrown. If `false` a CastError should be
+  /// thrown.
   bool get isTypeError => flags & FlagTypeError != 0;
 
   void set isTypeError(bool value) {
     flags = value ? (flags | FlagTypeError) : (flags & ~FlagTypeError);
   }
 
+  /// If `true`, this test is needed to ensure soundness of covariant type
+  /// variables using in contravariant positions.
+  ///
+  /// For instance
+  ///
+  ///    class Class<T> {
+  ///      void Function(T) field;
+  ///      Class(this.field);
+  ///    }
+  ///    main() {
+  ///      Class<num> c = new Class<int>((int i) {});
+  ///      void Function<num> field = c.field; // Check needed on `c.field`
+  ///      field(0.5);
+  ///    }
+  ///
+  /// Here a covariant check `c.field as void Function(num)` is needed because
+  /// the field could be (and indeed is) not a subtype of the static type of
+  /// the expression.
+  bool get isCovarianceCheck => flags & FlagCovarianceCheck != 0;
+
+  void set isCovarianceCheck(bool value) {
+    flags =
+        value ? (flags | FlagCovarianceCheck) : (flags & ~FlagCovarianceCheck);
+  }
+
+  /// If `true`, this is an implicit down cast from an expression of type
+  /// `dynamic`.
+  bool get isForDynamic => flags & FlagForDynamic != 0;
+
+  void set isForDynamic(bool value) {
+    flags = value ? (flags | FlagForDynamic) : (flags & ~FlagForDynamic);
+  }
+
+  /// If `true`, this test take the nullability of [type] into account.
+  ///
+  /// This is the case for is-tests written in libraries that are opted in to
+  /// the non nullable by default feature.
+  bool get isForNonNullableByDefault =>
+      flags & FlagForNonNullableByDefault != 0;
+
+  void set isForNonNullableByDefault(bool value) {
+    flags = value
+        ? (flags | FlagForNonNullableByDefault)
+        : (flags & ~FlagForNonNullableByDefault);
+  }
+
   DartType getStaticType(StaticTypeContext context) => type;
 
   R accept<R>(ExpressionVisitor<R> v) => v.visitAsExpression(this);
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 4604782..aabfcf0 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1726,8 +1726,10 @@
           ..fileOffset = offset;
       case Tag.IsExpression:
         int offset = readOffset();
+        int flags = readByte();
         return new IsExpression(readExpression(), readDartType())
-          ..fileOffset = offset;
+          ..fileOffset = offset
+          ..flags = flags;
       case Tag.AsExpression:
         int offset = readOffset();
         int flags = readByte();
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 92ef6e8..3df06ad 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1597,6 +1597,7 @@
   void visitIsExpression(IsExpression node) {
     writeByte(Tag.IsExpression);
     writeOffset(node.fileOffset);
+    writeByte(node.flags);
     writeNode(node.operand);
     writeNode(node.type);
   }
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 9ed4051..f45810b 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -149,7 +149,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 37;
+  static const int BinaryFormatVersion = 38;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index 977cd45..717f0a5 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -36,6 +36,8 @@
       .._initialize(component.libraries);
   }
 
+  void set coreTypes(CoreTypes coreTypes);
+
   void set onAmbiguousSupertypes(
       HandleAmbiguousSupertypes onAmbiguousSupertypes);
 
@@ -427,7 +429,7 @@
 
 /// Implementation of [ClassHierarchy] for closed world.
 class ClosedWorldClassHierarchy implements ClassHierarchy {
-  final CoreTypes coreTypes;
+  CoreTypes coreTypes;
   HandleAmbiguousSupertypes _onAmbiguousSupertypes;
   HandleAmbiguousSupertypes _onAmbiguousSupertypesNotWrapped;
   MixinInferrer mixinInferrer;
@@ -451,6 +453,14 @@
   final Map<Class, _ClassInfo> _infoMap =
       new LinkedHashMap<Class, _ClassInfo>();
 
+  List<ForTestingClassInfo> getTestingClassInfo() {
+    List<ForTestingClassInfo> result = new List<ForTestingClassInfo>();
+    for (_ClassInfo info in _infoMap.values) {
+      result.add(new ForTestingClassInfo._(info));
+    }
+    return result;
+  }
+
   _ClassInfo infoFor(Class c) {
     _ClassInfo info = _infoMap[c];
     info?.used = true;
@@ -797,8 +807,13 @@
         if (class_.mixedInType != null) {
           _infoMap[class_.mixedInType.classNode]?.directMixers?.remove(info);
         }
-        for (var supertype in class_.implementedTypes) {
+        for (Supertype supertype in class_.implementedTypes) {
           _infoMap[supertype.classNode]?.directImplementers?.remove(info);
+          // Remove from directMixers too as the mixin transformation will
+          // "move" the type here.
+          if (class_.isAnonymousMixin || class_.isEliminatedMixin) {
+            _infoMap[supertype.classNode]?.directMixers?.remove(info);
+          }
         }
 
         _infoMap.remove(class_);
@@ -914,6 +929,24 @@
         throw new StateError("Didn't know library of $c (from ${c.fileUri})");
       }
     }
+
+    for (_ClassInfo info in _infoMap.values) {
+      for (_ClassInfo subInfo in info.directExtenders) {
+        if (!_infoMap.containsKey(subInfo.classNode))
+          throw new StateError(
+              "Found $subInfo (${subInfo.classNode}) in directExtenders");
+      }
+      for (_ClassInfo subInfo in info.directMixers) {
+        if (!_infoMap.containsKey(subInfo.classNode))
+          throw new StateError(
+              "Found $subInfo (${subInfo.classNode}) in directMixers");
+      }
+      for (_ClassInfo subInfo in info.directImplementers) {
+        if (!_infoMap.containsKey(subInfo.classNode))
+          throw new StateError(
+              "Found $subInfo (${subInfo.classNode}) in directImplementers");
+      }
+    }
     return true;
   }
 
@@ -1444,6 +1477,25 @@
   return size;
 }
 
+class ForTestingClassInfo {
+  final Class classNode;
+  final List<Member> lazyDeclaredGettersAndCalls;
+  final List<Member> lazyDeclaredSetters;
+  final List<Member> lazyImplementedGettersAndCalls;
+  final List<Member> lazyImplementedSetters;
+  final List<Member> lazyInterfaceGettersAndCalls;
+  final List<Member> lazyInterfaceSetters;
+
+  ForTestingClassInfo._(_ClassInfo c)
+      : classNode = c.classNode,
+        lazyDeclaredGettersAndCalls = c.lazyDeclaredGettersAndCalls,
+        lazyDeclaredSetters = c.lazyDeclaredSetters,
+        lazyImplementedGettersAndCalls = c.lazyImplementedGettersAndCalls,
+        lazyImplementedSetters = c.lazyImplementedSetters,
+        lazyInterfaceGettersAndCalls = c.lazyInterfaceGettersAndCalls,
+        lazyInterfaceSetters = c.lazyInterfaceSetters;
+}
+
 class _ClassInfo {
   bool used = false;
   final Class classNode;
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 122f956..6b4328a 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -248,7 +248,8 @@
   }
 
   visitIsExpression(IsExpression node) {
-    return new IsExpression(clone(node.operand), visitType(node.type));
+    return new IsExpression(clone(node.operand), visitType(node.type))
+      ..flags = node.flags;
   }
 
   visitAsExpression(AsExpression node) {
diff --git a/pkg/kernel/lib/target/changed_structure_notifier.dart b/pkg/kernel/lib/target/changed_structure_notifier.dart
new file mode 100644
index 0000000..d18c7de
--- /dev/null
+++ b/pkg/kernel/lib/target/changed_structure_notifier.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/ast.dart' show Class;
+
+/// Meant for notifying the backend (the compiler) that the structure has
+/// changed, in turn allowing it to update its internal model.
+abstract class ChangedStructureNotifier {
+  /// Mark the class [c] as having changed in that its members have changed.
+  void forClass(Class c);
+}
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index ca12325..05519e6 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -7,6 +7,7 @@
 import '../class_hierarchy.dart';
 import '../core_types.dart';
 import '../reference_from_index.dart';
+import 'changed_structure_notifier.dart';
 
 final List<String> targetNames = targets.keys.toList();
 
@@ -159,7 +160,8 @@
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg)}) {}
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {}
 
   /// Perform target-specific modular transformations on the given libraries.
   void performModularTransformationsOnLibraries(
@@ -172,7 +174,8 @@
       Map<String, String> environmentDefines,
       DiagnosticReporter diagnosticReporter,
       ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg)});
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier});
 
   /// Perform target-specific modular transformations on the given program.
   ///
@@ -304,7 +307,8 @@
       Map<String, String> environmentDefines,
       DiagnosticReporter diagnosticReporter,
       ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg)}) {}
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {}
 
   @override
   Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 015b3b8..06bd220 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1442,13 +1442,27 @@
 
   visitIsExpression(IsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
-    writeSpaced('is');
+    writeSpaced(
+        node.isForNonNullableByDefault ? 'is{ForNonNullableByDefault}' : 'is');
     writeType(node.type);
   }
 
   visitAsExpression(AsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
-    writeSpaced(node.isTypeError ? 'as{TypeError}' : 'as');
+    List<String> flags = <String>[];
+    if (node.isTypeError) {
+      flags.add('TypeError');
+    }
+    if (node.isCovarianceCheck) {
+      flags.add('CovarianceCheck');
+    }
+    if (node.isForDynamic) {
+      flags.add('ForDynamic');
+    }
+    if (node.isForNonNullableByDefault) {
+      flags.add('ForNonNullableByDefault');
+    }
+    writeSpaced(flags.isNotEmpty ? 'as{${flags.join(',')}}' : 'as');
     writeType(node.type);
   }
 
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index b623e3c..beda680 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:nnbd_migration/nullability_state.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
 
 /// Information exposed to the migration client about the set of nullability
@@ -237,11 +236,6 @@
   /// Clear any data from the propagation step in preparation for that step
   /// being re-run.
   void prepareForUpdate();
-
-  /// Called whenever the migration engine performs a step in the propagation of
-  /// nullability information through the nullability graph, to report details
-  /// of the step that was performed and why.
-  void propagationStep(PropagationInfo info);
 }
 
 /// Information exposed to the migration client about a single node in the
@@ -271,65 +265,6 @@
   Iterable<EdgeInfo> get upstreamEdges;
 }
 
-/// Information exposed to the migration client about a single step in the
-/// nullability propagation algorithm, in which the nullability state of a
-/// single node was changed.
-abstract class PropagationInfo {
-  /// The edge that caused the nullability state of [node] to be set to
-  /// [newState], or `null` if the nullability state was changed for reasons
-  /// not associated with an edge.  Will be `null` when [reason] is
-  /// [StateChangeReason.substituteInner] or
-  /// [StateChangeReason.substituteOuter], non-null otherwise.
-  EdgeInfo get edge;
-
-  /// The new state that [node] was placed into.
-  NullabilityState get newState;
-
-  /// The nullability node whose state was changed.
-  NullabilityNodeInfo get node;
-
-  /// The reason the nullability node's state was changed.
-  StateChangeReason get reason;
-
-  /// The substitution node that caused the nullability state of [node] to be
-  /// set to [newState], or `null` if the nullability state was changed for
-  /// reasons not associated with a substitution node.  Will be non-null when
-  /// [reason] is [StateChangeReason.substituteInner] or
-  /// [StateChangeReason.substituteOuter], `null` otherwise.
-  SubstitutionNodeInfo get substitutionNode;
-}
-
-/// Enum representing the various reasons why a nullability node might change
-/// state during nullability propagation.
-enum StateChangeReason {
-  /// A union edge exists between this node and a node that is known a priori to
-  /// be nullable, so this node is being made nullable as well.
-  union,
-
-  /// A hard or union edge exists whose source is this node, and whose
-  /// destination is non-nullable, so this node is being made non-nullable as
-  /// well.
-  upstream,
-
-  /// An edge exists whose destination is this node, and whose source is
-  /// nullable, so this node is being made nullable as well.
-  downstream,
-
-  /// An edge exists whose source is this node, and whose destination is exact
-  /// nullable, so this node is being made exact nullable as well.
-  exactUpstream,
-
-  /// A substitution node exists whose inner node points to this node, and the
-  /// substitution node is nullable, so this node is being made nullable as
-  /// well.
-  substituteInner,
-
-  /// A substitution node exists whose outer node points to this node, and the
-  /// substitution node is nullable, so this node is being made nullable as
-  /// well.
-  substituteOuter,
-}
-
 /// Information exposed to the migration client about a node in the nullability
 /// graph resulting from a type substitution.
 abstract class SubstitutionNodeInfo extends NullabilityNodeInfo {
diff --git a/pkg/nnbd_migration/lib/nullability_state.dart b/pkg/nnbd_migration/lib/nullability_state.dart
index fdeda46..8e60367 100644
--- a/pkg/nnbd_migration/lib/nullability_state.dart
+++ b/pkg/nnbd_migration/lib/nullability_state.dart
@@ -2,22 +2,51 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// State of a nullability node.
-class NullabilityState {
-  /// State of a nullability node whose nullability hasn't been decided yet.
-  static const undetermined = NullabilityState._('undetermined', false);
+/// State representation used to determine whether a nullability node expresses
+/// non-null intent.
+class NonNullIntent {
+  /// State of a nullability node for which no non-null intent has been seen.
+  static const none = NonNullIntent._(false);
 
+  /// State of a nullability node for which indirect evidence of non-null intent
+  /// has been seen (e.g. an assertion or a use of a value in a non-null
+  /// context).
+  static const indirect = NonNullIntent._(true);
+
+  /// State of a nullability node for which direct evidence of non-null intent
+  /// has been seen (e.g. an explicit "/*!*/" on a type, or a non-nullable type
+  /// coming from a migrated library).
+  static const direct = NonNullIntent._(true, isDirect: true);
+
+  /// Indicates whether this state represents a determination that non-null
+  /// intent is present.
+  final bool isPresent;
+
+  /// Indicates whether this state represents a direct determination of non-null
+  /// intent (see [direct]).
+  final bool isDirect;
+
+  const NonNullIntent._(this.isPresent, {this.isDirect = false});
+
+  /// Returns a [NonNullIntent] object representing the result of adding
+  /// indirect non-null intent to `this`.
+  NonNullIntent addIndirect() => isPresent ? this : indirect;
+}
+
+/// State of a nullability node.
+class Nullability {
   /// State of a nullability node that has been determined to be non-nullable
   /// by propagating upstream.
-  static const nonNullable = NullabilityState._('non-nullable', false);
+  static const nonNullable = Nullability._('non-nullable', false);
 
   /// State of a nullability node that has been determined to be nullable by
   /// propagating downstream.
-  static const ordinaryNullable = NullabilityState._('ordinary nullable', true);
+  static const ordinaryNullable = Nullability._('ordinary nullable', true);
 
   /// State of a nullability node that has been determined to be nullable by
   /// propagating upstream from a contravariant use of a generic.
-  static const exactNullable = NullabilityState._('exact nullable', true);
+  static const exactNullable =
+      Nullability._('exact nullable', true, isExactNullable: true);
 
   /// Name of the state (for use in debugging).
   final String name;
@@ -29,7 +58,13 @@
   /// in that state.
   final bool isNullable;
 
-  const NullabilityState._(this.name, this.isNullable);
+  /// Indicates whether a node in this state is "exact nullable", meaning that
+  /// is needs to be nullable because it represents a type argument that will
+  /// later be used in a contravariant way that requires it to be nullable.
+  final bool isExactNullable;
+
+  const Nullability._(this.name, this.isNullable,
+      {this.isExactNullable = false});
 
   @override
   String toString() => name;
diff --git a/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart b/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
index f5b3a96..5885679 100644
--- a/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
+++ b/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
@@ -36,7 +36,7 @@
       _graph.makeNullable(node, AlreadyMigratedTypeOrigin.forElement(element));
     } else {
       node = NullabilityNode.forAlreadyMigrated();
-      _graph.makeNonNullable(
+      _graph.makeNonNullableUnion(
           node, AlreadyMigratedTypeOrigin.forElement(element));
     }
     if (type is FunctionType) {
diff --git a/pkg/nnbd_migration/lib/src/decorated_type.dart b/pkg/nnbd_migration/lib/src/decorated_type.dart
index 618022f..5492a7e 100644
--- a/pkg/nnbd_migration/lib/src/decorated_type.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_type.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart' as type_algebra;
 import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:meta/meta.dart';
 import 'package:nnbd_migration/instrumentation.dart';
 import 'package:nnbd_migration/src/nullability_node.dart';
 
@@ -121,25 +122,29 @@
   /// nodes can later be unioned with other nodes.
   factory DecoratedType.forImplicitFunction(TypeProvider typeProvider,
       FunctionType type, NullabilityNode node, NullabilityGraph graph,
-      {DecoratedType returnType}) {
+      {DecoratedType returnType, @required int offset}) {
     var positionalParameters = <DecoratedType>[];
     var namedParameters = <String, DecoratedType>{};
     for (var parameter in type.parameters) {
       if (parameter.isPositional) {
-        positionalParameters.add(
-            DecoratedType.forImplicitType(typeProvider, parameter.type, graph));
+        positionalParameters.add(DecoratedType.forImplicitType(
+            typeProvider, parameter.type, graph,
+            offset: offset));
       } else {
-        namedParameters[parameter.name] =
-            DecoratedType.forImplicitType(typeProvider, parameter.type, graph);
+        namedParameters[parameter.name] = DecoratedType.forImplicitType(
+            typeProvider, parameter.type, graph,
+            offset: offset);
       }
     }
     return DecoratedType(type, node,
         typeFormalBounds: type.typeFormals
             .map((e) => DecoratedType.forImplicitType(
-                typeProvider, e.bound ?? typeProvider.objectType, graph))
+                typeProvider, e.bound ?? typeProvider.objectType, graph,
+                offset: offset))
             .toList(),
         returnType: returnType ??
-            DecoratedType.forImplicitType(typeProvider, type.returnType, graph),
+            DecoratedType.forImplicitType(typeProvider, type.returnType, graph,
+                offset: offset),
         namedParameters: namedParameters,
         positionalParameters: positionalParameters);
   }
@@ -149,8 +154,8 @@
   /// nodes can later be unioned with other nodes.
   factory DecoratedType.forImplicitType(
       TypeProvider typeProvider, DartType type, NullabilityGraph graph,
-      {List<DecoratedType> typeArguments}) {
-    var nullabilityNode = NullabilityNode.forInferredType();
+      {List<DecoratedType> typeArguments, @required int offset}) {
+    var nullabilityNode = NullabilityNode.forInferredType(offset: offset);
     if (type is InterfaceType) {
       assert(() {
         if (typeArguments != null) {
@@ -163,7 +168,8 @@
       }());
 
       typeArguments ??= type.typeArguments
-          .map((t) => DecoratedType.forImplicitType(typeProvider, t, graph))
+          .map((t) => DecoratedType.forImplicitType(typeProvider, t, graph,
+              offset: offset))
           .toList();
       return DecoratedType(type, nullabilityNode, typeArguments: typeArguments);
     } else if (type is FunctionType) {
@@ -171,7 +177,8 @@
         throw "Not supported: implicit function type with explicit type arguments";
       }
       return DecoratedType.forImplicitFunction(
-          typeProvider, type, nullabilityNode, graph);
+          typeProvider, type, nullabilityNode, graph,
+          offset: offset);
     } else {
       assert(typeArguments == null);
       return DecoratedType(type, nullabilityNode);
@@ -333,9 +340,14 @@
             nullabilitySuffix: NullabilitySuffix.none);
       }
       for (int i = 0; i < newTypeFormals.length; i++) {
-        newTypeFormals[i].bound = type_algebra.substitute(
+        var bound = type_algebra.substitute(
             typeFormalBounds[i].toFinalType(typeProvider),
             typeFormalSubstitution);
+        if (!bound.isDynamic &&
+            !(bound.isDartCoreObject &&
+                bound.nullabilitySuffix == NullabilitySuffix.question)) {
+          newTypeFormals[i].bound = bound;
+        }
       }
       var parameters = <ParameterElement>[];
       for (int i = 0; i < type.parameters.length; i++) {
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index e4c3772..0f74586 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -71,8 +71,9 @@
   @override
   void _connect(
       NullabilityNode source, NullabilityNode destination, EdgeOrigin origin,
-      {bool hard = false}) {
-    _graph.connect(source, destination, origin, hard: hard);
+      {bool hard = false, bool checkable = true}) {
+    _graph.connect(source, destination, origin,
+        hard: hard, checkable: checkable);
   }
 
   @override
@@ -898,7 +899,8 @@
       if (staticType is InterfaceType) {
         typeArgumentTypes = staticType.typeArguments;
         decoratedTypeArguments = typeArgumentTypes
-            .map((t) => DecoratedType.forImplicitType(typeProvider, t, _graph))
+            .map((t) => DecoratedType.forImplicitType(typeProvider, t, _graph,
+                offset: node.offset))
             .toList();
         instrumentation?.implicitTypeArguments(
             source, node, decoratedTypeArguments);
@@ -916,7 +918,7 @@
           ListLengthConstructorOrigin(source, node));
     }
 
-    var nullabilityNode = NullabilityNode.forInferredType();
+    var nullabilityNode = NullabilityNode.forInferredType(offset: node.offset);
     _graph.makeNonNullable(
         nullabilityNode, InstanceCreationOrigin(source, node));
     var createdType = DecoratedType(node.staticType, nullabilityNode,
@@ -986,7 +988,8 @@
       var listType = node.staticType as InterfaceType;
       if (node.typeArguments == null) {
         var elementType = DecoratedType.forImplicitType(
-            typeProvider, listType.typeArguments[0], _graph);
+            typeProvider, listType.typeArguments[0], _graph,
+            offset: node.offset);
         instrumentation?.implicitTypeArguments(source, node, [elementType]);
         _currentLiteralElementType = elementType;
       } else {
@@ -1089,8 +1092,9 @@
   @override
   DecoratedType visitNullLiteral(NullLiteral node) {
     _flowAnalysis.nullLiteral(node);
-    var decoratedType =
-        DecoratedType.forImplicitType(typeProvider, node.staticType, _graph);
+    var decoratedType = DecoratedType.forImplicitType(
+        typeProvider, node.staticType, _graph,
+        offset: node.offset);
     _graph.makeNullable(decoratedType.node, LiteralOrigin(source, node));
     return decoratedType;
   }
@@ -1207,7 +1211,7 @@
   @override
   DecoratedType visitRethrowExpression(RethrowExpression node) {
     _flowAnalysis.handleExit();
-    var nullabilityNode = NullabilityNode.forInferredType();
+    var nullabilityNode = NullabilityNode.forInferredType(offset: node.offset);
     _graph.makeNonNullable(nullabilityNode, ThrowOrigin(source, node));
     return DecoratedType(node.staticType, nullabilityNode);
   }
@@ -1219,11 +1223,14 @@
     final isAsync = node.thisOrAncestorOfType<FunctionBody>().isAsynchronous;
     if (returnValue == null) {
       var implicitNullType = DecoratedType.forImplicitType(
-          typeProvider, typeProvider.nullType, _graph);
+          typeProvider, typeProvider.nullType, _graph,
+          offset: node.offset);
       _graph.makeNullable(
           implicitNullType.node, AlwaysNullableTypeOrigin(source, node));
       _checkAssignment(null,
-          source: isAsync ? _futureOf(implicitNullType) : implicitNullType,
+          source: isAsync
+              ? _futureOf(implicitNullType, offset: node.offset)
+              : implicitNullType,
           destination: returnType,
           hard: false);
     } else {
@@ -1251,7 +1258,8 @@
         if (typeArguments == null) {
           assert(setOrMapType.typeArguments.length == 1);
           var elementType = DecoratedType.forImplicitType(
-              typeProvider, setOrMapType.typeArguments[0], _graph);
+              typeProvider, setOrMapType.typeArguments[0], _graph,
+              offset: node.offset);
           instrumentation?.implicitTypeArguments(source, node, [elementType]);
           _currentLiteralElementType = elementType;
         } else {
@@ -1275,10 +1283,12 @@
         if (typeArguments == null) {
           assert(setOrMapType.typeArguments.length == 2);
           var keyType = DecoratedType.forImplicitType(
-              typeProvider, setOrMapType.typeArguments[0], _graph);
+              typeProvider, setOrMapType.typeArguments[0], _graph,
+              offset: node.offset);
           _currentMapKeyType = keyType;
           var valueType = DecoratedType.forImplicitType(
-              typeProvider, setOrMapType.typeArguments[1], _graph);
+              typeProvider, setOrMapType.typeArguments[1], _graph,
+              offset: node.offset);
           _currentMapValueType = valueType;
           instrumentation
               ?.implicitTypeArguments(source, node, [keyType, valueType]);
@@ -1337,6 +1347,7 @@
       return _makeNonNullLiteralType(node);
     } else if (staticElement == null) {
       assert(node.toString() == 'void');
+      return _makeNullableVoidType(node);
     } else if (staticElement.enclosingElement is ClassElement &&
         (staticElement.enclosingElement as ClassElement).isEnum) {
       return getOrComputeElementType(staticElement);
@@ -1357,7 +1368,8 @@
           _currentMapKeyType.type, _currentMapValueType.type);
       final expectedDecoratedType = DecoratedType.forImplicitType(
           typeProvider, expectedType, _graph,
-          typeArguments: [_currentMapKeyType, _currentMapValueType]);
+          typeArguments: [_currentMapKeyType, _currentMapValueType],
+          offset: node.offset);
 
       spreadTypeDecorated = _handleAssignment(node.expression,
           destinationType: expectedDecoratedType);
@@ -1368,7 +1380,7 @@
           typeProvider.iterableType2(_currentLiteralElementType.type);
       final expectedDecoratedType = DecoratedType.forImplicitType(
           typeProvider, expectedType, _graph,
-          typeArguments: [_currentLiteralElementType]);
+          typeArguments: [_currentLiteralElementType], offset: node.offset);
 
       spreadTypeDecorated = _handleAssignment(node.expression,
           destinationType: expectedDecoratedType);
@@ -1393,7 +1405,7 @@
   DecoratedType visitSuperConstructorInvocation(
       SuperConstructorInvocation node) {
     var callee = node.staticElement;
-    var nullabilityNode = NullabilityNode.forInferredType();
+    var nullabilityNode = NullabilityNode.forInferredType(offset: node.offset);
     var class_ = node.thisOrAncestorOfType<ClassDeclaration>();
     var decoratedSupertype = _decoratedClassHierarchy.getDecoratedSupertype(
         class_.declaredElement, callee.enclosingElement);
@@ -1458,7 +1470,7 @@
     node.expression.accept(this);
     // TODO(paulberry): do we need to check the expression type?  I think not.
     _flowAnalysis.handleExit();
-    var nullabilityNode = NullabilityNode.forInferredType();
+    var nullabilityNode = NullabilityNode.forInferredType(offset: node.offset);
     _graph.makeNonNullable(nullabilityNode, ThrowOrigin(source, node));
     return DecoratedType(node.staticType, nullabilityNode);
   }
@@ -1646,9 +1658,9 @@
   @override
   void _connect(
       NullabilityNode source, NullabilityNode destination, EdgeOrigin origin,
-      {bool hard = false}) {
+      {bool hard = false, bool checkable = true}) {
     var edge = _graph.connect(source, destination, origin,
-        hard: hard, guards: _guards);
+        hard: hard, checkable: checkable, guards: _guards);
     if (origin is ExpressionChecksOrigin) {
       origin.checks.edges.add(edge);
     }
@@ -1677,8 +1689,9 @@
     // expression, since all we are going to do is cause a single graph edge to
     // be built; it is sufficient to pass in any decorated type whose node is
     // non-nullable.  So we use `Object`.
-    var nullabilityNode = NullabilityNode.forInferredType();
-    _graph.makeNonNullable(
+    var nullabilityNode =
+        NullabilityNode.forInferredType(offset: expression.offset);
+    _graph.makeNonNullableUnion(
         nullabilityNode, NonNullableUsageOrigin(source, expression));
     return DecoratedType(typeProvider.objectType, nullabilityNode);
   }
@@ -1719,6 +1732,10 @@
 
     if (type.isDynamic || type.isVoid) {
       return DecoratedType(type, node);
+    } else if (leftType.isBottom) {
+      return right.withNode(node);
+    } else if (rightType.isBottom) {
+      return left.withNode(node);
     } else if (type is InterfaceType) {
       if (type.typeArguments.isEmpty) {
         return DecoratedType(type, node);
@@ -1848,9 +1865,10 @@
     }
   }
 
-  DecoratedType _futureOf(DecoratedType type) => DecoratedType.forImplicitType(
-      typeProvider, typeProvider.futureType2(type.type), _graph,
-      typeArguments: [type]);
+  DecoratedType _futureOf(DecoratedType type, {@required int offset}) =>
+      DecoratedType.forImplicitType(
+          typeProvider, typeProvider.futureType2(type.type), _graph,
+          typeArguments: [type], offset: offset);
 
   @override
   DecoratedType _getTypeParameterTypeBound(DecoratedType type) {
@@ -1904,7 +1922,7 @@
     try {
       sourceType = expression.accept(this);
       if (wrapFuture) {
-        sourceType = _wrapFuture(sourceType);
+        sourceType = _wrapFuture(sourceType, offset: expression.offset);
       }
       if (sourceType == null) {
         throw StateError('No type computed for ${expression.runtimeType} '
@@ -2135,7 +2153,8 @@
               _checkAssignment(origin,
                   source: overriddenParameterType,
                   destination: currentParameterType,
-                  hard: true);
+                  hard: false,
+                  checkable: false);
             }
           }
         }
@@ -2251,8 +2270,9 @@
       } else {
         if (invokeType is FunctionType) {
           var argumentTypes = typeArgumentTypes
-              .map((argType) =>
-                  DecoratedType.forImplicitType(typeProvider, argType, _graph))
+              .map((argType) => DecoratedType.forImplicitType(
+                  typeProvider, argType, _graph,
+                  offset: node.offset))
               .toList();
           instrumentation?.implicitTypeArguments(source, node, argumentTypes);
           calleeType = _handleInstantiation(calleeType, argumentTypes);
@@ -2438,23 +2458,36 @@
 
   DecoratedType _makeNonNullableBoolType(Expression expression) {
     assert(expression.staticType.isDartCoreBool);
-    var nullabilityNode = NullabilityNode.forInferredType();
-    _graph.makeNonNullable(
+    var nullabilityNode =
+        NullabilityNode.forInferredType(offset: expression.offset);
+    _graph.makeNonNullableUnion(
         nullabilityNode, NonNullableBoolTypeOrigin(source, expression));
     return DecoratedType(typeProvider.boolType, nullabilityNode);
   }
 
   DecoratedType _makeNonNullLiteralType(Expression expression,
       {List<DecoratedType> typeArguments = const []}) {
-    var nullabilityNode = NullabilityNode.forInferredType();
-    _graph.makeNonNullable(nullabilityNode, LiteralOrigin(source, expression));
+    var nullabilityNode =
+        NullabilityNode.forInferredType(offset: expression.offset);
+    _graph.makeNonNullableUnion(
+        nullabilityNode, LiteralOrigin(source, expression));
     return DecoratedType(expression.staticType, nullabilityNode,
         typeArguments: typeArguments);
   }
 
   DecoratedType _makeNullableDynamicType(AstNode astNode) {
     var decoratedType = DecoratedType.forImplicitType(
-        typeProvider, typeProvider.dynamicType, _graph);
+        typeProvider, typeProvider.dynamicType, _graph,
+        offset: astNode.offset);
+    _graph.makeNullable(
+        decoratedType.node, AlwaysNullableTypeOrigin(source, astNode));
+    return decoratedType;
+  }
+
+  DecoratedType _makeNullableVoidType(SimpleIdentifier astNode) {
+    var decoratedType = DecoratedType.forImplicitType(
+        typeProvider, typeProvider.voidType, _graph,
+        offset: astNode.offset);
     _graph.makeNullable(
         decoratedType.node, AlwaysNullableTypeOrigin(source, astNode));
     return decoratedType;
@@ -2476,8 +2509,10 @@
     }
 
     NullabilityNode makeNonNullableNode() {
-      var nullabilityNode = NullabilityNode.forInferredType();
-      _graph.makeNonNullable(nullabilityNode, ThisOrSuperOrigin(source, node));
+      var nullabilityNode =
+          NullabilityNode.forInferredType(offset: node.offset);
+      _graph.makeNonNullableUnion(
+          nullabilityNode, ThisOrSuperOrigin(source, node));
       return nullabilityNode;
     }
 
@@ -2498,9 +2533,11 @@
       final type = (_currentClassOrExtension as ExtensionElement).extendedType;
 
       if (type is InterfaceType) {
-        return DecoratedType(type, NullabilityNode.forInferredType(),
+        return DecoratedType(
+            type, NullabilityNode.forInferredType(offset: node.offset),
             typeArguments: type.typeArguments
-                .map((t) => DecoratedType(t, NullabilityNode.forInferredType()))
+                .map((t) => DecoratedType(
+                    t, NullabilityNode.forInferredType(offset: node.offset)))
                 .toList());
       } else {
         _unimplemented(node, 'extension of $type (${type.runtimeType}');
@@ -2526,9 +2563,9 @@
   /// Produce Future<flatten(T)> for some T, however, we would like to merely
   /// upcast T to that type if possible, skipping the flatten when not
   /// necessary.
-  DecoratedType _wrapFuture(DecoratedType type) {
+  DecoratedType _wrapFuture(DecoratedType type, {@required int offset}) {
     if (type.type.isDartCoreNull || type.type.isBottom) {
-      return _futureOf(type);
+      return _futureOf(type, offset: offset);
     }
 
     if (_typeSystem.isSubtypeOf(type.type, typeProvider.futureDynamicType)) {
@@ -2536,7 +2573,7 @@
           type, typeProvider.futureDynamicType.element);
     }
 
-    return _futureOf(type);
+    return _futureOf(type, offset: offset);
   }
 }
 
@@ -2557,7 +2594,8 @@
   void _checkAssignment(EdgeOrigin origin,
       {@required DecoratedType source,
       @required DecoratedType destination,
-      @required bool hard}) {
+      @required bool hard,
+      bool checkable = true}) {
     var sourceType = source.type;
     var destinationType = destination.type;
     if (!_typeSystem.isSubtypeOf(sourceType, destinationType)) {
@@ -2577,7 +2615,8 @@
       _connect(source.node, destination.node, origin, hard: hard);
       return;
     }
-    _connect(source.node, destination.node, origin, hard: hard);
+    _connect(source.node, destination.node, origin,
+        hard: hard, checkable: checkable);
     _checkAssignment_recursion(origin,
         source: source, destination: destination);
   }
@@ -2708,14 +2747,16 @@
         _checkAssignment(origin,
             source: destination.positionalParameters[i],
             destination: source.positionalParameters[i],
-            hard: false);
+            hard: false,
+            checkable: false);
       }
       for (var entry in destination.namedParameters.entries) {
         // Note: source and destination are swapped due to contravariance.
         _checkAssignment(origin,
             source: entry.value,
             destination: source.namedParameters[entry.key],
-            hard: false);
+            hard: false,
+            checkable: false);
       }
     } else if (destinationType.isDynamic || sourceType.isDynamic) {
       // ok; nothing further to do.
@@ -2760,6 +2801,26 @@
         // Nothing to do.
         return;
       }
+    } else if (source.type.isDartAsyncFutureOr) {
+      if (destination.type.isDartAsyncFuture) {
+        // FutureOr<T?> is nullable, so the Future<T> should be nullable too.
+        _connect(source.typeArguments[0].node, destination.node, origin,
+            hard: hard);
+        _checkDowncast(origin,
+            source: source.typeArguments[0],
+            destination: destination.typeArguments[0],
+            hard: false);
+      } else if (destination.type.isDartAsyncFutureOr) {
+        _checkDowncast(origin,
+            source: source.typeArguments[0],
+            destination: destination.typeArguments[0],
+            hard: false);
+      } else {
+        _checkDowncast(origin,
+            source: source.typeArguments[0],
+            destination: destination,
+            hard: false);
+      }
     } else if (destinationType is InterfaceType) {
       if (source.type is InterfaceType) {
         final target = _decoratedClassHierarchy.asInstanceOf(
@@ -2789,7 +2850,7 @@
 
   void _connect(
       NullabilityNode source, NullabilityNode destination, EdgeOrigin origin,
-      {bool hard = false});
+      {bool hard = false, bool checkable = true});
 
   /// Given a [type] representing a type parameter, retrieves the type's bound.
   DecoratedType _getTypeParameterTypeBound(DecoratedType type);
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index d844505..907e619 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -298,6 +298,17 @@
     return (plan as NodeProducingEditPlan)._getChanges(false);
   }
 
+  /// Creates a new edit plan that inserts the text indicated by [edits] at the
+  /// given [offset].
+  ///
+  /// The created edit will have the given [parentNode].  In general this should
+  /// be the innermost AST node containing the given [offset].
+  EditPlan insertText(AstNode parentNode, int offset, List<AtomicEdit> edits) {
+    assert(!edits.any((edit) => !edit.isInsertion),
+        'All edits should be insertions');
+    return _TokenChangePlan(parentNode, {offset: edits});
+  }
+
   /// Creates a new edit plan that consists of executing [innerPlan], and then
   /// appending a `?`, to make a type nullable.
   ///
@@ -421,64 +432,23 @@
 
   /// Creates a new edit plan that removes null awareness from [sourceNode].
   ///
-  /// Optional arguments [targetPlan], [methodNamePlan], [typeArgumentsPlan],
-  /// and [argumentListPlan] indicate what changes should be made to the node's
-  /// target, method name, type arguments, and argument list, respectively.
-  ///
-  /// Optional argument [info] contains information about why the change was
-  /// made.
-  NodeProducingEditPlan removeNullAwarenessFromMethodInvocation(
-      MethodInvocation sourceNode,
-      {NodeProducingEditPlan targetPlan,
-      NodeProducingEditPlan methodNamePlan,
-      NodeProducingEditPlan typeArgumentsPlan,
-      NodeProducingEditPlan argumentListPlan,
-      AtomicEditInfo info}) {
-    assert(sourceNode.operator.type == TokenType.QUESTION_PERIOD);
-    var builder = _PassThroughBuilderImpl(sourceNode);
-    if (targetPlan != null) {
-      builder._handleNodeProducingEditPlan(targetPlan);
+  /// The created edit plan should be inserted into the list of inner plans for
+  /// a pass-through plan targeted at the source node.  See [passThrough].
+  EditPlan removeNullAwareness(Expression sourceNode, {AtomicEditInfo info}) {
+    Token operator;
+    if (sourceNode is MethodInvocation) {
+      operator = sourceNode.operator;
+    } else if (sourceNode is PropertyAccess) {
+      operator = sourceNode.operator;
+    } else {
+      throw StateError(
+          'Tried to remove null awareness from an unexpected node type: '
+          '${sourceNode.runtimeType}');
     }
-    builder.changes += {
-      sourceNode.operator.offset: [AtomicEdit.delete(1, info: info)]
-    };
-    if (methodNamePlan != null) {
-      builder._handleNodeProducingEditPlan(methodNamePlan);
-    }
-    if (typeArgumentsPlan != null) {
-      builder._handleNodeProducingEditPlan(typeArgumentsPlan);
-    }
-    if (argumentListPlan != null) {
-      builder._handleNodeProducingEditPlan(argumentListPlan);
-    }
-    return builder.finish(this);
-  }
-
-  /// Creates a new edit plan that removes null awareness from [sourceNode].
-  ///
-  /// Optional arguments [targetPlan] and, [propertyNamePlan] indicate what
-  /// changes should be made to the node's target and property name,
-  /// respectively.
-  ///
-  /// Optional argument [info] contains information about why the change was
-  /// made.
-  NodeProducingEditPlan removeNullAwarenessFromPropertyAccess(
-      PropertyAccess sourceNode,
-      {NodeProducingEditPlan targetPlan,
-      NodeProducingEditPlan propertyNamePlan,
-      AtomicEditInfo info}) {
-    assert(sourceNode.operator.type == TokenType.QUESTION_PERIOD);
-    var builder = _PassThroughBuilderImpl(sourceNode);
-    if (targetPlan != null) {
-      builder._handleNodeProducingEditPlan(targetPlan);
-    }
-    builder.changes += {
-      sourceNode.operator.offset: [AtomicEdit.delete(1, info: info)]
-    };
-    if (propertyNamePlan != null) {
-      builder._handleNodeProducingEditPlan(propertyNamePlan);
-    }
-    return builder.finish(this);
+    assert(operator.type == TokenType.QUESTION_PERIOD);
+    return _TokenChangePlan(sourceNode, {
+      operator.offset: [AtomicEdit.delete(1, info: info)]
+    });
   }
 
   /// Creates a new edit plan that replaces the contents of [sourceNode] with
@@ -497,6 +467,8 @@
       {Precedence precedence = Precedence.primary,
       bool endsInCascade = false,
       AtomicEditInfo info}) {
+    assert(!replacement.any((edit) => !edit.isInsertion),
+        'All edits should be insertions');
     return _SimpleEditPlan(sourceNode, precedence, endsInCascade, {
       sourceNode.offset: [
         AtomicEdit.delete(sourceNode.length, info: info),
@@ -505,6 +477,23 @@
     });
   }
 
+  /// Creates a new edit plan that replaces [token] with the given [replacement]
+  /// text.
+  ///
+  /// [parentNode] should be the innermost AST node containing [token].
+  EditPlan replaceToken(
+      AstNode parentNode, Token token, List<AtomicEdit> replacement,
+      {AtomicEditInfo info}) {
+    assert(!replacement.any((edit) => !edit.isInsertion),
+        'All edits should be insertions');
+    return _TokenChangePlan(parentNode, {
+      token.offset: [
+        AtomicEdit.delete(token.length, info: info),
+        ...replacement
+      ]
+    });
+  }
+
   /// Creates a new edit plan that consists of executing [innerPlan], and then
   /// surrounding it with [prefix] and [suffix] text.  This could be used, for
   /// example, to add a cast.
@@ -1277,6 +1266,9 @@
         planIndex++;
       } else if (innerPlan is _RemoveEditPlan) {
         planIndex = _handleRemoveEditPlans(innerPlan, planIndex);
+      } else if (innerPlan is _TokenChangePlan) {
+        changes += innerPlan.changes;
+        planIndex++;
       } else {
         throw UnimplementedError('Unrecognized inner plan type');
       }
@@ -1453,6 +1445,21 @@
   }
 }
 
+/// [EditPlan] representing a change (or changes) to be made to a token in the
+/// [parentNode].
+///
+/// This is used, for example, to change the `?.` token of a [MethodInvocation]
+/// or [PropertyAccess] to `.`.
+class _TokenChangePlan extends EditPlan {
+  @override
+  final AstNode parentNode;
+
+  /// The changes to be made.
+  final Map<int, List<AtomicEdit>> changes;
+
+  _TokenChangePlan(this.parentNode, this.changes) : super._();
+}
+
 /// Extension containing useful operations on a list of [AtomicEdit]s.
 extension AtomicEditList on List<AtomicEdit> {
   /// Converts a list of [AtomicEdits] to a single [SourceEdit] by concatenating
diff --git a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_repo.dart b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_repo.dart
index f063abb..59f3d8e 100644
--- a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_repo.dart
+++ b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_repo.dart
@@ -4,29 +4,87 @@
 
 import 'dart:io';
 
+import 'package:nnbd_migration/src/utilities/subprocess_launcher.dart';
 import 'package:path/path.dart' as path;
 
 const _github = 'git@github.com';
+const _httpGithub = 'https://github.com';
+
+final Map<String, FantasyRepoSettings> _repoTable = {
+  'archive':
+      FantasyRepoSettings('archive', '$_github:brendan-duncan/archive.git'),
+  'build_verify': FantasyRepoSettings(
+      'build_verify', '$_github:brendan-duncan/build_verify.git'),
+  'build_version':
+      FantasyRepoSettings('build_version', '$_github:kevmoo/build_version.git'),
+  'csv': FantasyRepoSettings('csv', '$_github:close2/csv.git'),
+  'git': FantasyRepoSettings('git', '$_github:kevmoo/git.git'),
+  'node_interop': FantasyRepoSettings(
+      'node_interop', '$_github:pulyaevskiy/node-interop.git'),
+  'node_preamble': FantasyRepoSettings(
+      'package_config', '$_github:mbullington/node_preamble.dart.git'),
+  'package_config': FantasyRepoSettings(
+      'package_config', '$_github:dart-lang/package_config', 'master', '1.1.0'),
+  'source_gen_test': FantasyRepoSettings(
+      'source_gen_test', '$_github:kevmoo/source_gen_test.git'),
+  'quiver-dart':
+      FantasyRepoSettings('quiver-dart', '$_github:google/quiver-dart.git'),
+  'uuid': FantasyRepoSettings('uuid', '$_github:Daegalus/dart-uuid.git'),
+};
+
+class FantasyRepoCloneException extends FantasyRepoException {
+  FantasyRepoCloneException(String message) : super(message);
+
+  String toString() {
+    if (message == null) return "FantasyRepoCloneException";
+    return "FantasyRepoCloneException: $message";
+  }
+}
+
+class FantasyRepoUpdateException extends FantasyRepoException {
+  FantasyRepoUpdateException(String message) : super(message);
+
+  String toString() {
+    if (message == null) return "FantasyRepoUpdateException";
+    return "FantasyRepoUpdateException: $message";
+  }
+}
+
+class FantasyRepoException implements Exception {
+  final message;
+
+  FantasyRepoException(this.message);
+
+  String toString() {
+    if (message == null) return "FantasyRepoException";
+    return "FantasyRepoException: $message";
+  }
+}
 
 /// Data class to contain settings for a given repository.
 ///
 /// A repository can be referred to by one or more [FantasySubPackageSettings].
 class FantasyRepoSettings {
-  final String repoName;
+  final String name;
   final String clone;
   final String branch;
   final String revision;
 
-  FantasyRepoSettings(this.repoName, this.clone, this.branch, this.revision);
+  FantasyRepoSettings(this.name, this.clone,
+      [this.branch = 'master', this.revision = 'master']);
 
+  static RegExp _dotDart = RegExp(r'[.]dart$');
+
+  /// Build repository settings from a hard-coded repository name.
   factory FantasyRepoSettings.fromName(String repoName) {
-    switch (repoName) {
-
-      /// TODO(jcollins-g): Port table over from add_repo_to_workspace.
-      default:
-        return FantasyRepoSettings(
-            repoName, '$_github:dart-lang/$repoName.git', 'master', 'master');
+    if (_repoTable.containsKey(repoName)) {
+      return _repoTable[repoName];
     }
+    if (_dotDart.hasMatch(repoName)) {
+      return FantasyRepoSettings(repoName, '$_github:google/$repoName.git');
+    }
+    return FantasyRepoSettings(
+        repoName, '$_github:dart-lang/$repoName.git', 'master', 'master');
   }
 
   @override
@@ -35,7 +93,7 @@
   @override
   bool operator ==(other) {
     return other is FantasyRepoSettings &&
-        (other.repoName == repoName &&
+        (other.name == name &&
             other.clone == clone &&
             other.branch == branch &&
             other.revision == revision);
@@ -43,26 +101,129 @@
 
   @override
   String toString() =>
-      'FantasyRepoSettings("$repoName", "$clone", "$branch", "$revision")';
+      'FantasyRepoSettings("$name", "$clone", "$branch", "$revision")';
 }
 
-const _repoSubDir = '_repo';
-
 /// Represent a single git clone that may be referred to by one or more
 /// [FantasySubPackage]s.
 class FantasyRepo {
   final String name;
   final FantasyRepoSettings repoSettings;
   final Directory repoRoot;
+  final File Function(String) fileBuilder;
 
-  FantasyRepo._(this.name, this.repoSettings, this.repoRoot);
+  FantasyRepo._(this.repoSettings, this.repoRoot,
+      {File Function(String) fileBuilder})
+      : name = repoSettings.name,
+        fileBuilder = fileBuilder ?? ((s) => File(s));
 
   static Future<FantasyRepo> buildFrom(
-      String repoName, Directory workspaceRoot) async {
-    FantasyRepoSettings repoSettings = FantasyRepoSettings.fromName(repoName);
-    Directory repoRoot = Directory(path
-        .canonicalize(path.join(workspaceRoot.path, _repoSubDir, repoName)));
-    // TODO(jcollins-g): implement git operations, cloning, etc.
-    return FantasyRepo._(repoName, repoSettings, repoRoot);
+      FantasyRepoSettings repoSettings, Directory repoRoot,
+      {SubprocessLauncher launcher, File Function(String) fileBuilder}) async {
+    FantasyRepo newRepo =
+        FantasyRepo._(repoSettings, repoRoot, fileBuilder: fileBuilder);
+    if (launcher == null) {
+      launcher = SubprocessLauncher('FantasyRepo.buildFrom-${newRepo.name}');
+    }
+    await newRepo._init(launcher);
+    return newRepo;
+  }
+
+  bool _isInitialized = false;
+
+  /// Call exactly once per [FantasyRepo].
+  ///
+  /// May throw [FantasyRepoException] in the event of problems and does
+  /// not clean up filesystem state.
+  Future<void> _init(SubprocessLauncher launcher) async {
+    assert(_isInitialized == false);
+    if (await repoRoot.exists()) {
+      await _update(launcher);
+      // TODO(jcollins-g): handle "update" of pinned revision edge case
+    } else {
+      await _clone(launcher);
+    }
+    _isInitialized = true;
+    return;
+  }
+
+  /// Configure a git repository locally and initialize it.
+  ///
+  /// Throws [FantasyRepoCloneException] in the event we can not finish
+  /// initializing.
+  Future<void> _clone(SubprocessLauncher launcher) async {
+    assert(_isInitialized == false);
+    if (!await repoRoot.parent.exists()) {
+      await repoRoot.parent.create(recursive: true);
+    }
+    await launcher.runStreamed('git', ['init', repoRoot.path]);
+    await launcher.runStreamed(
+        'git',
+        [
+          'remote',
+          'add',
+          'origin',
+          '-t',
+          repoSettings.branch,
+          repoSettings.clone
+        ],
+        workingDirectory: repoRoot.path);
+
+    String cloneHttp =
+        repoSettings.clone.replaceFirst('$_github:', '$_httpGithub/');
+    await launcher.runStreamed('git',
+        ['remote', 'add', 'originHTTP', '-t', repoSettings.branch, cloneHttp],
+        workingDirectory: repoRoot.path);
+
+    // Do not get the working directory wrong on this command or it could
+    // alter a user's repository config based on the CWD, which is bad.  Other
+    // commands in [FantasyRepo] will not fail silently with permanent,
+    // confusing results, but this one can.
+    await launcher.runStreamed('git', ['config', 'core.sparsecheckout', 'true'],
+        workingDirectory: repoRoot.path);
+
+    File sparseCheckout = fileBuilder(
+        path.join(repoRoot.path, '.git', 'info', 'sparse-checkout'));
+    await sparseCheckout.writeAsString([
+      '**\n',
+      '!**/.packages\n',
+      '!**/pubspec.lock\n',
+      '!**/.dart_tool/package_config.json\n'
+    ].join());
+    try {
+      await _update(launcher);
+    } catch (e) {
+      if (e is FantasyRepoUpdateException) {
+        throw FantasyRepoCloneException(
+            'Unable to initialize clone for: $repoSettings');
+      }
+      // Other kinds of exceptions are not expected, so rethrow.
+      rethrow;
+    }
+  }
+
+  Future<void> _update(SubprocessLauncher launcher) async {
+    assert(_isInitialized == false);
+    try {
+      List<String> args;
+      if (repoSettings.branch == 'master') {
+        args = [
+          'pull',
+          '--depth=1',
+          '--rebase',
+          'originHTTP',
+          repoSettings.revision
+        ];
+      } else {
+        args = ['pull', '--rebase', 'originHTTP', repoSettings.revision];
+      }
+      await launcher.runStreamed('git', args, workingDirectory: repoRoot.path);
+    } catch (e) {
+      if (e is ProcessException) {
+        throw FantasyRepoUpdateException(
+            'Unable to update clone for: $repoSettings');
+      }
+      rethrow;
+    }
   }
 }
diff --git a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_sub_package.dart b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_sub_package.dart
index 0f12e7d..dcefdc9 100644
--- a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_sub_package.dart
+++ b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_sub_package.dart
@@ -2,26 +2,108 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
-
 import 'package:nnbd_migration/src/fantasyland/fantasy_repo.dart';
-import 'package:path/path.dart' as path;
+import 'package:nnbd_migration/src/fantasyland/fantasy_workspace.dart';
+
+final Map<String, FantasySubPackageSettings> _subPackageTable = {
+  '_fe_analyzer_shared': FantasySubPackageSettings('_fe_analyzer_shared',
+      FantasyRepoSettings.fromName('sdk'), 'pkg/_fe_analyzer_shared'),
+  'analysis_tool': FantasySubPackageSettings('analysis_tool',
+      FantasyRepoSettings.fromName('sdk'), 'pkg/analysis_tool'),
+  'analyzer': FantasySubPackageSettings(
+      'analyzer', FantasyRepoSettings.fromName('sdk'), 'pkg/analyzer'),
+  'build': FantasySubPackageSettings(
+      'build', FantasyRepoSettings.fromName('build'), 'build'),
+  'build_config': FantasySubPackageSettings(
+      'build_config', FantasyRepoSettings.fromName('build'), 'build_config'),
+  'build_daemon': FantasySubPackageSettings(
+      'build_daemon', FantasyRepoSettings.fromName('build'), 'build_daemon'),
+  'build_integration': FantasySubPackageSettings('build_integration',
+      FantasyRepoSettings.fromName('sdk'), 'pkg/build_integration'),
+  'build_modules': FantasySubPackageSettings(
+      'build_modules', FantasyRepoSettings.fromName('build'), 'build_modules'),
+  'build_node_compilers': FantasySubPackageSettings('build_node_compilers',
+      FantasyRepoSettings.fromName('node-interop'), 'build_node_compilers'),
+  'build_resolvers': FantasySubPackageSettings('build_resolvers',
+      FantasyRepoSettings.fromName('build'), 'build_resolvers'),
+  'build_runner': FantasySubPackageSettings(
+      'build_runner', FantasyRepoSettings.fromName('build'), 'build_runner'),
+  'build_runner_core': FantasySubPackageSettings('build_runner_core',
+      FantasyRepoSettings.fromName('build'), 'build_runner_core'),
+  'build_test': FantasySubPackageSettings(
+      'build_test', FantasyRepoSettings.fromName('build'), 'build_test'),
+  'build_vm_compilers': FantasySubPackageSettings('build_vm_compilers',
+      FantasyRepoSettings.fromName('build'), 'build_vm_compilers'),
+  'build_web_compilers': FantasySubPackageSettings('build_web_compilers',
+      FantasyRepoSettings.fromName('build'), 'build_web_compilers'),
+  'built_collection': FantasySubPackageSettings('built_collection',
+      FantasyRepoSettings.fromName('built_collection.dart'), '.'),
+  'built_value': FantasySubPackageSettings('built_value',
+      FantasyRepoSettings.fromName('built_value.dart'), 'built_value'),
+  'built_value_generator': FantasySubPackageSettings(
+      'built_value_generator',
+      FantasyRepoSettings.fromName('built_value.dart'),
+      'built_value_generator'),
+  'checked_yaml': FantasySubPackageSettings('checked_yaml',
+      FantasyRepoSettings.fromName('json_serializable'), 'checked_yaml'),
+  'expect': FantasySubPackageSettings(
+      'expect', FantasyRepoSettings.fromName('sdk'), 'pkg/expect'),
+  'front_end': FantasySubPackageSettings(
+      'front_end', FantasyRepoSettings.fromName('sdk'), 'pkg/front_end'),
+  'grinder': FantasySubPackageSettings(
+      'grinder', FantasyRepoSettings.fromName('grinder.dart'), '.'),
+  'kernel': FantasySubPackageSettings(
+      'kernel', FantasyRepoSettings.fromName('sdk'), 'pkg/kernel'),
+  'meta': FantasySubPackageSettings(
+      'meta', FantasyRepoSettings.fromName('sdk'), 'pkg/meta'),
+  'node_interop': FantasySubPackageSettings('node_interop',
+      FantasyRepoSettings.fromName('node-interop'), 'node_interop'),
+  'node_io': FantasySubPackageSettings(
+      'node_io', FantasyRepoSettings.fromName('node-interop'), 'node_io'),
+  'js': FantasySubPackageSettings(
+      'js', FantasyRepoSettings.fromName('sdk'), 'pkg/js'),
+  'json_annotation': FantasySubPackageSettings('json_annotation',
+      FantasyRepoSettings.fromName('json_serializable'), 'json_annotation'),
+  'json_serializable': FantasySubPackageSettings('json_serializable',
+      FantasyRepoSettings.fromName('json_serializable'), 'json_serializable'),
+  'package_config': FantasySubPackageSettings(
+      'package_config', FantasyRepoSettings.fromName('package_config'), '.'),
+  'protobuf': FantasySubPackageSettings(
+      'protobuf', FantasyRepoSettings.fromName('protobuf'), 'protobuf'),
+  'scratch_space': FantasySubPackageSettings(
+      'scratch_space', FantasyRepoSettings.fromName('build'), 'scratch_space'),
+  'source_gen': FantasySubPackageSettings(
+      'source_gen', FantasyRepoSettings.fromName('source_gen'), 'source_gen'),
+  'source_gen_test': FantasySubPackageSettings(
+      'source_gen_test', FantasyRepoSettings.fromName('source_gen_test'), '.'),
+  'test': FantasySubPackageSettings(
+      'test', FantasyRepoSettings.fromName('test'), 'pkgs/test'),
+  'test_api': FantasySubPackageSettings(
+      'test_api', FantasyRepoSettings.fromName('test'), 'pkgs/test_api'),
+  'test_core': FantasySubPackageSettings(
+      'test_core', FantasyRepoSettings.fromName('test'), 'pkgs/test_core'),
+  'testing': FantasySubPackageSettings(
+      'testing', FantasyRepoSettings.fromName('sdk'), 'pkg/testing'),
+  'vm_service': FantasySubPackageSettings(
+      'vm_service', FantasyRepoSettings.fromName('sdk'), 'pkg/vm_service'),
+  'quiver': FantasySubPackageSettings(
+      'quiver', FantasyRepoSettings.fromName('quiver-dart'), '.'),
+};
 
 /// Data class containing settings for a package within a [FantasyWorkspaceImpl].
 class FantasySubPackageSettings {
   final String name;
-  final String repoName;
+  final FantasyRepoSettings repoSettings;
   final String subDir;
 
-  FantasySubPackageSettings(this.name, this.repoName, this.subDir);
+  FantasySubPackageSettings(this.name, this.repoSettings, [this.subDir = '.']);
 
+  /// Build settings just from a name in a mostly-hardcoded table.
   factory FantasySubPackageSettings.fromName(String name) {
-    switch (name) {
-
-      /// TODO(jcollins-g): Port table over from add_package_to_workspace.
-      default:
-        return FantasySubPackageSettings(name, name, '.');
+    if (_subPackageTable.containsKey(name)) {
+      return _subPackageTable[name];
     }
+    return FantasySubPackageSettings(name, FantasyRepoSettings.fromName(name));
   }
 
   @override
@@ -31,13 +113,13 @@
   bool operator ==(other) {
     return other is FantasySubPackageSettings &&
         (other.name == name &&
-            other.repoName == repoName &&
-            other.subDir == other.subDir);
+            other.repoSettings == repoSettings &&
+            other.subDir == subDir);
   }
 
   @override
   String toString() =>
-      'FantasySubPackageSettings("$name", "$repoName", "$subDir")';
+      'FantasySubPackageSettings("$name", ${repoSettings.toString()}, "$subDir")';
 }
 
 /// Represents one package within a [FantasyWorkspaceImpl].
@@ -45,28 +127,12 @@
 /// A `FantasySubPackage` differs from a normal package in that Dart code within
 /// it depends on a global .packages file to resolve symbols.
 class FantasySubPackage {
-  final String name;
   final FantasyRepo containingRepo;
+  final FantasyWorkspace containingWorkspace;
+  final String name;
   final FantasySubPackageSettings packageSettings;
 
-  /// The symlink in the workspace directory whose [Link.target] is the root of
-  /// the package.
-  final Link packageSymlink;
-
-  FantasySubPackage._(this.name, this.containingRepo, this.packageSettings,
-      this.packageSymlink);
-
-  static Future<FantasySubPackage> buildFrom(String packageName,
-      FantasyRepo containingRepo, Directory workspaceRoot) async {
-    FantasySubPackageSettings packageSettings =
-        FantasySubPackageSettings.fromName(packageName);
-    Link packageSymlink = Link(path.join(workspaceRoot.path, packageName));
-    if (!await packageSymlink.exists()) {
-      await packageSymlink.create(path.canonicalize(
-          path.join(containingRepo.repoRoot.path, packageSettings.subDir)));
-    }
-    // TODO(jcollins-g): implement .packages file handling here
-    return FantasySubPackage._(
-        packageName, containingRepo, packageSettings, packageSymlink);
-  }
+  FantasySubPackage(
+      this.packageSettings, this.containingRepo, this.containingWorkspace)
+      : name = packageSettings.name;
 }
diff --git a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace.dart b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace.dart
index f93b888..d9ec224 100644
--- a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace.dart
+++ b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace.dart
@@ -5,33 +5,19 @@
 import 'dart:io';
 
 import 'package:nnbd_migration/src/fantasyland/fantasy_sub_package.dart';
-import 'package:nnbd_migration/src/fantasyland/fantasy_repo.dart';
 import 'package:nnbd_migration/src/fantasyland/fantasy_workspace_impl.dart';
 
+export 'package:nnbd_migration/src/fantasyland/fantasy_sub_package.dart';
+
 /// Represent a single [FantasyWorkspace].
 abstract class FantasyWorkspace {
   Directory get workspaceRoot;
 
   /// Fully initialized subpackages.
-  ///
-  /// This is fully populated once all [addPackageToWorkspace] futures are
-  /// complete.
-  Map<String, FantasySubPackage> subPackages = {};
-
-  /// Asynchronously add one package to the workspace.
-  ///
-  /// Completes when the given package and all its dependencies (implementation
-  /// dependent) are added to the workspace.
-  Future<void> addPackageToWorkspace(String packageName);
-
-  /// Asynchronously add one repository to the workspace.
-  ///
-  /// Completes when the repository is synced and cloned.
-  /// Completes immediately if the [repoName] is already added.
-  Future<FantasyRepo> addRepoToWorkspace(String repoName);
+  Map<String, FantasySubPackage> subPackages;
 }
 
-/// Build a "fantasyland"style repository structure suitable for applying
+/// Build a "fantasyland"-style repository structure suitable for applying
 /// a migration to.
 Future<FantasyWorkspace> buildFantasyLand(String topLevelPackage,
     List<String> extraPackages, Directory fantasyLandDir) {
diff --git a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace_impl.dart b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace_impl.dart
index 4f1eb20..9ee506c 100644
--- a/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace_impl.dart
+++ b/pkg/nnbd_migration/lib/src/fantasyland/fantasy_workspace_impl.dart
@@ -7,6 +7,7 @@
 import 'package:nnbd_migration/src/fantasyland/fantasy_repo.dart';
 import 'package:nnbd_migration/src/fantasyland/fantasy_sub_package.dart';
 import 'package:nnbd_migration/src/fantasyland/fantasy_workspace.dart';
+import 'package:path/path.dart' as path;
 
 abstract class FantasyWorkspaceImpl extends FantasyWorkspace {
   @override
@@ -17,12 +18,12 @@
   /// Repositories on which [addRepoToWorkspace] has been called.
   Map<String, Future<FantasyRepo>> _repos = {};
 
-  /// Sub-packages on which [addPackageToWorkspace] has been called.
+  /// Sub-packages on which [addPackageNameToWorkspace] has been called.
   Map<String, Future<List<String>>> _packageDependencies = {};
 
   /// Fully initialized subpackages.
   ///
-  /// This is complete once all [addPackageToWorkspace] futures are complete.
+  /// This is complete once all [addPackageNameToWorkspace] futures are complete.
   /// futures are complete.
   Map<String, FantasySubPackage> subPackages = {};
 
@@ -40,24 +41,30 @@
   /// Returns a list of packageNames that needed to be added as dependencies.
   ///
   /// Which dependencies are automatically added is implementation dependent.
-  Future<List<String>> addPackageToWorkspaceInternal(String packageName);
+  Future<List<String>> addPackageNameToWorkspaceInternal(String packageName);
 
-  Future<void> addPackageToWorkspace(String packageName) async {
+  Future<void> addPackageNameToWorkspace(String packageName) async {
     if (_packageDependencies.containsKey(packageName)) return;
     _packageDependencies[packageName] =
-        addPackageToWorkspaceInternal(packageName);
-    return Future.wait((await _packageDependencies[packageName])
-        .map((n) => addPackageToWorkspace(n)));
+        addPackageNameToWorkspaceInternal(packageName);
+    return Future.wait([
+      for (var n in await _packageDependencies[packageName])
+        addPackageNameToWorkspace(n)
+    ]);
   }
 
+  static const _repoSubDir = '_repo';
+
   /// Asynchronously add one repository to the workspace.
   ///
   /// Completes when the repository is synced and cloned.
-  /// Completes immediately if the [repoName] is already added.
-  Future<FantasyRepo> addRepoToWorkspace(String repoName) {
-    if (_repos.containsKey(repoName)) return _repos[repoName];
-    _repos[repoName] = FantasyRepo.buildFrom(repoName, workspaceRoot);
-    return _repos[repoName];
+  /// Completes immediately if the [name] is already added.
+  Future<FantasyRepo> addRepoToWorkspace(FantasyRepoSettings repoSettings) {
+    if (_repos.containsKey(repoSettings.name)) return _repos[repoSettings.name];
+    Directory repoRoot = Directory(path.canonicalize(
+        path.join(workspaceRoot.path, _repoSubDir, repoSettings.name)));
+    _repos[repoSettings.name] = FantasyRepo.buildFrom(repoSettings, repoRoot);
+    return _repos[repoSettings.name];
   }
 }
 
@@ -79,20 +86,33 @@
         FantasyWorkspaceTopLevelDevDepsImpl._(topLevelPackage, workspaceRoot);
     await Future.wait([
       for (var n in [topLevelPackage, ...extraPackageNames])
-        workspace.addPackageToWorkspace(n)
+        workspace.addPackageNameToWorkspace(n)
     ]);
     return workspace;
   }
 
-  Future<List<String>> addPackageToWorkspaceInternal(String packageName) async {
+  Future<List<String>> addPackageNameToWorkspaceInternal(
+      String packageName) async {
     FantasySubPackageSettings packageSettings =
         FantasySubPackageSettings.fromName(packageName);
     FantasyRepo containingRepo =
-        await addRepoToWorkspace(packageSettings.repoName);
-    await FantasySubPackage.buildFrom(
-        packageName, containingRepo, workspaceRoot);
+        await addRepoToWorkspace(packageSettings.repoSettings);
+    FantasySubPackage fantasySubPackage =
+        FantasySubPackage(packageSettings, containingRepo, this);
+    subPackages[fantasySubPackage.name] = fantasySubPackage;
+
+    // Add a symlink to the top level directory.
+    Link packageSymlink =
+        Link(path.join(workspaceRoot.path, packageSettings.name));
+    if (!await packageSymlink.exists()) {
+      await packageSymlink.create(path.canonicalize(
+          path.join(containingRepo.repoRoot.path, packageSettings.subDir)));
+    }
+
+    // TODO(jcollins-g): Add to .packages / package_config.json
     if (packageName == topLevelPackage) {
-      throw UnimplementedError(); // TODO(jcollins-g): implement some dependency calculations.
+      throw UnimplementedError();
+      // TODO(jcollins-g): implement some dependency calculations inside FantasySubPackage.
     }
     return [];
   }
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index 2f4f372..6862421 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -5,101 +5,13 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type.dart';
 import 'package:nnbd_migration/instrumentation.dart';
 import 'package:nnbd_migration/nnbd_migration.dart';
 import 'package:nnbd_migration/src/decorated_type.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
-
-/// Implementation of [NodeChange] representing the addition of the keyword
-/// `required` to a named parameter.
-class AddRequiredKeyword extends NestableChange {
-  /// Information about why the change should be made.
-  final AtomicEditInfo info;
-
-  const AddRequiredKeyword(this.info,
-      [NodeChange<NodeProducingEditPlan> inner = const NoChange()])
-      : super._(inner);
-
-  @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    var innerPlan = inner.apply(node, aggregator);
-    return aggregator.planner.surround(innerPlan,
-        prefix: [AtomicEdit.insert('required ', info: info)]);
-  }
-}
-
-/// Implementation of [NodeChange] representing the removal of a dead branch
-/// because the conditional expression in an if statement, if element, or
-/// conditional expression has been determined to always evaluate to either
-/// `true` or `false`.
-class EliminateDeadIf extends NodeChange {
-  /// The value that the conditional expression has been determined to always
-  /// evaluate to
-  final bool conditionValue;
-
-  /// Reasons for the change.
-  final List<FixReasonInfo> reasons;
-
-  const EliminateDeadIf(this.conditionValue, {this.reasons = const []});
-
-  @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    // TODO(paulberry): do we need to detect whether the condition has side
-    // effects?  For now, assuming no.
-    AstNode thenNode;
-    AstNode elseNode;
-    if (node is IfStatement) {
-      thenNode = node.thenStatement;
-      elseNode = node.elseStatement;
-    } else if (node is ConditionalExpression) {
-      thenNode = node.thenExpression;
-      elseNode = node.elseExpression;
-    } else if (node is IfElement) {
-      thenNode = node.thenElement;
-      elseNode = node.elseElement;
-    } else {
-      throw StateError(
-          "EliminateDeadIf applied to an AST node that's not an if");
-    }
-    AstNode nodeToKeep;
-    NullabilityFixDescription descriptionBefore, descriptionAfter;
-    if (conditionValue) {
-      nodeToKeep = thenNode;
-      descriptionBefore = NullabilityFixDescription.discardCondition;
-      if (elseNode == null) {
-        descriptionAfter = descriptionBefore;
-      } else {
-        descriptionAfter = NullabilityFixDescription.discardElse;
-      }
-    } else {
-      nodeToKeep = elseNode;
-      descriptionBefore =
-          descriptionAfter = NullabilityFixDescription.discardThen;
-    }
-    if (nodeToKeep == null ||
-        nodeToKeep is Block && nodeToKeep.statements.isEmpty) {
-      var info = AtomicEditInfo(NullabilityFixDescription.discardIf, reasons);
-      return aggregator.planner.removeNode(node, info: info);
-    }
-    var infoBefore = AtomicEditInfo(descriptionBefore, reasons);
-    var infoAfter = AtomicEditInfo(descriptionAfter, reasons);
-    if (nodeToKeep is Block && nodeToKeep.statements.length == 1) {
-      var singleStatement = (nodeToKeep as Block).statements[0];
-      if (singleStatement is VariableDeclarationStatement) {
-        // It's not safe to eliminate the {} because it increases the scope of
-        // the variable declarations
-      } else {
-        nodeToKeep = singleStatement;
-      }
-    }
-    return aggregator.planner.extract(
-        node, aggregator.innerPlanForNode(nodeToKeep),
-        infoBefore: infoBefore, infoAfter: infoAfter);
-  }
-
-  @override
-  String toString() => 'EliminateDeadIf($conditionValue)';
-}
+import 'package:nnbd_migration/src/fix_builder.dart';
 
 /// Visitor that combines together the changes produced by [FixBuilder] into a
 /// concrete set of source code edits using the infrastructure of [EditPlan].
@@ -117,8 +29,10 @@
 
   /// Gathers all the changes to nodes descended from [node] into a single
   /// [EditPlan].
-  NodeProducingEditPlan innerPlanForNode(AstNode node) =>
-      planner.passThrough(node, innerPlans: innerPlansForNode(node));
+  NodeProducingEditPlan innerPlanForNode(AstNode node) {
+    var innerPlans = innerPlansForNode(node);
+    return planner.passThrough(node, innerPlans: innerPlans);
+  }
 
   /// Gathers all the changes to nodes descended from [node] into a list of
   /// [EditPlan]s, one for each change.
@@ -133,11 +47,22 @@
     }
   }
 
+  /// Gathers all the changes to [node] and its descendants into a single
+  /// [EditPlan].
+  EditPlan planForNode(AstNode node) {
+    var change = _changes[node];
+    if (change != null) {
+      return change._apply(node, this);
+    } else {
+      return planner.passThrough(node, innerPlans: innerPlansForNode(node));
+    }
+  }
+
   @override
   void visitNode(AstNode node) {
     var change = _changes[node];
     if (change != null) {
-      var innerPlan = change.apply(node, this);
+      var innerPlan = change._apply(node, this);
       if (innerPlan != null) {
         _plans.add(innerPlan);
       }
@@ -165,71 +90,10 @@
   }
 }
 
-/// Implementation of [NodeChange] representing introduction of an explicit
-/// downcast.
-class IntroduceAs extends NestableChange {
-  /// TODO(paulberry): shouldn't be a String
-  final String type;
-
-  /// Information about why the change should be made.
-  final AtomicEditInfo info;
-
-  const IntroduceAs(this.type, this.info,
-      [NodeChange<NodeProducingEditPlan> inner = const NoChange()])
-      : super._(inner);
-
-  @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    var innerPlan = inner.apply(node, aggregator);
-    return aggregator.planner.addBinaryPostfix(innerPlan, TokenType.AS, type);
-  }
-}
-
-/// Implementation of [NodeChange] representing the addition of a trailing `?`
-/// to a type.
-class MakeNullable extends NestableChange {
-  /// The decorated type to which a question mark is being added.
-  final DecoratedType decoratedType;
-
-  const MakeNullable(this.decoratedType,
-      [NodeChange<NodeProducingEditPlan> inner = const NoChange()])
-      : super._(inner);
-
-  @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    var innerPlan = inner.apply(node, aggregator);
-    return aggregator.planner.makeNullable(innerPlan,
-        info: AtomicEditInfo(
-            NullabilityFixDescription.makeTypeNullable(
-                decoratedType.type.toString()),
-            [decoratedType.node]));
-  }
-}
-
-/// Shared base class for [NodeChange]s that are based on an [inner] change.
-abstract class NestableChange extends NodeChange {
-  /// The change that should be applied first, before applying this change.
-  final NodeChange<NodeProducingEditPlan> inner;
-
-  const NestableChange._(this.inner);
-}
-
-/// Implementation of [NodeChange] representing no change at all.  This class
-/// is intended to be used as a base class for changes that wrap around other
-/// changes.
-class NoChange extends NodeChange<NodeProducingEditPlan> {
-  const NoChange();
-
-  @override
-  NodeProducingEditPlan apply(AstNode node, FixAggregator aggregator) {
-    return aggregator.innerPlanForNode(node);
-  }
-}
-
-/// Base class representing a kind of change that [FixAggregator] might make to a
-/// particular AST node.
-abstract class NodeChange<P extends EditPlan> {
-  const NodeChange();
+/// Base class representing a kind of change that [FixAggregator] might make to
+/// a particular AST node.
+abstract class NodeChange<N extends AstNode> {
+  NodeChange._();
 
   /// Applies this change to the given [node], producing an [EditPlan].  The
   /// [aggregator] may be used to gather up any edits to the node's descendants
@@ -240,102 +104,34 @@
   /// below them (e.g. dropping an unnecessary cast), so those changes need to
   /// be able to call the appropriate [aggregator] methods just on the nodes
   /// they need.
-  P apply(AstNode node, FixAggregator aggregator);
+  ///
+  /// May return `null` if no changes need to be made.
+  EditPlan _apply(N node, FixAggregator aggregator);
+
+  /// Creates the appropriate specialized kind of [NodeChange] appropriate for
+  /// the given [node].
+  static NodeChange<AstNode> create(AstNode node) =>
+      node.accept(_NodeChangeVisitor._instance);
 }
 
-/// Implementation of [NodeChange] representing the addition of a null check to
-/// an expression.
-class NullCheck extends NestableChange {
-  /// Information about why the change should be made.
-  final AtomicEditInfo info;
+/// Implementation of [NodeChange] specialized for operating on [Annotation]
+/// nodes.
+class NodeChangeForAnnotation extends NodeChange<Annotation> {
+  /// Indicates whether the node should be changed into a `required` keyword.
+  bool changeToRequiredKeyword = false;
 
-  const NullCheck(this.info,
-      [NodeChange<NodeProducingEditPlan> inner = const NoChange()])
-      : super._(inner);
+  /// If [changeToRequiredKeyword] is `true`, the information that should be
+  /// contained in the edit.
+  AtomicEditInfo changeToRequiredKeywordInfo;
+
+  NodeChangeForAnnotation() : super._();
 
   @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    var innerPlan = inner.apply(node, aggregator);
-    return aggregator.planner
-        .addUnaryPostfix(innerPlan, TokenType.BANG, info: info);
-  }
-}
-
-/// Implementation of [NodeChange] representing the removal of an unnecessary
-/// cast.
-class RemoveAs extends NestableChange {
-  const RemoveAs([NodeChange<NodeProducingEditPlan> inner = const NoChange()])
-      : super._(inner);
-
-  @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    return aggregator.planner.extract(
-        node, inner.apply((node as AsExpression).expression, aggregator),
-        infoAfter:
-            AtomicEditInfo(NullabilityFixDescription.removeAs, const []));
-  }
-}
-
-/// Implementation of [NodeChange] representing the removal of `?` from a `?.`
-/// in a method invocation because the target is non-nullable, or because of
-/// null shorting.
-class RemoveNullAwarenessFromMethodInvocation
-    extends NodeChange<NodeProducingEditPlan> {
-  const RemoveNullAwarenessFromMethodInvocation();
-
-  @override
-  NodeProducingEditPlan apply(AstNode node, FixAggregator aggregator) {
-    var methodInvocation = node as MethodInvocation;
-    var typeArguments = methodInvocation.typeArguments;
-    return aggregator.planner.removeNullAwarenessFromMethodInvocation(
-        methodInvocation,
-        targetPlan: aggregator.innerPlanForNode(methodInvocation.target),
-        methodNamePlan:
-            aggregator.innerPlanForNode(methodInvocation.methodName),
-        typeArgumentsPlan: typeArguments == null
-            ? null
-            : aggregator.innerPlanForNode(typeArguments),
-        argumentListPlan:
-            aggregator.innerPlanForNode(methodInvocation.argumentList),
-        info:
-            AtomicEditInfo(NullabilityFixDescription.removeNullAwareness, []));
-  }
-}
-
-/// Implementation of [NodeChange] representing the removal of `?` from a `?.`
-/// in a property access because the target is non-nullable, or because of null
-/// shorting.
-class RemoveNullAwarenessFromPropertyAccess
-    extends NodeChange<NodeProducingEditPlan> {
-  const RemoveNullAwarenessFromPropertyAccess();
-
-  @override
-  NodeProducingEditPlan apply(AstNode node, FixAggregator aggregator) {
-    var propertyAccess = node as PropertyAccess;
-    return aggregator.planner.removeNullAwarenessFromPropertyAccess(
-        propertyAccess,
-        targetPlan: aggregator.innerPlanForNode(propertyAccess.target),
-        propertyNamePlan:
-            aggregator.innerPlanForNode(propertyAccess.propertyName),
-        info:
-            AtomicEditInfo(NullabilityFixDescription.removeNullAwareness, []));
-  }
-}
-
-/// Implementation of [NodeChange] that changes an `@required` annotation into
-/// a `required` keyword.
-class RequiredAnnotationToRequiredKeyword extends NestableChange {
-  /// Information about why the change should be made.
-  final AtomicEditInfo info;
-
-  const RequiredAnnotationToRequiredKeyword(this.info,
-      [NodeChange<NodeProducingEditPlan> inner = const NoChange()])
-      : super._(inner);
-
-  @override
-  EditPlan apply(AstNode node, FixAggregator aggregator) {
-    var annotation = node as Annotation;
-    var name = annotation.name;
+  EditPlan _apply(Annotation node, FixAggregator aggregator) {
+    if (!changeToRequiredKeyword) {
+      return aggregator.innerPlanForNode(node);
+    }
+    var name = node.name;
     if (name is PrefixedIdentifier) {
       name = (name as PrefixedIdentifier).identifier;
     }
@@ -344,11 +140,363 @@
             'required') {
       // The text `required` already exists in the annotation; we can just
       // extract it.
-      return aggregator.planner
-          .extract(node, inner.apply(name, aggregator), infoBefore: info);
+      return aggregator.planner.extract(
+          node, aggregator.planForNode(name) as NodeProducingEditPlan,
+          infoBefore: changeToRequiredKeywordInfo);
     } else {
-      return aggregator.planner
-          .replace(node, [AtomicEdit.insert('required', info: info)]);
+      return aggregator.planner.replace(node,
+          [AtomicEdit.insert('required', info: changeToRequiredKeywordInfo)]);
     }
   }
 }
+
+/// Implementation of [NodeChange] specialized for operating on [AsExpression]
+/// nodes.
+class NodeChangeForAsExpression extends NodeChangeForExpression<AsExpression> {
+  /// Indicates whether the cast should be removed.
+  bool removeAs = false;
+
+  @override
+  EditPlan _apply(AsExpression node, FixAggregator aggregator) {
+    if (removeAs) {
+      return aggregator.planner.extract(node,
+          aggregator.planForNode(node.expression) as NodeProducingEditPlan,
+          infoAfter:
+              AtomicEditInfo(NullabilityFixDescription.removeAs, const []));
+    } else {
+      return super._apply(node, aggregator);
+    }
+  }
+}
+
+/// Common infrastructure used by [NodeChange] objects that operate on AST nodes
+/// with conditional behavior (if statements, if elements, and conditional
+/// expressions).
+mixin NodeChangeForConditional<N extends AstNode> on NodeChange<N> {
+  /// If not `null`, indicates that the condition expression is known to
+  /// evaluate to either `true` or `false`, so the other branch of the
+  /// conditional is dead code and should be eliminated.
+  bool conditionValue;
+
+  /// If [conditionValue] is not `null`, the reasons that should be included in
+  /// the [AtomicEditInfo] for the edit that removes the dead code.
+  List<FixReasonInfo> conditionReasons;
+
+  /// If dead code removal is warranted for [node], returns an [EditPlan] that
+  /// removes the dead code (and performs appropriate updates within any
+  /// descendant AST nodes that remain).  Otherwise returns `null`.
+  EditPlan _applyConditional(
+      N node, FixAggregator aggregator, AstNode thenNode, AstNode elseNode) {
+    if (conditionValue == null) return null;
+    AstNode nodeToKeep;
+    NullabilityFixDescription descriptionBefore, descriptionAfter;
+    if (conditionValue) {
+      nodeToKeep = thenNode;
+      descriptionBefore = NullabilityFixDescription.discardCondition;
+      if (elseNode == null) {
+        descriptionAfter = descriptionBefore;
+      } else {
+        descriptionAfter = NullabilityFixDescription.discardElse;
+      }
+    } else {
+      nodeToKeep = elseNode;
+      descriptionBefore =
+          descriptionAfter = NullabilityFixDescription.discardThen;
+    }
+    if (nodeToKeep == null ||
+        nodeToKeep is Block && nodeToKeep.statements.isEmpty) {
+      var info =
+          AtomicEditInfo(NullabilityFixDescription.discardIf, conditionReasons);
+      return aggregator.planner.removeNode(node, info: info);
+    }
+    var infoBefore = AtomicEditInfo(descriptionBefore, conditionReasons);
+    var infoAfter = AtomicEditInfo(descriptionAfter, conditionReasons);
+    if (nodeToKeep is Block && nodeToKeep.statements.length == 1) {
+      var singleStatement = (nodeToKeep as Block).statements[0];
+      if (singleStatement is VariableDeclarationStatement) {
+        // It's not safe to eliminate the {} because it increases the scope of
+        // the variable declarations
+      } else {
+        nodeToKeep = singleStatement;
+      }
+    }
+    return aggregator.planner.extract(
+        node, aggregator.planForNode(nodeToKeep) as NodeProducingEditPlan,
+        infoBefore: infoBefore, infoAfter: infoAfter);
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on
+/// [ConditionalExpression] nodes.
+class NodeChangeForConditionalExpression
+    extends NodeChangeForExpression<ConditionalExpression>
+    with NodeChangeForConditional {
+  @override
+  EditPlan _apply(ConditionalExpression node, FixAggregator aggregator) {
+    return _applyConditional(
+            node, aggregator, node.thenExpression, node.elseExpression) ??
+        super._apply(node, aggregator);
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on
+/// [DefaultFormalParameter] nodes.
+class NodeChangeForDefaultFormalParameter
+    extends NodeChange<DefaultFormalParameter> {
+  /// Indicates whether a `required` keyword should be added to this node.
+  bool addRequiredKeyword = false;
+
+  /// If [addRequiredKeyword] is `true`, the information that should be
+  /// contained in the edit.
+  AtomicEditInfo addRequiredKeywordInfo;
+
+  NodeChangeForDefaultFormalParameter() : super._();
+
+  @override
+  EditPlan _apply(DefaultFormalParameter node, FixAggregator aggregator) {
+    var innerPlan = aggregator.innerPlanForNode(node);
+    if (!addRequiredKeyword) return innerPlan;
+    return aggregator.planner.surround(innerPlan,
+        prefix: [AtomicEdit.insert('required ', info: addRequiredKeywordInfo)]);
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on [Expression]
+/// nodes.
+class NodeChangeForExpression<N extends Expression> extends NodeChange<N> {
+  /// Indicates whether the expression should be null checked.
+  bool addNullCheck = false;
+
+  /// If [addNullCheck] is `true`, the information that should be contained in
+  /// the edit that adds the null check.
+  AtomicEditInfo addNullCheckInfo;
+
+  /// Indicates whether the expression should be cast to a different type using
+  /// `as`.
+  String introduceAsType;
+
+  /// If [introduceAsType] is not `null`, the information that should be
+  /// contained in the edit that introduces the cast.
+  AtomicEditInfo introduceAsInfo;
+
+  NodeChangeForExpression() : super._();
+
+  @override
+  EditPlan _apply(N node, FixAggregator aggregator) {
+    var innerPlan = aggregator.innerPlanForNode(node);
+    return _applyExpression(aggregator, innerPlan);
+  }
+
+  /// If the expression needs to be wrapped in another expression (e.g. a null
+  /// check), wraps the given [innerPlan] to produce appropriate result.
+  /// Otherwise returns [innerPlan] unchanged.
+  NodeProducingEditPlan _applyExpression(
+      FixAggregator aggregator, NodeProducingEditPlan innerPlan) {
+    assert((introduceAsType == null) == (introduceAsInfo == null));
+    if (addNullCheck) {
+      assert(introduceAsInfo == null);
+      return aggregator.planner
+          .addUnaryPostfix(innerPlan, TokenType.BANG, info: addNullCheckInfo);
+    } else if (introduceAsInfo != null) {
+      return aggregator.planner
+          .addBinaryPostfix(innerPlan, TokenType.AS, introduceAsType);
+    } else {
+      return innerPlan;
+    }
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on [IfElement]
+/// nodes.
+class NodeChangeForIfElement extends NodeChange<IfElement>
+    with NodeChangeForConditional {
+  NodeChangeForIfElement() : super._();
+
+  @override
+  EditPlan _apply(IfElement node, FixAggregator aggregator) {
+    return _applyConditional(
+            node, aggregator, node.thenElement, node.elseElement) ??
+        aggregator.innerPlanForNode(node);
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on [IfStatement]
+/// nodes.
+class NodeChangeForIfStatement extends NodeChange<IfStatement>
+    with NodeChangeForConditional {
+  NodeChangeForIfStatement() : super._();
+
+  @override
+  EditPlan _apply(IfStatement node, FixAggregator aggregator) {
+    return _applyConditional(
+            node, aggregator, node.thenStatement, node.elseStatement) ??
+        aggregator.innerPlanForNode(node);
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on
+/// [MethodInvocation] nodes.
+class NodeChangeForMethodInvocation
+    extends NodeChangeForExpression<MethodInvocation>
+    with NodeChangeForNullAware {
+  @override
+  NodeProducingEditPlan _apply(
+      MethodInvocation node, FixAggregator aggregator) {
+    var target = node.target;
+    var targetPlan = target == null ? null : aggregator.planForNode(target);
+    var nullAwarePlan = _applyNullAware(node, aggregator);
+    var methodNamePlan = aggregator.planForNode(node.methodName);
+    var typeArguments = node.typeArguments;
+    var typeArgumentsPlan =
+        typeArguments == null ? null : aggregator.planForNode(typeArguments);
+    var argumentListPlan = aggregator.planForNode(node.argumentList);
+    var innerPlans = [
+      if (targetPlan != null) targetPlan,
+      if (nullAwarePlan != null) nullAwarePlan,
+      if (methodNamePlan != null) methodNamePlan,
+      if (typeArgumentsPlan != null) typeArgumentsPlan,
+      if (argumentListPlan != null) argumentListPlan
+    ];
+    return _applyExpression(aggregator,
+        aggregator.planner.passThrough(node, innerPlans: innerPlans));
+  }
+}
+
+/// Common infrastructure used by [NodeChange] objects that operate on AST nodes
+/// with that can be null-aware (method invocations and propety accesses).
+mixin NodeChangeForNullAware<N extends Expression> on NodeChange<N> {
+  /// Indicates whether null-awareness should be removed.
+  bool removeNullAwareness = false;
+
+  /// Returns an [EditPlan] that removes null awareness, if appropriate.
+  /// Otherwise returns `null`.
+  EditPlan _applyNullAware(N node, FixAggregator aggregator) {
+    if (!removeNullAwareness) return null;
+    return aggregator.planner.removeNullAwareness(node,
+        info:
+            AtomicEditInfo(NullabilityFixDescription.removeNullAwareness, []));
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on [PropertyAccess]
+/// nodes.
+class NodeChangeForPropertyAccess
+    extends NodeChangeForExpression<PropertyAccess>
+    with NodeChangeForNullAware {
+  @override
+  NodeProducingEditPlan _apply(PropertyAccess node, FixAggregator aggregator) {
+    var targetPlan = aggregator.planForNode(node.target);
+    var nullAwarePlan = _applyNullAware(node, aggregator);
+    var propertyNamePlan = aggregator.planForNode(node.propertyName);
+    var innerPlans = [
+      if (targetPlan != null) targetPlan,
+      if (nullAwarePlan != null) nullAwarePlan,
+      if (propertyNamePlan != null) propertyNamePlan
+    ];
+    return _applyExpression(aggregator,
+        aggregator.planner.passThrough(node, innerPlans: innerPlans));
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on [TypeAnnotation]
+/// nodes.
+class NodeChangeForTypeAnnotation extends NodeChange<TypeAnnotation> {
+  /// Indicates whether the type should be made nullable by adding a `?`.
+  bool makeNullable = false;
+
+  /// If [makeNullable] is `true`, the decorated type that results.
+  DecoratedType makeNullableType;
+
+  NodeChangeForTypeAnnotation() : super._();
+
+  @override
+  EditPlan _apply(TypeAnnotation node, FixAggregator aggregator) {
+    var innerPlan = aggregator.innerPlanForNode(node);
+    if (!makeNullable) return innerPlan;
+    return aggregator.planner.makeNullable(innerPlan,
+        info: AtomicEditInfo(
+            NullabilityFixDescription.makeTypeNullable(
+                makeNullableType.type.toString()),
+            [makeNullableType.node]));
+  }
+}
+
+/// Implementation of [NodeChange] specialized for operating on
+/// [VariableDeclarationList] nodes.
+class NodeChangeForVariableDeclarationList
+    extends NodeChange<VariableDeclarationList> {
+  /// If an explicit type should be added to this variable declaration, the type
+  /// that should be added.  Otherwise `null`.
+  DartType addExplicitType;
+
+  NodeChangeForVariableDeclarationList() : super._();
+
+  @override
+  EditPlan _apply(VariableDeclarationList node, FixAggregator aggregator) {
+    List<EditPlan> innerPlans = [];
+    if (addExplicitType != null) {
+      var typeText =
+          (addExplicitType as TypeImpl).toString(withNullability: true);
+      if (node.keyword?.keyword == Keyword.VAR) {
+        innerPlans.add(aggregator.planner
+            .replaceToken(node, node.keyword, [AtomicEdit.insert(typeText)]));
+      } else {
+        innerPlans.add(aggregator.planner.insertText(
+            node,
+            node.variables.first.offset,
+            [AtomicEdit.insert(typeText), AtomicEdit.insert(' ')]));
+      }
+    }
+    innerPlans.addAll(aggregator.innerPlansForNode(node));
+    return aggregator.planner.passThrough(node, innerPlans: innerPlans);
+  }
+}
+
+/// Visitor that creates an appropriate [NodeChange] object for the node being
+/// visited.
+class _NodeChangeVisitor extends GeneralizingAstVisitor<NodeChange<AstNode>> {
+  static final _instance = _NodeChangeVisitor();
+
+  @override
+  NodeChange visitAnnotation(Annotation node) => NodeChangeForAnnotation();
+
+  @override
+  NodeChange visitAsExpression(AsExpression node) =>
+      NodeChangeForAsExpression();
+
+  @override
+  NodeChange visitDefaultFormalParameter(DefaultFormalParameter node) =>
+      NodeChangeForDefaultFormalParameter();
+
+  @override
+  NodeChange visitExpression(Expression node) => NodeChangeForExpression();
+
+  @override
+  NodeChange visitGenericFunctionType(GenericFunctionType node) =>
+      NodeChangeForTypeAnnotation();
+
+  @override
+  NodeChange visitIfElement(IfElement node) => NodeChangeForIfElement();
+
+  @override
+  NodeChange visitIfStatement(IfStatement node) => NodeChangeForIfStatement();
+
+  @override
+  NodeChange visitMethodInvocation(MethodInvocation node) =>
+      NodeChangeForMethodInvocation();
+
+  @override
+  NodeChange visitNode(AstNode node) =>
+      throw StateError('Unexpected node type: ${node.runtimeType}');
+
+  @override
+  NodeChange visitPropertyAccess(PropertyAccess node) =>
+      NodeChangeForPropertyAccess();
+
+  @override
+  NodeChange visitTypeName(TypeName node) => NodeChangeForTypeAnnotation();
+
+  @override
+  NodeChange visitVariableDeclarationList(VariableDeclarationList node) =>
+      NodeChangeForVariableDeclarationList();
+}
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index eddd920..33e1df8 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -155,20 +155,6 @@
     }
   }
 
-  /// Called whenever an AST node is found that needs to be changed.
-  ///
-  /// The [update] callback is passed whatever change had previously been
-  /// decided upon for this node, or an instance of [NoChange], if the node was
-  /// previously unchanged.
-  void _addChange(AstNode node,
-      NodeChange Function(NodeChange<NodeProducingEditPlan>) update) {
-    // The previous change had better be a NodeChange<NodeProducingEditPlan>
-    // because these are the only kinds of changes that are possible to stack
-    // on top of one another.
-    var previousChange = changes[node] as NodeChange<NodeProducingEditPlan>;
-    changes[node] = update(previousChange ?? const NoChange());
-  }
-
   /// Called whenever an AST node is found that can't be automatically fixed.
   void _addProblem(AstNode node, Problem problem) {
     var newlyAdded = (problems[node] ??= {}).add(problem);
@@ -211,28 +197,25 @@
     }
   }
 
+  /// Returns the [NodeChange] object accumulating changes for the given [node],
+  /// creating it if necessary.
+  NodeChange _getChange(AstNode node) =>
+      changes[node] ??= NodeChange.create(node);
+
   /// Determines whether the given [node], which is a null-aware method
   /// invocation, property access, or index expression, should remain null-aware
   /// after migration.
   bool _shouldStayNullAware(Expression node) {
     Expression target;
-    NodeChange<NodeProducingEditPlan> nodeChangeToUse;
     if (node is PropertyAccess) {
       target = node.target;
-      nodeChangeToUse = const RemoveNullAwarenessFromPropertyAccess();
     } else if (node is MethodInvocation) {
       target = node.target;
-      nodeChangeToUse = const RemoveNullAwarenessFromMethodInvocation();
     } else {
       throw StateError('Unexpected expression type: ${node.runtimeType}');
     }
     if (!_typeSystem.isPotentiallyNullable(target.staticType)) {
-      _addChange(node, (previousChange) {
-        // There should be no previous change because we decide what to do
-        // about `?.` before doing anything else.
-        assert(previousChange is NoChange);
-        return nodeChangeToUse;
-      });
+      (_getChange(node) as NodeChangeForNullAware).removeNullAwareness = true;
       return false;
     }
     return true;
@@ -277,13 +260,9 @@
             return null;
           }
           var conditionValue = conditionalDiscard.keepTrue;
-          _fixBuilder._addChange(node, (previousChange) {
-            // There shouldn't be a previous change for [node] because we
-            // check for dead code before making other modifications.
-            assert(previousChange is NoChange);
-            return EliminateDeadIf(conditionValue,
-                reasons: conditionalDiscard.reasons.toList());
-          });
+          (_fixBuilder._getChange(node) as NodeChangeForConditional)
+            ..conditionValue = conditionValue
+            ..conditionReasons = conditionalDiscard.reasons.toList();
           return conditionValue;
         }
       });
@@ -364,14 +343,21 @@
   DartType modifyExpressionType(Expression node, DartType type) =>
       _wrapExceptions(node, () => type, () {
         if (type.isDynamic) return type;
-        if (!_fixBuilder._typeSystem.isNullable(type)) return type;
         var ancestor = _findNullabilityContextAncestor(node);
-        if (_needsNullCheckDueToStructure(ancestor)) {
-          return _addNullCheck(node, type);
-        }
         var context =
             InferenceContext.getContext(ancestor) ?? DynamicTypeImpl.instance;
-        if (!_fixBuilder._typeSystem.isNullable(context)) {
+        if (!_fixBuilder._typeSystem.isSubtypeOf(type, context)) {
+          // Either a cast or a null check is needed.  We prefer to do a null
+          // check if we can.
+          var nonNullType = _fixBuilder._typeSystem.promoteToNonNull(type);
+          if (_fixBuilder._typeSystem.isSubtypeOf(nonNullType, context)) {
+            return _addNullCheck(node, type);
+          } else {
+            return _addCast(node, context);
+          }
+        }
+        if (!_fixBuilder._typeSystem.isNullable(type)) return type;
+        if (_needsNullCheckDueToStructure(ancestor)) {
           return _addNullCheck(node, type);
         }
         return type;
@@ -384,6 +370,21 @@
     _flowAnalysis = flowAnalysis;
   }
 
+  DartType _addCast(Expression node, DartType contextType) {
+    var checks =
+        _fixBuilder._variables.expressionChecks(_fixBuilder.source, node);
+    var info = checks != null
+        ? AtomicEditInfo(
+            NullabilityFixDescription.checkExpression, checks.edges)
+        : null;
+    (_fixBuilder._getChange(node) as NodeChangeForExpression)
+      ..introduceAsType =
+          (contextType as TypeImpl).toString(withNullability: true)
+      ..introduceAsInfo = info;
+    _flowAnalysis.asExpression_end(node, contextType);
+    return contextType;
+  }
+
   DartType _addNullCheck(Expression node, DartType type) {
     var checks =
         _fixBuilder._variables.expressionChecks(_fixBuilder.source, node);
@@ -391,8 +392,9 @@
         ? AtomicEditInfo(
             NullabilityFixDescription.checkExpression, checks.edges)
         : null;
-    _fixBuilder._addChange(
-        node, (previousChange) => NullCheck(info, previousChange));
+    (_fixBuilder._getChange(node) as NodeChangeForExpression)
+      ..addNullCheck = true
+      ..addNullCheckInfo = info;
     _flowAnalysis.nonNullAssert_end(node);
     return _fixBuilder._typeSystem.promoteToNonNull(type as TypeImpl);
   }
@@ -520,10 +522,42 @@
     if (!_fixBuilder._variables.wasUnnecessaryCast(_fixBuilder.source, node) &&
         BestPracticesVerifier.isUnnecessaryCast(
             node, _fixBuilder._typeSystem)) {
-      _fixBuilder._addChange(
-          node, (previousChange) => RemoveAs(previousChange));
+      (_fixBuilder._getChange(node) as NodeChangeForAsExpression).removeAs =
+          true;
     }
   }
+
+  @override
+  void visitVariableDeclarationList(VariableDeclarationList node) {
+    if (node.type == null) {
+      // TODO(paulberry): for fields, handle inference via override as well.
+      List<DartType> neededTypes = [];
+      List<DartType> inferredTypes = [];
+      bool explicitTypeNeeded = false;
+      for (var variableDeclaration in node.variables) {
+        var neededType = _fixBuilder
+            ._computeMigratedType(variableDeclaration.declaredElement);
+        neededTypes.add(neededType);
+        var inferredType = variableDeclaration.initializer?.staticType ??
+            _fixBuilder.typeProvider.dynamicType;
+        inferredTypes.add(inferredType);
+        if (neededType != inferredType) {
+          explicitTypeNeeded = true;
+        }
+      }
+      if (explicitTypeNeeded) {
+        var firstNeededType = neededTypes[0];
+        if (neededTypes.any((t) => t != firstNeededType)) {
+          throw UnimplementedError(
+              'Different explicit types needed in multi-variable declaration');
+        } else {
+          (_fixBuilder._getChange(node) as NodeChangeForVariableDeclarationList)
+              .addExplicitType = firstNeededType;
+        }
+      }
+    }
+    super.visitVariableDeclarationList(node);
+  }
 }
 
 /// Visitor that computes additional migrations on behalf of [FixBuilder] that
@@ -564,8 +598,9 @@
     var decoratedType = _fixBuilder._variables
         .decoratedTypeAnnotation(_fixBuilder.source, node);
     if (decoratedType.node.isNullable) {
-      _fixBuilder._addChange(node,
-          (previousChange) => MakeNullable(decoratedType, previousChange));
+      (_fixBuilder._getChange(node) as NodeChangeForTypeAnnotation)
+        ..makeNullable = true
+        ..makeNullableType = decoratedType;
     }
     (node as GenericFunctionTypeImpl).type =
         decoratedType.toFinalType(_fixBuilder.typeProvider);
@@ -578,8 +613,9 @@
         .decoratedTypeAnnotation(_fixBuilder.source, node);
     var type = decoratedType.type;
     if (!type.isDynamic && !type.isVoid && decoratedType.node.isNullable) {
-      _fixBuilder._addChange(node,
-          (previousChange) => MakeNullable(decoratedType, previousChange));
+      (_fixBuilder._getChange(node) as NodeChangeForTypeAnnotation)
+        ..makeNullable = true
+        ..makeNullableType = decoratedType;
     }
     node.type = decoratedType.toFinalType(_fixBuilder.typeProvider);
     super.visitTypeName(node);
@@ -601,15 +637,15 @@
       if (annotation.elementAnnotation.isRequired) {
         // TODO(paulberry): what if `@required` isn't the first annotation?
         // Will we produce something that isn't grammatical?
-        _fixBuilder._addChange(
-            annotation,
-            (previousChange) =>
-                RequiredAnnotationToRequiredKeyword(info, previousChange));
+        (_fixBuilder._getChange(annotation) as NodeChangeForAnnotation)
+          ..changeToRequiredKeyword = true
+          ..changeToRequiredKeywordInfo = info;
         return;
       }
     }
     // Otherwise create a new `required` keyword.
-    _fixBuilder._addChange(parameter,
-        (previousChange) => AddRequiredKeyword(info, previousChange));
+    (_fixBuilder._getChange(parameter) as NodeChangeForDefaultFormalParameter)
+      ..addRequiredKeyword = true
+      ..addRequiredKeywordInfo = info;
   }
 }
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index 3a23ae3..6aee695 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -74,7 +74,8 @@
       // If there is no `on Type` part of the catch clause, the type is dynamic.
       if (exceptionType == null) {
         exceptionType = DecoratedType.forImplicitType(
-            _typeProvider, _typeProvider.dynamicType, _graph);
+            _typeProvider, _typeProvider.dynamicType, _graph,
+            offset: node.offset);
         instrumentation?.implicitType(
             source, node.exceptionParameter, exceptionType);
       }
@@ -83,8 +84,9 @@
     }
     if (node.stackTraceParameter != null) {
       // The type of stack traces is always StackTrace (non-nullable).
-      var nullabilityNode = NullabilityNode.forInferredType();
-      _graph.makeNonNullable(nullabilityNode,
+      var nullabilityNode = NullabilityNode.forInferredType(
+          offset: node.stackTraceParameter.offset);
+      _graph.makeNonNullableUnion(nullabilityNode,
           StackTraceTypeOrigin(source, node.stackTraceParameter));
       var stackTraceType =
           DecoratedType(_typeProvider.stackTraceType, nullabilityNode);
@@ -139,7 +141,7 @@
           _createDecoratedTypeForClass(classElement, node);
       var functionType = DecoratedType.forImplicitFunction(
           _typeProvider, constructorElement.type, _graph.never, _graph,
-          returnType: decoratedReturnType);
+          returnType: decoratedReturnType, offset: node.offset);
       _variables.recordDecoratedElementType(constructorElement, functionType);
     }
     return null;
@@ -173,7 +175,8 @@
     if (node.identifier != null) {
       if (type == null) {
         type = DecoratedType.forImplicitType(
-            _typeProvider, node.declaredElement.type, _graph);
+            _typeProvider, node.declaredElement.type, _graph,
+            offset: node.offset);
         instrumentation?.implicitType(source, node, type);
       }
       _variables.recordDecoratedElementType(
@@ -210,8 +213,8 @@
 
     makeNonNullNode([AstNode forNode]) {
       forNode ??= node;
-      final graphNode = NullabilityNode.forInferredType();
-      _graph.makeNonNullable(graphNode, EnumValueOrigin(source, forNode));
+      final graphNode = NullabilityNode.forInferredType(offset: forNode.offset);
+      _graph.makeNonNullableUnion(graphNode, EnumValueOrigin(source, forNode));
       return graphNode;
     }
 
@@ -291,7 +294,8 @@
     } else {
       // Inferred return type.
       decoratedReturnType = DecoratedType.forImplicitType(
-          _typeProvider, functionType.returnType, _graph);
+          _typeProvider, functionType.returnType, _graph,
+          offset: node.offset);
       instrumentation?.implicitReturnType(source, node, decoratedReturnType);
     }
     var previousPositionalParameters = _positionalParameters;
@@ -397,8 +401,9 @@
       if (node is TypeName) {
         if (node.typeArguments == null) {
           typeArguments = type.typeArguments
-              .map((t) =>
-                  DecoratedType.forImplicitType(_typeProvider, t, _graph))
+              .map((t) => DecoratedType.forImplicitType(
+                  _typeProvider, t, _graph,
+                  offset: node.offset))
               .toList();
           instrumentation?.implicitTypeArguments(source, node, typeArguments);
         } else {
@@ -413,7 +418,8 @@
       var returnType = node.returnType;
       if (returnType == null) {
         decoratedReturnType = DecoratedType.forImplicitType(
-            _typeProvider, DynamicTypeImpl.instance, _graph);
+            _typeProvider, DynamicTypeImpl.instance, _graph,
+            offset: node.offset);
         instrumentation?.implicitReturnType(source, node, decoratedReturnType);
       } else {
         decoratedReturnType = returnType.accept(this);
@@ -454,7 +460,8 @@
       // synthesize new nodes for it).  These nodes will be unioned with the
       // typedef nodes by the edge builder.
       decoratedType = DecoratedType.forImplicitFunction(
-          _typeProvider, type, nullabilityNode, _graph);
+          _typeProvider, type, nullabilityNode, _graph,
+          offset: node.offset);
     } else {
       decoratedType = DecoratedType(type, nullabilityNode,
           typeArguments: typeArguments,
@@ -472,7 +479,7 @@
     var commentToken = node.endToken.next.precedingComments;
     switch (_classifyComment(commentToken)) {
       case _NullabilityComment.bang:
-        _graph.makeNonNullable(
+        _graph.makeNonNullableUnion(
             decoratedType.node, NullabilityCommentOrigin(source, node));
         break;
       case _NullabilityComment.question:
@@ -499,7 +506,8 @@
     if (bound != null) {
       decoratedBound = bound.accept(this);
     } else {
-      var nullabilityNode = NullabilityNode.forInferredType();
+      var nullabilityNode =
+          NullabilityNode.forInferredType(offset: node.offset);
       decoratedBound = DecoratedType(_typeProvider.objectType, nullabilityNode);
       _graph.connect(_graph.always, nullabilityNode,
           AlwaysNullableTypeOrigin.forElement(element));
@@ -519,7 +527,8 @@
       var declaredElement = variable.declaredElement;
       if (type == null) {
         type = DecoratedType.forImplicitType(
-            _typeProvider, declaredElement.type, _graph);
+            _typeProvider, declaredElement.type, _graph,
+            offset: variable.offset);
         instrumentation?.implicitType(source, node, type);
       }
       _variables.recordDecoratedElementType(declaredElement, type);
@@ -578,7 +587,8 @@
     } else {
       // Inferred return type.
       decoratedReturnType = DecoratedType.forImplicitType(
-          _typeProvider, functionType.returnType, _graph);
+          _typeProvider, functionType.returnType, _graph,
+          offset: node.offset);
       instrumentation?.implicitReturnType(source, node, decoratedReturnType);
     }
     var previousPositionalParameters = _positionalParameters;
@@ -621,14 +631,16 @@
         decoratedType = type.accept(this);
       } else {
         decoratedType = DecoratedType.forImplicitType(
-            _typeProvider, declaredElement.type, _graph);
+            _typeProvider, declaredElement.type, _graph,
+            offset: node.offset);
         instrumentation?.implicitType(source, node, decoratedType);
       }
     } else {
       DecoratedType decoratedReturnType;
       if (type == null) {
         decoratedReturnType = DecoratedType.forImplicitType(
-            _typeProvider, DynamicTypeImpl.instance, _graph);
+            _typeProvider, DynamicTypeImpl.instance, _graph,
+            offset: node.offset);
         instrumentation?.implicitReturnType(source, node, decoratedReturnType);
       } else {
         decoratedReturnType = type.accept(this);
@@ -687,8 +699,9 @@
     for (var supertype in supertypes) {
       DecoratedType decoratedSupertype;
       if (supertype == null) {
-        var nullabilityNode = NullabilityNode.forInferredType();
-        _graph.makeNonNullable(
+        var nullabilityNode =
+            NullabilityNode.forInferredType(offset: astNode.offset);
+        _graph.makeNonNullableUnion(
             nullabilityNode, NonNullableObjectSuperclass(source, astNode));
         decoratedSupertype =
             DecoratedType(_typeProvider.objectType, nullabilityNode);
diff --git a/pkg/nnbd_migration/lib/src/nullability_node.dart b/pkg/nnbd_migration/lib/src/nullability_node.dart
index 1acb613..ad77386 100644
--- a/pkg/nnbd_migration/lib/src/nullability_node.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_node.dart
@@ -29,8 +29,15 @@
   @override
   Iterable<NullabilityNode> get guards => upstreamNodes.skip(1);
 
+  /// Indicates whether it's possible for migration to cope with this edge being
+  /// unsatisfied by inserting a null check.  Graph propagation favors
+  /// satisfying uncheckable edges over satisfying hard edges.
+  bool get isCheckable =>
+      _kind == _NullabilityEdgeKind.soft || _kind == _NullabilityEdgeKind.hard;
+
   @override
-  bool get isHard => _kind != _NullabilityEdgeKind.soft;
+  bool get isHard =>
+      _kind == _NullabilityEdgeKind.hard || _kind == _NullabilityEdgeKind.union;
 
   @override
   bool get isSatisfied {
@@ -52,8 +59,7 @@
   @override
   bool get isUpstreamTriggered {
     if (!isHard) return false;
-    if (destinationNode._state != NullabilityState.nonNullable) return false;
-    return true;
+    return destinationNode.nonNullIntent.isPresent;
   }
 
   @override
@@ -65,6 +71,9 @@
     switch (_kind) {
       case _NullabilityEdgeKind.soft:
         break;
+      case _NullabilityEdgeKind.uncheckable:
+        edgeDecorations.add('uncheckable');
+        break;
       case _NullabilityEdgeKind.hard:
         edgeDecorations.add('hard');
         break;
@@ -92,10 +101,6 @@
 
   final NullabilityMigrationInstrumentation /*?*/ instrumentation;
 
-  /// Set containing all [NullabilityNode]s that have been passed as the
-  /// `upstreamNode` argument to [connect].
-  final _allUpstreamNodes = Set<NullabilityNode>.identity();
-
   /// Returns a [NullabilityNode] that is a priori nullable.
   ///
   /// Propagation of nullability always proceeds downstream starting at this
@@ -114,45 +119,28 @@
   /// A set containing all of the nodes in the graph.
   final Set<NullabilityNode> nodes = {};
 
-  /// After execution of [_propagateAlways], a list of all nodes reachable from
-  /// [always] via zero or more edges of kind [_NullabilityEdgeKind.union].
-  final List<NullabilityNode> _unionedWithAlways = [];
-
-  /// During any given stage of nullability propagation, a list of all the edges
-  /// that need to be examined before the stage is complete.
-  final List<NullabilityEdge> _pendingEdges = [];
-
-  /// During and after nullability propagation, a list of all edges that
-  /// couldn't be satisfied.
-  final List<NullabilityEdge> _unsatisfiedEdges = [];
-
-  /// During and after nullability propagation, a list of all substitution nodes
-  /// that couldn't be satisfied.
-  final List<NullabilityNodeForSubstitution> _unsatisfiedSubstitutions = [];
-
-  /// During execution of [_propagateDownstream], a list of all the substitution
-  /// nodes that have not yet been resolved.
-  List<NullabilityNodeForSubstitution> _pendingSubstitutions = [];
-
   NullabilityGraph({this.instrumentation});
 
-  /// After calling [propagate], this getter may be queried to access the set of
-  /// edges that could not be satisfied.
-  Iterable<NullabilityEdge> get unsatisfiedEdges => _unsatisfiedEdges;
-
-  /// After calling [propagate], this getter may be queried to access the set of
-  /// substitution nodes that could not be satisfied.
-  Iterable<NullabilityNodeForSubstitution> get unsatisfiedSubstitutions =>
-      _unsatisfiedSubstitutions;
-
   /// Records that [sourceNode] is immediately upstream from [destinationNode].
   ///
   /// Returns the edge created by the connection.
   NullabilityEdge connect(NullabilityNode sourceNode,
       NullabilityNode destinationNode, EdgeOrigin origin,
-      {bool hard: false, List<NullabilityNode> guards: const []}) {
+      {bool hard: false,
+      bool checkable = true,
+      List<NullabilityNode> guards: const []}) {
+    // Hard nodes are always considered checkable, since the only time they
+    // arise is from an explicit use of an expression in a context that requires
+    // non-nullability (and hence, a null check could be added in that
+    // location).  Verify that the flags passed in by the caller are consistent
+    // with this.
+    assert(checkable || !hard);
     var upstreamNodes = [sourceNode]..addAll(guards);
-    var kind = hard ? _NullabilityEdgeKind.hard : _NullabilityEdgeKind.soft;
+    var kind = hard
+        ? _NullabilityEdgeKind.hard
+        : checkable
+            ? _NullabilityEdgeKind.soft
+            : _NullabilityEdgeKind.uncheckable;
     return _connect(upstreamNodes, destinationNode, kind, origin);
   }
 
@@ -168,6 +156,12 @@
     return connect(node, never, origin, hard: hard, guards: guards);
   }
 
+  /// Creates union edges that will guarantee that the given [node] is
+  /// non-nullable.
+  void makeNonNullableUnion(NullabilityNode node, EdgeOrigin origin) {
+    union(node, never, origin);
+  }
+
   /// Creates a graph edge that will try to force the given [node] to be
   /// nullable.
   void makeNullable(NullabilityNode node, EdgeOrigin origin,
@@ -189,12 +183,11 @@
 
   /// Determines the nullability of each node in the graph by propagating
   /// nullability information from one node to another.
-  void propagate() {
+  PropagationResult propagate() {
     if (_debugBeforePropagation) _debugDump();
-    _propagateAlways();
-    _propagateUpstream();
-    _propagateDownstream();
+    var propagationState = _PropagationState(always, never).result;
     if (_debugAfterPropagation) _debugDump();
+    return propagationState;
   }
 
   /// Records that nodes [x] and [y] should have exactly the same nullability.
@@ -215,7 +208,6 @@
     for (var node in nodes) {
       node.resetState();
     }
-    _unionedWithAlways.clear();
     //
     // Reset the state of the listener.
     //
@@ -243,7 +235,6 @@
   }
 
   void _connectDownstream(NullabilityNode upstreamNode, NullabilityEdge edge) {
-    _allUpstreamNodes.add(upstreamNode);
     upstreamNode._downstreamEdges.add(edge);
     if (upstreamNode is _NullabilityNodeCompound) {
       for (var component in upstreamNode._components) {
@@ -253,189 +244,68 @@
   }
 
   void _debugDump() {
-    for (var upstreamNode in _allUpstreamNodes) {
-      var edges = upstreamNode._downstreamEdges;
-      var destinations =
-          edges.where((edge) => edge.sourceNode == upstreamNode).map((edge) {
-        var suffixes = <Object>[];
+    Set<NullabilityNode> visitedNodes = {};
+    Map<NullabilityNode, String> shortNames = {};
+    int counter = 0;
+    String nameNode(NullabilityNode node) {
+      if (node.isImmutable) {
+        var name = 'n${counter++}';
+        print('  $name [label="$node" shape=none]');
+        return name;
+      }
+      var name = shortNames[node];
+      if (name == null) {
+        shortNames[node] = name = 'n${counter++}';
+        String styleSuffix = node.isNullable ? ' style=filled' : '';
+        String intentSuffix =
+            node.nonNullIntent.isPresent ? ', non-null intent' : '';
+        String label = '$node (${node._nullability}$intentSuffix)';
+        print('  $name [label="$label"$styleSuffix]');
+        if (node is _NullabilityNodeCompound) {
+          for (var component in node._components) {
+            print('  ${nameNode(component)} -> $name [style=dashed]');
+          }
+        }
+      }
+      return name;
+    }
+
+    void visitNode(NullabilityNode node) {
+      if (!visitedNodes.add(node)) return;
+      for (var edge in node._upstreamEdges) {
+        String suffix;
         if (edge.isUnion) {
-          suffixes.add('union');
+          suffix = ' [label="union"]';
         } else if (edge.isHard) {
-          suffixes.add('hard');
+          suffix = ' [label="hard"]';
+        } else if (edge.isCheckable) {
+          suffix = '';
+        } else {
+          suffix = ' [label="uncheckable"]';
         }
-        suffixes.addAll(edge.guards);
-        var suffix = suffixes.isNotEmpty ? ' (${suffixes.join(', ')})' : '';
-        return '${edge.destinationNode}$suffix';
-      });
-      var state = upstreamNode._state;
-      print('$upstreamNode ($state) -> ${destinations.join(', ')}');
-    }
-  }
-
-  /// Propagates nullability downstream along union edges from "always".
-  void _propagateAlways() {
-    _unionedWithAlways.add(always);
-    _pendingEdges.addAll(always._downstreamEdges);
-    while (_pendingEdges.isNotEmpty) {
-      var edge = _pendingEdges.removeLast();
-      if (!edge.isUnion) continue;
-      // Union edges always have exactly one upstream node, so we don't need to
-      // check whether all upstream nodes are nullable.
-      assert(edge.upstreamNodes.length == 1);
-      var node = edge.destinationNode;
-      if (node is NullabilityNodeMutable && !node.isNullable) {
-        _unionedWithAlways.add(node);
-        _setState(_PropagationStep(
-            node, NullabilityState.ordinaryNullable, StateChangeReason.union,
-            edge: edge));
-        // Was not previously nullable, so we need to propagate.
-        _pendingEdges.addAll(node._downstreamEdges);
-      }
-    }
-  }
-
-  /// Propagates nullability downstream.
-  void _propagateDownstream() {
-    assert(_pendingEdges.isEmpty);
-    for (var node in _unionedWithAlways) {
-      _pendingEdges.addAll(node._downstreamEdges);
-    }
-    while (true) {
-      while (_pendingEdges.isNotEmpty) {
-        var edge = _pendingEdges.removeLast();
-        if (!edge.isTriggered) continue;
-        var node = edge.destinationNode;
-        if (node._state == NullabilityState.nonNullable) {
-          // The node has already been marked as non-nullable, so the edge can't
-          // be satisfied.
-          _unsatisfiedEdges.add(edge);
-          continue;
-        }
-        if (node is NullabilityNodeMutable && !node.isNullable) {
-          _setNullable(_PropagationStep(node, NullabilityState.ordinaryNullable,
-              StateChangeReason.downstream,
-              edge: edge));
-        }
-      }
-      if (_pendingSubstitutions.isEmpty) break;
-      var oldPendingSubstitutions = _pendingSubstitutions;
-      _pendingSubstitutions = [];
-      for (var node in oldPendingSubstitutions) {
-        _resolvePendingSubstitution(node);
-      }
-    }
-  }
-
-  /// Propagates non-null intent upstream along unconditional control flow
-  /// lines.
-  void _propagateUpstream() {
-    assert(_pendingEdges.isEmpty);
-    _pendingEdges.addAll(never._upstreamEdges);
-    while (_pendingEdges.isNotEmpty) {
-      var edge = _pendingEdges.removeLast();
-      // We only propagate for nodes that are "upstream triggered".  At this
-      // point of propagation, a node is upstream triggered if it is hard.
-      assert(edge.isUpstreamTriggered == edge.isHard);
-      if (!edge.isHard) continue;
-      var node = edge.sourceNode;
-      if (node is NullabilityNodeMutable &&
-          node._state == NullabilityState.undetermined) {
-        _setState(_PropagationStep(
-            node, NullabilityState.nonNullable, StateChangeReason.upstream,
-            edge: edge));
-        // Was not previously in the set of non-null intent nodes, so we need to
-        // propagate.
-        _pendingEdges.addAll(node._upstreamEdges);
-      }
-    }
-  }
-
-  void _resolvePendingSubstitution(
-      NullabilityNodeForSubstitution substitutionNode) {
-    assert(substitutionNode._state.isNullable);
-    // If both nodes pointed to by the substitution node are in the non-nullable
-    // state, then no resolution is needed; the substitution node can’t be
-    // satisfied.
-    if (substitutionNode.innerNode._state == NullabilityState.nonNullable &&
-        substitutionNode.outerNode._state == NullabilityState.nonNullable) {
-      _unsatisfiedSubstitutions.add(substitutionNode);
-      return;
-    }
-
-    // Otherwise, if the outer node is in a nullable state, then no resolution
-    // is needed because the substitution node is already satisfied.
-    if (substitutionNode.outerNode.isNullable) {
-      return;
-    }
-
-    // Otherwise, if the inner node is in the non-nullable state, then we set
-    // the outer node to the ordinary nullable state.
-    if (substitutionNode.innerNode._state == NullabilityState.nonNullable) {
-      _setNullable(_PropagationStep(
-          substitutionNode.outerNode as NullabilityNodeMutable,
-          NullabilityState.ordinaryNullable,
-          StateChangeReason.substituteOuter,
-          substitutionNode: substitutionNode));
-      return;
-    }
-
-    // Otherwise, we set the inner node to the exact nullable state, and we
-    // propagate this state upstream as far as possible using the following
-    // rule: if there is an edge A → B, where A is in the undetermined or
-    // ordinary nullable state, and B is in the exact nullable state, then A’s
-    // state is changed to exact nullable.
-    var pendingEdges = <NullabilityEdge>[];
-    var node = substitutionNode.innerNode;
-    if (node is NullabilityNodeMutable) {
-      var oldState = _setNullable(_PropagationStep(node,
-          NullabilityState.exactNullable, StateChangeReason.substituteInner,
-          substitutionNode: substitutionNode));
-      if (oldState != NullabilityState.exactNullable) {
-        // Was not previously in the "exact nullable" state.  Need to
-        // propagate.
-        for (var edge in node._upstreamEdges) {
-          pendingEdges.add(edge);
-        }
-
-        // TODO(mfairhurst): should this propagate back up outerContainerNodes?
-      }
-    }
-    while (pendingEdges.isNotEmpty) {
-      var edge = pendingEdges.removeLast();
-      var node = edge.sourceNode;
-      if (node is NullabilityNodeMutable) {
-        var oldState = _setNullable(_PropagationStep(node,
-            NullabilityState.exactNullable, StateChangeReason.exactUpstream,
-            edge: edge));
-        if (oldState != NullabilityState.exactNullable) {
-          // Was not previously in the "exact nullable" state.  Need to
-          // propagate.
-          for (var edge in node._upstreamEdges) {
-            pendingEdges.add(edge);
+        var upstreamNodes = edge.upstreamNodes;
+        if (upstreamNodes.length == 1) {
+          print(
+              '  ${nameNode(upstreamNodes.single)} -> ${nameNode(node)}$suffix');
+        } else {
+          var tmpName = 'n${counter++}';
+          print('  $tmpName [label=""]');
+          print('  $tmpName -> ${nameNode(node)}$suffix}');
+          for (var upstreamNode in upstreamNodes) {
+            print('  ${nameNode(upstreamNode)} -> $tmpName');
           }
         }
       }
     }
-  }
 
-  NullabilityState _setNullable(_PropagationStep propagationStep) {
-    var node = propagationStep.node;
-    assert(propagationStep.newState.isNullable);
-    var oldState = node._state;
-    _setState(propagationStep);
-    if (!oldState.isNullable) {
-      // Was not previously nullable, so we need to propagate.
-      _pendingEdges.addAll(node._downstreamEdges);
-      if (node is NullabilityNodeForSubstitution) {
-        _pendingSubstitutions.add(node);
-      }
+    print('digraph G {');
+    print('  rankdir="LR"');
+    visitNode(always);
+    visitNode(never);
+    for (var node in nodes) {
+      visitNode(node);
     }
-    return oldState;
-  }
-
-  void _setState(_PropagationStep propagationStep) {
-    propagationStep.node._state = propagationStep.newState;
-    instrumentation?.propagationStep(propagationStep);
+    print('}');
   }
 }
 
@@ -520,8 +390,8 @@
 
   /// Creates a [NullabilityNode] representing the nullability of a variable
   /// whose type is determined by type inference.
-  factory NullabilityNode.forInferredType() =>
-      _NullabilityNodeSimple('inferred');
+  factory NullabilityNode.forInferredType({int offset}) =>
+      _NullabilityNodeSimple('inferred${offset == null ? '' : '($offset)'}');
 
   /// Creates a [NullabilityNode] representing the nullability of an
   /// expression which is nullable iff either [a] or [b] is nullable.
@@ -569,12 +439,16 @@
   /// nullability migration needs to decide whether it is optional or required.
   bool get isPossiblyOptional => _isPossiblyOptional;
 
+  /// After nullability propagation, this getter can be used to query the node's
+  /// non-null intent state.
+  NonNullIntent get nonNullIntent;
+
   @override
   Iterable<EdgeInfo> get upstreamEdges => _upstreamEdges;
 
   String get _debugPrefix;
 
-  NullabilityState get _state;
+  Nullability get _nullability;
 
   /// Records the fact that an invocation was made to a function with named
   /// parameters, and the named parameter associated with this node was not
@@ -678,33 +552,57 @@
 /// Nearly all nullability nodes derive from this class; the only exceptions are
 /// the fixed nodes "always "never".
 abstract class NullabilityNodeMutable extends NullabilityNode {
-  NullabilityState _state;
+  Nullability _nullability;
+
+  NonNullIntent _nonNullIntent;
 
   NullabilityNodeMutable._(
-      {NullabilityState initialState: NullabilityState.undetermined})
-      : _state = initialState,
+      {Nullability initialNullability = Nullability.nonNullable})
+      : _nullability = initialNullability,
+        _nonNullIntent = NonNullIntent.none,
         super._();
 
   @override
-  bool get isExactNullable => _state == NullabilityState.exactNullable;
+  bool get isExactNullable => _nullability.isExactNullable;
 
   @override
   bool get isImmutable => false;
 
   @override
-  bool get isNullable => _state.isNullable;
+  bool get isNullable => _nullability.isNullable;
+
+  @override
+  NonNullIntent get nonNullIntent => _nonNullIntent;
 
   @override
   void resetState() {
-    _state = NullabilityState.undetermined;
+    _nullability = Nullability.nonNullable;
+    _nonNullIntent = NonNullIntent.none;
   }
 }
 
+/// Information produced by [NullabilityGraph.propagate] about the results of
+/// graph propagation.
+class PropagationResult {
+  /// A list of all edges that couldn't be satisfied.
+  final List<NullabilityEdge> unsatisfiedEdges = [];
+
+  /// A list of all substitution nodes that couldn't be satisfied.
+  final List<NullabilityNodeForSubstitution> unsatisfiedSubstitutions = [];
+
+  PropagationResult._();
+}
+
 /// Kinds of nullability edges
 enum _NullabilityEdgeKind {
-  /// Soft edge.  Propagates nullability downstream only.
+  /// Soft edge.  Propagates nullability downstream only.  May be overridden by
+  /// suggestions that the user intends non-nullability.
   soft,
 
+  /// Uncheckable edge.  Propagates nullability downstream only.  May not be
+  /// overridden by suggestions that the user intends non-nullability.
+  uncheckable,
+
   /// Hard edge.  Propagates nullability downstream and non-nullability
   /// upstream.
   hard,
@@ -749,9 +647,12 @@
   bool get isImmutable => true;
 
   @override
-  NullabilityState get _state => isNullable
-      ? NullabilityState.ordinaryNullable
-      : NullabilityState.nonNullable;
+  NonNullIntent get nonNullIntent =>
+      isNullable ? NonNullIntent.none : NonNullIntent.direct;
+
+  @override
+  Nullability get _nullability =>
+      isNullable ? Nullability.ordinaryNullable : Nullability.nonNullable;
 
   @override
   void resetState() {
@@ -763,26 +664,175 @@
   @override
   final String _debugPrefix;
 
-  _NullabilityNodeSimple(this._debugPrefix)
-      : super._(initialState: NullabilityState.undetermined);
+  _NullabilityNodeSimple(this._debugPrefix) : super._();
 }
 
-class _PropagationStep implements PropagationInfo {
-  @override
-  final NullabilityNodeMutable node;
+/// Workspace for performing graph propagation.
+///
+/// Graph propagation is performed immediately upon construction, so as soon as
+/// the caller has constructed this object, the graph has been propagated and
+/// the results of propagation can be retrieved from [result].
+class _PropagationState {
+  /// The result of propagation, for sharing with the client.
+  final PropagationResult result = PropagationResult._();
 
-  @override
-  final NullabilityState newState;
+  /// The graph's one and only "always" node.
+  final NullabilityNode _always;
 
-  @override
-  final StateChangeReason reason;
+  /// The graph's one and only "never" node.
+  final NullabilityNode _never;
 
-  @override
-  final NullabilityEdge edge;
+  /// During any given stage of nullability propagation, a list of all the edges
+  /// that need to be examined before the stage is complete.
+  final List<NullabilityEdge> _pendingEdges = [];
 
-  @override
-  final NullabilityNodeForSubstitution substitutionNode;
+  /// During execution of [_propagateDownstream], a list of all the substitution
+  /// nodes that have not yet been resolved.
+  List<NullabilityNodeForSubstitution> _pendingSubstitutions = [];
 
-  _PropagationStep(this.node, this.newState, this.reason,
-      {this.edge, this.substitutionNode});
+  _PropagationState(this._always, this._never) {
+    _propagateUpstream();
+    _propagateDownstream();
+  }
+
+  /// Propagates nullability downstream.
+  void _propagateDownstream() {
+    assert(_pendingEdges.isEmpty);
+    _pendingEdges.addAll(_always._downstreamEdges);
+    while (true) {
+      while (_pendingEdges.isNotEmpty) {
+        var edge = _pendingEdges.removeLast();
+        if (!edge.isTriggered) continue;
+        var node = edge.destinationNode;
+        var nonNullIntent = node.nonNullIntent;
+        if (nonNullIntent.isPresent) {
+          if (edge.isCheckable) {
+            // The node has already been marked as having non-null intent, and
+            // the edge can be addressed by adding a null check, so we prefer to
+            // leave the edge unsatisfied and let the null check happen.
+            result.unsatisfiedEdges.add(edge);
+            continue;
+          }
+          if (nonNullIntent.isDirect) {
+            // The node has direct non-null intent so we aren't in a position to
+            // mark it as nullable.
+            result.unsatisfiedEdges.add(edge);
+            continue;
+          }
+        }
+        if (node is NullabilityNodeMutable && !node.isNullable) {
+          _setNullable(node, Nullability.ordinaryNullable);
+        }
+      }
+      if (_pendingSubstitutions.isEmpty) break;
+      var oldPendingSubstitutions = _pendingSubstitutions;
+      _pendingSubstitutions = [];
+      for (var node in oldPendingSubstitutions) {
+        _resolvePendingSubstitution(node);
+      }
+    }
+  }
+
+  /// Propagates non-null intent upstream along unconditional control flow
+  /// lines.
+  void _propagateUpstream() {
+    assert(_pendingEdges.isEmpty);
+    _pendingEdges.addAll(_never._upstreamEdges);
+    while (_pendingEdges.isNotEmpty) {
+      var edge = _pendingEdges.removeLast();
+      // We only propagate for nodes that are "upstream triggered".  At this
+      // point of propagation, a node is upstream triggered if it is hard.
+      assert(edge.isUpstreamTriggered == edge.isHard);
+      if (!edge.isHard) continue;
+      var node = edge.sourceNode;
+      if (node is NullabilityNodeMutable) {
+        var oldNonNullIntent = node._nonNullIntent;
+        if (edge.isUnion && edge.destinationNode == _never) {
+          // If a node is unioned with "never" then it's considered to have
+          // direct non-null intent.
+          node._nonNullIntent = NonNullIntent.direct;
+        } else {
+          node._nonNullIntent = oldNonNullIntent.addIndirect();
+        }
+        if (!oldNonNullIntent.isPresent) {
+          // We did not previously have non-null intent, so we need to
+          // propagate.
+          _pendingEdges.addAll(node._upstreamEdges);
+        }
+      }
+    }
+  }
+
+  void _resolvePendingSubstitution(
+      NullabilityNodeForSubstitution substitutionNode) {
+    assert(substitutionNode._nullability.isNullable);
+    // If both nodes pointed to by the substitution node have non-null intent,
+    // then no resolution is needed; the substitution node can’t be satisfied.
+    if (substitutionNode.innerNode.nonNullIntent.isPresent &&
+        substitutionNode.outerNode.nonNullIntent.isPresent) {
+      result.unsatisfiedSubstitutions.add(substitutionNode);
+      return;
+    }
+
+    // Otherwise, if the outer node is in a nullable state, then no resolution
+    // is needed because the substitution node is already satisfied.
+    if (substitutionNode.outerNode.isNullable) {
+      return;
+    }
+
+    // Otherwise, if the inner node has non-null intent, then we set the outer
+    // node to the ordinary nullable state.
+    if (substitutionNode.innerNode.nonNullIntent.isPresent) {
+      _setNullable(substitutionNode.outerNode as NullabilityNodeMutable,
+          Nullability.ordinaryNullable);
+      return;
+    }
+
+    // Otherwise, we set the inner node to the exact nullable state, and we
+    // propagate this state upstream as far as possible using the following
+    // rule: if there is an edge A → B, where A is in the undetermined or
+    // ordinary nullable state, and B is in the exact nullable state, then A’s
+    // state is changed to exact nullable.
+    var pendingEdges = <NullabilityEdge>[];
+    var node = substitutionNode.innerNode;
+    if (node is NullabilityNodeMutable) {
+      var oldNullability = _setNullable(node, Nullability.exactNullable);
+      if (!oldNullability.isExactNullable) {
+        // Was not previously in the "exact nullable" state.  Need to
+        // propagate.
+        for (var edge in node._upstreamEdges) {
+          pendingEdges.add(edge);
+        }
+
+        // TODO(mfairhurst): should this propagate back up outerContainerNodes?
+      }
+    }
+    while (pendingEdges.isNotEmpty) {
+      var edge = pendingEdges.removeLast();
+      var node = edge.sourceNode;
+      if (node is NullabilityNodeMutable) {
+        var oldNullability = _setNullable(node, Nullability.exactNullable);
+        if (!oldNullability.isExactNullable) {
+          // Was not previously in the "exact nullable" state.  Need to
+          // propagate.
+          for (var edge in node._upstreamEdges) {
+            pendingEdges.add(edge);
+          }
+        }
+      }
+    }
+  }
+
+  Nullability _setNullable(NullabilityNodeMutable node, Nullability newState) {
+    var oldState = node._nullability;
+    node._nullability = newState;
+    if (!oldState.isNullable) {
+      // Was not previously nullable, so we need to propagate.
+      _pendingEdges.addAll(node._downstreamEdges);
+      if (node is NullabilityNodeForSubstitution) {
+        _pendingSubstitutions.add(node);
+      }
+    }
+    return oldState;
+  }
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart b/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
index 80e3c6e..3ac4488 100644
--- a/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
@@ -6,6 +6,8 @@
 // and extract into a separate package, generate testing and mirrors, and
 // reimport that into the SDK, before cut and paste gets out of hand.
 
+import 'dart:async';
+
 /// This is a modified version of dartdoc's
 /// SubprocessLauncher from test/src/utils.dart, for use with the
 /// nnbd_migration script.
@@ -56,6 +58,30 @@
   SubprocessLauncher(this.context, [Map<String, String> environment])
       : this.environmentDefaults = environment ?? <String, String>{};
 
+  /// Wraps [runStreamedImmediate] as a closure around
+  /// [maxParallel.addFutureFromClosure].
+  ///
+  /// This essentially implements a 'make -j N' limit for all subcommands.
+  Future<Iterable<Map>> runStreamed(String executable, List<String> arguments,
+      {String workingDirectory,
+      Map<String, String> environment,
+      bool includeParentEnvironment = true,
+      void Function(String) perLine}) async {
+    Completer<Future<Iterable<Map>>> startedProcess = Completer();
+
+    await maxParallel.addFutureFromClosure(() async {
+      Future<Iterable<Map>> runStreamedImmediateFuture;
+      runStreamedImmediateFuture = runStreamedImmediate(executable, arguments,
+          workingDirectory: workingDirectory,
+          environment: environment,
+          includeParentEnvironment: includeParentEnvironment,
+          perLine: perLine);
+      startedProcess.complete(runStreamedImmediateFuture);
+      return runStreamedImmediateFuture;
+    });
+    return await startedProcess.future;
+  }
+
   /// A wrapper around start/await process.exitCode that will display the
   /// output of the executable continuously and fail on non-zero exit codes.
   /// It will also parse any valid JSON objects (one per line) it encounters
@@ -66,7 +92,8 @@
   /// Windows (though some of the bashisms will no longer make sense).
   /// TODO(jcollins-g): refactor to return a stream of stderr/stdout lines
   ///                   and their associated JSON objects.
-  Future<Iterable<Map>> runStreamed(String executable, List<String> arguments,
+  Future<Iterable<Map>> runStreamedImmediate(
+      String executable, List<String> arguments,
       {String workingDirectory,
       Map<String, String> environment,
       bool includeParentEnvironment = true,
diff --git a/pkg/nnbd_migration/lib/src/variables.dart b/pkg/nnbd_migration/lib/src/variables.dart
index b433166..e626ca4 100644
--- a/pkg/nnbd_migration/lib/src/variables.dart
+++ b/pkg/nnbd_migration/lib/src/variables.dart
@@ -236,6 +236,14 @@
       element = element.declaration;
     }
 
+    if (element is FunctionTypeAliasElement) {
+      // For `typedef F<T> = Function(T)`, get the `function` which is (in this
+      // case) `Function(T)`. Without this we would get `Function<T>(T)` which
+      // is incorrect. This is a known issue with `.type` on typedefs in the
+      // analyzer.
+      element = (element as FunctionTypeAliasElement).function;
+    }
+
     if (element is FunctionTypedElement) {
       decoratedType =
           _alreadyMigratedCodeDecorator.decorate(element.type, element);
diff --git a/pkg/nnbd_migration/pubspec.yaml b/pkg/nnbd_migration/pubspec.yaml
index 6125049..47fa190 100644
--- a/pkg/nnbd_migration/pubspec.yaml
+++ b/pkg/nnbd_migration/pubspec.yaml
@@ -5,6 +5,7 @@
 dependencies:
   _fe_analyzer_shared: 1.0.0
   analyzer: ^0.37.0
+  path: ^1.6.2
 dev_dependencies:
   args: ^1.5.2
-  path: ^1.6.2
+  mockito: any
diff --git a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
index b5fda8f..e5a9edc 100644
--- a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
+++ b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
@@ -68,7 +68,7 @@
   }
 
   void checkExplicitlyNonNullable(NullabilityNode node) {
-    var edge = assertEdge(node, never, hard: true);
+    var edge = assertEdge(node, never, hard: true, checkable: false);
     var origin = graph.getEdgeOrigin(edge);
     expect(origin.kind, EdgeOriginKind.alreadyMigratedType);
     expect(origin.element, same(element));
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 590477d..e20e529 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -40,7 +40,11 @@
   /// be removed in its entirety (the default) or removed by commenting it out.
   Future<void> _checkMultipleFileChanges(
       Map<String, String> input, Map<String, String> expectedOutput,
-      {bool removeViaComments = false}) async {
+      {Map<String, String> migratedInput = const {},
+      bool removeViaComments = false}) async {
+    for (var path in migratedInput.keys) {
+      driver.getFileSync(newFile(path, content: migratedInput[path]).path);
+    }
     for (var path in input.keys) {
       driver.getFileSync(newFile(path, content: input[path]).path);
     }
@@ -79,11 +83,12 @@
   /// Optional parameter [removeViaComments] indicates whether dead code should
   /// be removed in its entirety (the default) or removed by commenting it out.
   Future<void> _checkSingleFileChanges(String content, String expected,
-      {bool removeViaComments = false}) async {
+      {Map<String, String> migratedInput = const {},
+      bool removeViaComments = false}) async {
     var sourcePath = convertPath('/home/test/lib/test.dart');
     await _checkMultipleFileChanges(
         {sourcePath: content}, {sourcePath: expected},
-        removeViaComments: removeViaComments);
+        migratedInput: migratedInput, removeViaComments: removeViaComments);
   }
 }
 
@@ -473,10 +478,10 @@
 num f4<T extends num>(bool b, num x, T y) => b ? x : y;
 
 void main() {
-  int? x1 = f1<int?/*?*/>(true, 0, null);
-  int? x2 = f2<int/*!*/>(true, 0, null);
-  int? x3 = f3<int>(true, null, 0);
-  int x4 = f4<int>(true, 0, 0);
+  int? x1 = f1<int?/*?*/>(true, 0, null) as int?;
+  int? x2 = f2<int/*!*/>(true, 0, null) as int?;
+  int? x3 = f3<int>(true, null, 0) as int?;
+  int x4 = f4<int>(true, 0, 0) as int;
 }
 ''';
     await _checkSingleFileChanges(content, expected);
@@ -1100,9 +1105,9 @@
     // Don't assume any new nullabilities, but keep known nullabilities.
     var expected = '''
 void f(Function a) {
-  int Function<T>(String y) f1 = a;
+  int Function<T>(String y) f1 = a as int Function<T>(String);
   Function? b = null;
-  int Function<T>(String y)? f2 = b;
+  int Function<T>(String y)? f2 = b as int Function<T>(String)?;
 }
 ''';
     await _checkSingleFileChanges(content, expected);
@@ -1139,7 +1144,7 @@
 ''';
 
     var expected = '''
-List<int?> f(List a) => a;
+List<int?> f(List a) => a as List<int?>;
 void main() {
   f(<int?>[null]);
 }
@@ -1195,7 +1200,7 @@
 ''';
 
     var expected = '''
-List<int?> f(Iterable<num?> a) => a;
+List<int?> f(Iterable<num?> a) => a as List<int?>;
 void main() {
   f(<num?>[null]);
 }
@@ -1755,7 +1760,6 @@
     await _checkSingleFileChanges(content, expected);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/39404')
   Future<void> test_field_type_inferred() async {
     var content = '''
 int f() => null;
@@ -1980,6 +1984,38 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_future_or_t_downcast_to_t() async {
+    var content = '''
+import 'dart:async';
+void f(
+    FutureOr<int> foi1,
+    FutureOr<int/*?*/> foi2,
+    FutureOr<int>/*?*/ foi3,
+    FutureOr<int/*?*/>/*?*/ foi4
+) {
+  int i1 = foi1;
+  int i2 = foi2;
+  int i3 = foi3;
+  int i4 = foi4;
+}
+''';
+    var expected = '''
+import 'dart:async';
+void f(
+    FutureOr<int> foi1,
+    FutureOr<int?/*?*/> foi2,
+    FutureOr<int>?/*?*/ foi3,
+    FutureOr<int?/*?*/>?/*?*/ foi4
+) {
+  int i1 = foi1 as int;
+  int? i2 = foi2 as int?;
+  int? i3 = foi3 as int?;
+  int? i4 = foi4 as int?;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_generic_exact_propagation() async {
     var content = '''
 class C<T> {
@@ -2574,6 +2610,12 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_leave_downcast_from_dynamic_implicit() async {
+    var content = 'int f(dynamic n) => n;';
+    var expected = 'int f(dynamic n) => n;';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_libraryWithParts() async {
     var root = '/home/test/lib';
     var path1 = convertPath('$root/lib.dart');
@@ -2650,7 +2692,6 @@
     await _checkSingleFileChanges(content, expected);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/39404')
   Future<void> test_localVariable_type_inferred() async {
     var content = '''
 int f() => null;
@@ -2671,10 +2712,13 @@
     await _checkSingleFileChanges(content, expected);
   }
 
-  @failingTest
+  Future<void> test_make_downcast_explicit() async {
+    var content = 'int f(num n) => n;';
+    var expected = 'int f(num n) => n as int;';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_map_nullable_input() async {
-    // TODO(paulberry): we're currently migrating this example incorrectly.
-    // See discussion at https://dart-review.googlesource.com/c/sdk/+/115766
     var content = '''
 Iterable<int> f(List<int> x) => x.map((y) => g(y));
 int g(int x) => x + 1;
@@ -2692,6 +2736,24 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_map_nullable_input_tearoff() async {
+    var content = '''
+Iterable<int> f(List<int> x) => x.map(g);
+int g(int x) => x + 1;
+main() {
+  f([null]);
+}
+''';
+    var expected = '''
+Iterable<int> f(List<int?> x) => x.map(g);
+int g(int? x) => x! + 1;
+main() {
+  f([null]);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_map_nullable_output() async {
     var content = '''
 Iterable<int> f(List<int> x) => x.map((y) => g(y));
@@ -3105,6 +3167,27 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void>
+      test_non_nullable_hint_comment_overrides_uncheckable_edge() async {
+    var content = '''
+Iterable<int> f(List<int> x) => x.map(g);
+int g(int/*!*/ x) => x + 1;
+main() {
+  f([null]);
+}
+''';
+    // TODO(paulberry): we should do something to flag the fact that g can't be
+    // safely passed to f.
+    var expected = '''
+Iterable<int> f(List<int?> x) => x.map(g as int Function(int?));
+int g(int/*!*/ x) => x + 1;
+main() {
+  f([null]);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_not_definitely_assigned_value() async {
     var content = '''
 String f(bool b) {
@@ -3286,7 +3369,7 @@
 }
 class Derived extends Base {
   void f(int i) {
-    assert(i != null);
+    i + 1;
   }
 }
 void g(int i, bool b, Base base) {
@@ -3300,16 +3383,16 @@
 ''';
     var expected = '''
 abstract class Base {
-  void f(int i);
+  void f(int? i);
 }
 class Derived extends Base {
-  void f(int i) {
-    assert(i != null);
+  void f(int? i) {
+    i! + 1;
   }
 }
 void g(int? i, bool b, Base base) {
   if (b) {
-    base.f(i!);
+    base.f(i);
   }
 }
 void h(Base base) {
@@ -3753,6 +3836,36 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_tearoff_parameter_matching_named() async {
+    var content = '''
+void f(int x, void Function({int x}) callback) {
+  callback(x: x);
+}
+void g({int x}) {
+  assert(x != null);
+}
+void h() {
+  f(null, g);
+}
+''';
+    // Normally the assertion in g would cause g's `x` argument to be
+    // non-nullable (and thus required).  However, since g is torn off and
+    // passed to f, which requires a callback that accepts null, g's `x`
+    // argument is nullable (and thus not required).
+    var expected = '''
+void f(int? x, void Function({int? x}) callback) {
+  callback(x: x);
+}
+void g({int? x}) {
+  assert(x != null);
+}
+void h() {
+  f(null, g);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_topLevelFunction_parameterType_implicit_dynamic() async {
     var content = '''
 Object f(x) => x;
@@ -3779,7 +3892,6 @@
     await _checkSingleFileChanges(content, expected);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/39404')
   Future<void> test_topLevelVariable_type_inferred() async {
     var content = '''
 int f() => null;
@@ -3888,6 +4000,79 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_typedef_assign_null_migrated_lhs_parameters() async {
+    var content = '''
+import 'migrated_typedef.dart';
+void main(F<int> f) {
+  f(null);
+}
+''';
+    var expected = '''
+import 'migrated_typedef.dart';
+void main(F<int?> f) {
+  f(null);
+}
+''';
+    await _checkSingleFileChanges(content, expected, migratedInput: {
+      '/home/test/lib/migrated_typedef.dart': 'typedef F<R> = Function(R);'
+    });
+  }
+
+  Future<void> test_typedef_assign_null_migrated_lhs_rhs_parameters() async {
+    var content = '''
+import 'migrated_typedef.dart';
+void f1(F<int> f) {
+  f<int>(null, null);
+}
+void f2(F<int> f) {
+  f<int>(0, null);
+}
+void f3(F<int> f) {
+  f<int>(null, 1);
+}
+void f4(F<int> f) {
+  f<int>(0, 1);
+}
+''';
+    var expected = '''
+import 'migrated_typedef.dart';
+void f1(F<int?> f) {
+  f<int?>(null, null);
+}
+void f2(F<int> f) {
+  f<int?>(0, null);
+}
+void f3(F<int?> f) {
+  f<int>(null, 1);
+}
+void f4(F<int> f) {
+  f<int>(0, 1);
+}
+''';
+    await _checkSingleFileChanges(content, expected, migratedInput: {
+      '/home/test/lib/migrated_typedef.dart':
+          'typedef F<T> = Function<R>(T, R);'
+    });
+  }
+
+  Future<void> test_typedef_assign_null_migrated_rhs_parameters() async {
+    var content = '''
+import 'migrated_typedef.dart';
+void main(F f) {
+  f<int>(null);
+}
+''';
+    var expected = '''
+import 'migrated_typedef.dart';
+void main(F f) {
+  f<int?>(null);
+}
+''';
+    await _checkSingleFileChanges(content, expected, migratedInput: {
+      '/home/test/lib/migrated_typedef.dart': 'typedef F = Function<R>(R);'
+    });
+  }
+
   Future<void> test_typedef_assign_null_parameter() async {
     var content = '''
 typedef F = Function(int);
@@ -3924,6 +4109,7 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/40388')
   Future<void> test_typedef_assign_null_return_type_formal() async {
     var content = '''
 typedef F = T Function<T>();
diff --git a/pkg/nnbd_migration/test/decorated_type_test.dart b/pkg/nnbd_migration/test/decorated_type_test.dart
index fd5c2c3..3a6a0e8 100644
--- a/pkg/nnbd_migration/test/decorated_type_test.dart
+++ b/pkg/nnbd_migration/test/decorated_type_test.dart
@@ -317,6 +317,30 @@
     assertDartType(type, 'dynamic');
   }
 
+  void test_toFinalType_function_generic_bound_dynamic() {
+    var t = typeParameter('T', dynamic_);
+    var type = function(dynamic_, typeFormals: [t], node: never)
+        .toFinalType(typeProvider) as FunctionType;
+    assertDartType(type, 'dynamic Function<T>()');
+    expect(type.typeFormals[0].bound, isNull);
+  }
+
+  void test_toFinalType_function_generic_bound_num_question() {
+    var t = typeParameter('T', num_(node: always));
+    var type = function(dynamic_, typeFormals: [t], node: never)
+        .toFinalType(typeProvider) as FunctionType;
+    assertDartType(type, 'dynamic Function<T extends num?>()');
+    assertDartType(type.typeFormals[0].bound, 'num?');
+  }
+
+  void test_toFinalType_function_generic_bound_object_question() {
+    var t = typeParameter('T', object(node: always));
+    var type = function(dynamic_, typeFormals: [t], node: never)
+        .toFinalType(typeProvider) as FunctionType;
+    assertDartType(type, 'dynamic Function<T>()');
+    expect(type.typeFormals[0].bound, isNull);
+  }
+
   void test_toFinalType_function_generic_substitute_bounds() {
     var u = typeParameter('U', object(node: never));
     var t = typeParameter(
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index d72d823..885513f 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -133,7 +133,7 @@
     assign(t1, t2, hard: true);
     // Note: t1 and t2 are swapped due to contravariance.
     assertEdge(t2.namedParameters['x'].node, t1.namedParameters['x'].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   void test_function_type_named_to_no_parameter() {
@@ -149,7 +149,7 @@
     assign(t1, t2, hard: true);
     // Note: t1 and t2 are swapped due to contravariance.
     assertEdge(t2.positionalParameters[0].node, t1.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   void test_function_type_positional_to_no_parameter() {
@@ -165,7 +165,7 @@
     assign(t1, t2, hard: true);
     // Note: t1 and t2 are swapped due to contravariance.
     assertEdge(t2.positionalParameters[0].node, t1.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   void test_function_type_required_parameter() {
@@ -174,7 +174,7 @@
     assign(t1, t2);
     // Note: t1 and t2 are swapped due to contravariance.
     assertEdge(t2.positionalParameters[0].node, t1.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   void test_function_type_return_type() {
@@ -201,6 +201,47 @@
     assertEdge(t1.typeArguments[0].node, t2.typeArguments[0].node, hard: false);
   }
 
+  void test_future_or_int_to_future_int() {
+    var t1 = futureOr(int_());
+    var t2 = future(int_());
+    assign(t1, t2, hard: true);
+    // FutureOr<int>? is nullable, so Future<int>? should be.
+    assertEdge(t1.node, t2.node, hard: true);
+    // FutureOr<int?> is nullable, so Future<int>? should be.
+    assertEdge(t1.typeArguments[0].node, t2.node, hard: true);
+    // FutureOr<int?> may hold a Future<int?>, so carry that forward.
+    assertEdge(t1.typeArguments[0].node, t2.typeArguments[0].node, hard: false);
+    // FutureOr<int>? does not accept a Future<int?>, so don't draw this.
+    assertNoEdge(t1.node, t2.typeArguments[0].node);
+  }
+
+  void test_future_or_int_to_int() {
+    var t1 = futureOr(int_());
+    var t2 = int_();
+    assign(t1, t2, hard: true);
+    assertEdge(t1.node, t2.node, hard: true);
+    assertEdge(t1.typeArguments[0].node, t2.node, hard: false);
+  }
+
+  void test_future_or_list_object_to_list_int() {
+    var t1 = futureOr(list(object()));
+    var t2 = list(int_());
+    assign(t1, t2, hard: true);
+    assertEdge(t1.node, t2.node, hard: true);
+    assertEdge(t1.typeArguments[0].node, t2.node, hard: false);
+    assertEdge(
+        t1.typeArguments[0].typeArguments[0].node, t2.typeArguments[0].node,
+        hard: false);
+  }
+
+  void test_future_or_object_to_future_or_int() {
+    var t1 = futureOr(object());
+    var t2 = futureOr(int_());
+    assign(t1, t2, hard: true);
+    assertEdge(t1.node, t2.node, hard: true);
+    assertEdge(t1.typeArguments[0].node, t2.typeArguments[0].node, hard: false);
+  }
+
   void test_future_or_to_future_or() {
     var t1 = futureOr(int_());
     var t2 = futureOr(int_());
@@ -855,6 +896,16 @@
         hard: true);
   }
 
+  Future<void> test_assign_to_bound_in_return_type() async {
+    await analyze('''
+class C<T extends Object> {}
+C<int> f() => null;
+''');
+    assertEdge(decoratedTypeAnnotation('int').node,
+        decoratedTypeAnnotation('Object').node,
+        hard: true);
+  }
+
   Future<void> test_assign_to_bound_in_type_argument() async {
     await analyze('''
 class C<T extends Object> {}
@@ -868,16 +919,6 @@
         hard: true);
   }
 
-  Future<void> test_assign_to_bound_in_return_type() async {
-    await analyze('''
-class C<T extends Object> {}
-C<int> f() => null;
-''');
-    assertEdge(decoratedTypeAnnotation('int').node,
-        decoratedTypeAnnotation('Object').node,
-        hard: true);
-  }
-
   Future<void> test_assign_to_bound_instance_creation() async {
     await analyze('''
 class C<T extends Object> {}
@@ -1262,8 +1303,9 @@
     var yParamNullable = decoratedTypeAnnotation('int) y').node;
     var returnParamNullable = decoratedTypeAnnotation('int) f').node;
     assertEdge(xParamNullable, yParamNullable,
-        hard: false, guards: [xNullable]);
-    assertEdge(returnParamNullable, xParamNullable, hard: false);
+        hard: false, checkable: false, guards: [xNullable]);
+    assertEdge(returnParamNullable, xParamNullable,
+        hard: false, checkable: false);
   }
 
   Future<void> test_assignmentExpression_nullAware_complex_covariant() async {
@@ -1475,7 +1517,10 @@
 ''');
     var iNode = decoratedTypeAnnotation('int i').node;
     var jNode = decoratedTypeAnnotation('int j').node;
-    assertEdge(iNode, jNode, hard: false, guards: [alwaysPlus.toList()[1]]);
+    assertEdge(iNode, jNode,
+        hard: false,
+        guards: TypeMatcher<Iterable<NullabilityNode>>()
+            .having((g) => g.single, 'single value', isIn(alwaysPlus)));
   }
 
   Future<void> test_binaryExpression_equal_null_yoda_condition() async {
@@ -2119,6 +2164,21 @@
         bBound.typeArguments[0].node);
   }
 
+  Future<void> test_conditionalExpression_left_never() async {
+    await analyze('''
+List<int> f(bool b, List<int> i) {
+  return (b ? (throw i) : i);
+}
+''');
+
+    var nullable_i = decoratedTypeAnnotation('List<int> i').node;
+    var nullable_conditional =
+        decoratedExpressionType('(b ?').node as NullabilityNodeForLUB;
+    var nullable_throw = nullable_conditional.left;
+    assertNoUpstreamNullability(nullable_throw);
+    assertLUB(nullable_conditional, nullable_throw, nullable_i);
+  }
+
   Future<void> test_conditionalExpression_left_non_null() async {
     await analyze('''
 int f(bool b, int i) {
@@ -2213,6 +2273,21 @@
     assertLUB(nullable_conditional, nullable_x, nullable_y);
   }
 
+  Future<void> test_conditionalExpression_right_never() async {
+    await analyze('''
+List<int> f(bool b, List<int> i) {
+  return (b ? i : (throw i));
+}
+''');
+
+    var nullable_i = decoratedTypeAnnotation('List<int> i').node;
+    var nullable_conditional =
+        decoratedExpressionType('(b ?').node as NullabilityNodeForLUB;
+    var nullable_throw = nullable_conditional.right;
+    assertNoUpstreamNullability(nullable_throw);
+    assertLUB(nullable_conditional, nullable_i, nullable_throw);
+  }
+
   Future<void> test_conditionalExpression_right_non_null() async {
     await analyze('''
 int f(bool b, int i) {
@@ -2610,10 +2685,10 @@
         hard: false);
     assertEdge(fieldType.positionalParameters[0].node,
         ctorParamType.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
     assertEdge(fieldType.namedParameters['j'].node,
         ctorParamType.namedParameters['j'].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   Future<void> test_fieldFormalParameter_typed() async {
@@ -4323,7 +4398,7 @@
         .decoratedElementType(addMethod.declaration)
         .positionalParameters[0]
         .node;
-    assertEdge(nullable_t, never, hard: true);
+    assertEdge(nullable_t, never, hard: true, checkable: false);
     var check_i = checkExpression('i/*check*/');
     var nullable_list_t_or_nullable_t = check_i
         .checks.edges.single.destinationNode as NullabilityNodeForSubstitution;
@@ -4683,7 +4758,7 @@
 ''');
     var int1 = decoratedTypeAnnotation('int/*1*/');
     var int2 = decoratedTypeAnnotation('int/*2*/');
-    assertEdge(int1.node, int2.node, hard: true);
+    assertEdge(int1.node, int2.node, hard: false, checkable: false);
   }
 
   Future<void> test_override_parameter_type_named_over_none() async {
@@ -4709,7 +4784,7 @@
 ''');
     var base1 = decoratedTypeAnnotation('Base/*1*/');
     var base2 = decoratedTypeAnnotation('Base/*2*/');
-    assertEdge(base1.node, base2.node, hard: true);
+    assertEdge(base1.node, base2.node, hard: false, checkable: false);
   }
 
   Future<void> test_override_parameter_type_optional() async {
@@ -4723,7 +4798,7 @@
 ''');
     var int1 = decoratedTypeAnnotation('int/*1*/');
     var int2 = decoratedTypeAnnotation('int/*2*/');
-    assertEdge(int1.node, int2.node, hard: true);
+    assertEdge(int1.node, int2.node, hard: false, checkable: false);
   }
 
   Future<void> test_override_parameter_type_optional_over_none() async {
@@ -4749,7 +4824,7 @@
 ''');
     var int1 = decoratedTypeAnnotation('int/*1*/');
     var int2 = decoratedTypeAnnotation('int/*2*/');
-    assertEdge(int1.node, int2.node, hard: true);
+    assertEdge(int1.node, int2.node, hard: false, checkable: false);
   }
 
   Future<void> test_override_parameter_type_required() async {
@@ -4763,7 +4838,7 @@
 ''');
     var int1 = decoratedTypeAnnotation('int/*1*/');
     var int2 = decoratedTypeAnnotation('int/*2*/');
-    assertEdge(int1.node, int2.node, hard: true);
+    assertEdge(int1.node, int2.node, hard: false, checkable: false);
   }
 
   Future<void> test_override_parameter_type_setter() async {
@@ -4777,7 +4852,7 @@
 ''');
     var int1 = decoratedTypeAnnotation('int/*1*/');
     var int2 = decoratedTypeAnnotation('int/*2*/');
-    assertEdge(int1.node, int2.node, hard: true);
+    assertEdge(int1.node, int2.node, hard: false, checkable: false);
   }
 
   Future<void> test_override_return_type_getter() async {
@@ -5694,7 +5769,7 @@
     assertEdge(fType.returnType.node, gReturnType.returnType.node, hard: false);
     assertEdge(gReturnType.positionalParameters[0].node,
         fType.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   Future<void> test_prefixExpression_bang() async {
@@ -6398,7 +6473,7 @@
     assertEdge(fType.returnType.node, gReturnType.returnType.node, hard: false);
     assertEdge(gReturnType.positionalParameters[0].node,
         fType.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   Future<void> test_simpleIdentifier_tearoff_method() async {
@@ -6414,7 +6489,7 @@
     assertEdge(fType.returnType.node, gReturnType.returnType.node, hard: false);
     assertEdge(gReturnType.positionalParameters[0].node,
         fType.positionalParameters[0].node,
-        hard: false);
+        hard: false, checkable: false);
   }
 
   Future<void> test_skipDirectives() async {
diff --git a/pkg/nnbd_migration/test/edit_plan_test.dart b/pkg/nnbd_migration/test/edit_plan_test.dart
index 8833866..401eb4d 100644
--- a/pkg/nnbd_migration/test/edit_plan_test.dart
+++ b/pkg/nnbd_migration/test/edit_plan_test.dart
@@ -361,6 +361,17 @@
         'var x = 0; var y = 0;');
   }
 
+  Future<void> test_insertText() async {
+    await analyze('final x = 1;');
+    var variableDeclarationList = findNode.variableDeclarationList('final');
+    checkPlan(
+        planner.insertText(
+            variableDeclarationList,
+            variableDeclarationList.variables.first.offset,
+            [AtomicEdit.insert('int ')]),
+        'final int x = 1;');
+  }
+
   Future<void> test_makeNullable() async {
     await analyze('int x = 0;');
     checkPlan(
@@ -952,34 +963,37 @@
     await analyze('f(x) => x?.m(0);');
     var methodInvocation = findNode.methodInvocation('?.');
     checkPlan(
-        planner.removeNullAwarenessFromMethodInvocation(methodInvocation,
-            argumentListPlan:
-                planner.passThrough(methodInvocation.argumentList, innerPlans: [
-              planner.replace(
-                  findNode.integerLiteral('0'), [AtomicEdit.insert('1')])
-            ])),
+        planner.passThrough(methodInvocation, innerPlans: [
+          planner.removeNullAwareness(methodInvocation),
+          planner.passThrough(methodInvocation.argumentList, innerPlans: [
+            planner
+                .replace(findNode.integerLiteral('0'), [AtomicEdit.insert('1')])
+          ])
+        ]),
         'f(x) => x.m(1);');
   }
 
   Future<void>
       test_removeNullAwarenessFromMethodInvocation_change_methodName() async {
     await analyze('f(x) => x?.m();');
+    var methodInvocation = findNode.methodInvocation('?.');
     checkPlan(
-        planner.removeNullAwarenessFromMethodInvocation(
-            findNode.methodInvocation('?.'),
-            methodNamePlan: planner
-                .replace(findNode.simple('m'), [AtomicEdit.insert('n')])),
+        planner.passThrough(methodInvocation, innerPlans: [
+          planner.removeNullAwareness(methodInvocation),
+          planner.replace(findNode.simple('m'), [AtomicEdit.insert('n')])
+        ]),
         'f(x) => x.n();');
   }
 
   Future<void>
       test_removeNullAwarenessFromMethodInvocation_change_target() async {
     await analyze('f(x) => x?.m();');
+    var methodInvocation = findNode.methodInvocation('?.');
     checkPlan(
-        planner.removeNullAwarenessFromMethodInvocation(
-            findNode.methodInvocation('?.'),
-            targetPlan: planner
-                .replace(findNode.simple('x?.'), [AtomicEdit.insert('y')])),
+        planner.passThrough(methodInvocation, innerPlans: [
+          planner.replace(findNode.simple('x?.'), [AtomicEdit.insert('y')]),
+          planner.removeNullAwareness(methodInvocation)
+        ]),
         'f(x) => y.m();');
   }
 
@@ -988,62 +1002,66 @@
     await analyze('f(x) => x?.m<int>();');
     var methodInvocation = findNode.methodInvocation('?.');
     checkPlan(
-        planner.removeNullAwarenessFromMethodInvocation(methodInvocation,
-            typeArgumentsPlan: planner
-                .passThrough(methodInvocation.typeArguments, innerPlans: [
-              planner
-                  .replace(findNode.simple('int'), [AtomicEdit.insert('num')])
-            ])),
+        planner.passThrough(methodInvocation, innerPlans: [
+          planner.removeNullAwareness(methodInvocation),
+          planner.passThrough(methodInvocation.typeArguments, innerPlans: [
+            planner.replace(findNode.simple('int'), [AtomicEdit.insert('num')])
+          ])
+        ]),
         'f(x) => x.m<num>();');
   }
 
   Future<void> test_removeNullAwarenessFromMethodInvocation_simple() async {
     await analyze('f(x) => x?.m();');
+    var methodInvocation = findNode.methodInvocation('?.');
     checkPlan(
-        planner.removeNullAwarenessFromMethodInvocation(
-            findNode.methodInvocation('?.')),
+        planner.passThrough(methodInvocation,
+            innerPlans: [planner.removeNullAwareness(methodInvocation)]),
         'f(x) => x.m();');
   }
 
   Future<void> test_removeNullAwarenessFromPropertyAccess_change_both() async {
     await analyze('f(x) => x?.y;');
+    var propertyAccess = findNode.propertyAccess('?.');
     checkPlan(
-        planner.removeNullAwarenessFromPropertyAccess(
-            findNode.propertyAccess('?.'),
-            targetPlan: planner
-                .replace(findNode.simple('x?.'), [AtomicEdit.insert('z')]),
-            propertyNamePlan: planner
-                .replace(findNode.simple('y'), [AtomicEdit.insert('w')])),
+        planner.passThrough(propertyAccess, innerPlans: [
+          (planner.replace(findNode.simple('x?.'), [AtomicEdit.insert('z')])),
+          planner.removeNullAwareness(propertyAccess),
+          planner.replace(findNode.simple('y'), [AtomicEdit.insert('w')])
+        ]),
         'f(x) => z.w;');
   }
 
   Future<void>
       test_removeNullAwarenessFromPropertyAccess_change_propertyName() async {
     await analyze('f(x) => x?.y;');
+    var propertyAccess = findNode.propertyAccess('?.');
     checkPlan(
-        planner.removeNullAwarenessFromPropertyAccess(
-            findNode.propertyAccess('?.'),
-            propertyNamePlan: planner
-                .replace(findNode.simple('y'), [AtomicEdit.insert('w')])),
+        planner.passThrough(propertyAccess, innerPlans: [
+          planner.removeNullAwareness(propertyAccess),
+          planner.replace(findNode.simple('y'), [AtomicEdit.insert('w')])
+        ]),
         'f(x) => x.w;');
   }
 
   Future<void>
       test_removeNullAwarenessFromPropertyAccess_change_target() async {
     await analyze('f(x) => x?.y;');
+    var propertyAccess = findNode.propertyAccess('?.');
     checkPlan(
-        planner.removeNullAwarenessFromPropertyAccess(
-            findNode.propertyAccess('?.'),
-            targetPlan: planner
-                .replace(findNode.simple('x?.'), [AtomicEdit.insert('z')])),
+        planner.passThrough(propertyAccess, innerPlans: [
+          planner.replace(findNode.simple('x?.'), [AtomicEdit.insert('z')]),
+          planner.removeNullAwareness(propertyAccess)
+        ]),
         'f(x) => z.y;');
   }
 
   Future<void> test_removeNullAwarenessFromPropertyAccess_simple() async {
     await analyze('f(x) => x?.y;');
+    var propertyAccess = findNode.propertyAccess('?.');
     checkPlan(
-        planner.removeNullAwarenessFromPropertyAccess(
-            findNode.propertyAccess('?.')),
+        planner.passThrough(propertyAccess,
+            innerPlans: [planner.removeNullAwareness(propertyAccess)]),
         'f(x) => x.y;');
   }
 
@@ -1069,6 +1087,15 @@
         'var x = 1 + (y = z);');
   }
 
+  Future<void> test_replaceToken() async {
+    await analyze('var x = 1;');
+    var variableDeclarationList = findNode.variableDeclarationList('var x');
+    checkPlan(
+        planner.replaceToken(variableDeclarationList,
+            variableDeclarationList.keyword, [AtomicEdit.insert('int')]),
+        'int x = 1;');
+  }
+
   Future<void> test_surround_allowCascade() async {
     await analyze('f(x) => 1..isEven;');
     checkPlan(
diff --git a/pkg/nnbd_migration/test/fantasyland/fantasy_repo_test.dart b/pkg/nnbd_migration/test/fantasyland/fantasy_repo_test.dart
new file mode 100644
index 0000000..9d64001
--- /dev/null
+++ b/pkg/nnbd_migration/test/fantasyland/fantasy_repo_test.dart
@@ -0,0 +1,228 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:mockito/mockito.dart';
+import 'package:nnbd_migration/src/fantasyland/fantasy_repo.dart';
+import 'package:nnbd_migration/src/utilities/subprocess_launcher.dart';
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FantasyRepoSettingsTest);
+    defineReflectiveTests(FantasyRepoE2ETest);
+    defineReflectiveTests(FantasyRepoTest);
+  });
+}
+
+@reflectiveTest
+class FantasyRepoSettingsTest {
+  test_fromNameDefaultCase() {
+    FantasyRepoSettings settings = FantasyRepoSettings.fromName('defaultCase');
+
+    expect(settings.name, equals('defaultCase'));
+    expect(settings.clone, equals('git@github.com:dart-lang/defaultCase.git'));
+    expect(settings.branch, equals('master'));
+    expect(settings.revision, equals('master'));
+  }
+
+  test_fromNameDotDartCase() {
+    FantasyRepoSettings settings =
+        FantasyRepoSettings.fromName('somethingImportant.dart');
+
+    expect(settings.name, equals('somethingImportant.dart'));
+    expect(settings.clone,
+        equals('git@github.com:google/somethingImportant.dart.git'));
+    expect(settings.branch, equals('master'));
+    expect(settings.revision, equals('master'));
+  }
+
+  test_fromNameTableCase() {
+    FantasyRepoSettings settings = FantasyRepoSettings.fromName('git');
+
+    expect(settings.name, equals('git'));
+    expect(settings.clone, equals('git@github.com:kevmoo/git.git'));
+    expect(settings.branch, equals('master'));
+    expect(settings.revision, equals('master'));
+  }
+
+  test_equality() {
+    var test1 = FantasyRepoSettings('one', 'two', 'three', 'four');
+    var test2 = FantasyRepoSettings('one', 'two', 'three', 'four');
+    var test3 = FantasyRepoSettings('one', 'two', 'three', 'five');
+    var test4 = FantasyRepoSettings('one', 'two');
+
+    expect(test1, equals(test2));
+    expect(test1, isNot(equals(test3)));
+    expect(test1, isNot(equals(test4)));
+  }
+}
+
+@reflectiveTest
+class FantasyRepoE2ETest {
+  Directory tempDir;
+
+  setUp() async {
+    tempDir = await Directory.systemTemp.createTemp('FantasyRepoE2ETest');
+  }
+
+  test_fantasyRepoE2ETest() async {
+    // Only one of these, as they are slow due to the real fork/execs of 'git'.
+    // Check any important edge cases via unit tests and mocking.
+
+    // TODO(jcollins-g): This test is not fully isolated from the global git
+    // config.  Fix that.
+    SubprocessLauncher launcher = SubprocessLauncher('FantasyRepoE2ETest');
+    Directory origRepoDir = Directory(path.join(tempDir.path, 'origRepo'));
+
+    // Create and add a commit to origRepoDir that includes a file we should
+    // check out, and others we shouldn't.
+    await launcher.runStreamed('git', ['init', origRepoDir.path]);
+    File dotPackages = File(path.join(origRepoDir.path, '.packages'));
+    File pubspecLock = File(path.join(origRepoDir.path, 'pubspec.lock'));
+    File pubspecYaml = File(path.join(origRepoDir.path, 'pubspec.yaml'));
+    File packageConfigJson =
+        File(path.join(origRepoDir.path, '.dart_tool', 'package_config.json'));
+    List<File> allFiles = [
+      dotPackages,
+      pubspecLock,
+      pubspecYaml,
+      packageConfigJson
+    ];
+    await Future.wait([
+      for (var f in [dotPackages, pubspecLock, pubspecYaml, packageConfigJson])
+        f.create(recursive: true)
+    ]);
+    await launcher.runStreamed(
+        'git', ['add', '-f', ...allFiles.map((f) => path.canonicalize(f.path))],
+        workingDirectory: origRepoDir.path);
+    await launcher.runStreamed('git', ['commit', '-m', 'add some files'],
+        workingDirectory: origRepoDir.path);
+
+    // Use the repo builder to clone this and verify that the right files are
+    // checked out.
+    Directory repoRoot = Directory(path.join(tempDir.path, 'repoRoot'));
+    await FantasyRepo.buildFrom(
+        FantasyRepoSettings('repoE2Etest', origRepoDir.path), repoRoot,
+        launcher: launcher);
+
+    dotPackages = File(path.join(repoRoot.path, '.packages'));
+    pubspecLock = File(path.join(repoRoot.path, 'pubspec.lock'));
+    pubspecYaml = File(path.join(repoRoot.path, 'pubspec.yaml'));
+    packageConfigJson =
+        File(path.join(repoRoot.path, '.dart_tool', 'package_config.json'));
+
+    expect(await dotPackages.exists(), isFalse);
+    expect(await pubspecLock.exists(), isFalse);
+    expect(await pubspecYaml.exists(), isTrue);
+    expect(await packageConfigJson.exists(), isFalse);
+
+    // Update the original repository.
+    File aNewFile = File(path.join(origRepoDir.path, 'hello_new_file_here'));
+    await aNewFile.create(recursive: true);
+    await launcher.runStreamed(
+        'git', ['add', '-f', path.canonicalize(aNewFile.path)],
+        workingDirectory: origRepoDir.path);
+    await launcher.runStreamed('git', ['commit', '-m', 'add more files'],
+        workingDirectory: origRepoDir.path);
+
+    // Finally, use the repoBuilder to update a repository from head and verify
+    // we did it right.
+    await FantasyRepo.buildFrom(
+        FantasyRepoSettings('repoE2Etest', origRepoDir.path), repoRoot,
+        launcher: launcher);
+
+    aNewFile = File(path.join(repoRoot.path, 'hello_new_file_here'));
+
+    expect(await dotPackages.exists(), isFalse);
+    expect(await pubspecLock.exists(), isFalse);
+    expect(await pubspecYaml.exists(), isTrue);
+    expect(await packageConfigJson.exists(), isFalse);
+    expect(await aNewFile.exists(), isTrue);
+  }
+}
+
+class MockDirectory extends Mock implements Directory {}
+
+class MockFile extends Mock implements File {}
+
+class MockSubprocessLauncher extends Mock implements SubprocessLauncher {}
+
+@reflectiveTest
+class FantasyRepoTest {
+  // TODO(jcollins-g): extend MemoryResourceProvider and analyzer File
+  // implementations and port over, or add mock_filesystem to third_party.
+  Map<String, MockFile> mockFiles;
+  Map<String, MockDirectory> mockDirectories;
+  MockDirectory Function(String) directoryBuilder;
+  MockFile Function(String) fileBuilder;
+  MockSubprocessLauncher mockLauncher;
+  String parentPath;
+  String repoPath;
+
+  setUp() {
+    mockFiles = {};
+    mockDirectories = {};
+    fileBuilder = (String s) {
+      mockFiles[s] ??= MockFile();
+      return mockFiles[s];
+    };
+    directoryBuilder = (String s) {
+      mockDirectories[s] ??= MockDirectory();
+      return mockDirectories[s];
+    };
+    mockLauncher = MockSubprocessLauncher();
+    parentPath = 'parentdir';
+    repoPath = path.join(parentPath, 'subdir');
+    MockDirectory repoDir = directoryBuilder(repoPath);
+    MockDirectory parentDir = directoryBuilder('parentdir');
+    when(parentDir.exists()).thenAnswer((_) => Future.value(true));
+    when(repoDir.parent).thenReturn(parentDir);
+    when(repoDir.path).thenReturn(repoPath);
+  }
+
+  _setUpNewClone(String repoName) async {
+    FantasyRepoSettings settings = FantasyRepoSettings.fromName(repoName);
+    when(directoryBuilder(repoPath).exists())
+        .thenAnswer((_) => Future.value(false));
+    await FantasyRepo.buildFrom(settings, mockDirectories[repoPath],
+        launcher: mockLauncher, fileBuilder: fileBuilder);
+  }
+
+  test_checkHttpStringSubstitution() async {
+    await _setUpNewClone('defaultCase');
+    verify(mockLauncher.runStreamed(
+        'git',
+        [
+          'remote',
+          'add',
+          'origin',
+          '-t',
+          'master',
+          'git@github.com:dart-lang/defaultCase.git'
+        ],
+        workingDirectory: repoPath));
+    verify(mockLauncher.runStreamed(
+        'git',
+        [
+          'remote',
+          'add',
+          'originHTTP',
+          '-t',
+          'master',
+          'https://github.com/dart-lang/defaultCase.git'
+        ],
+        workingDirectory: repoPath));
+  }
+
+  test_verifyWorkingDirectoryForGitConfig() async {
+    await _setUpNewClone('defaultCase');
+    verify(mockLauncher.runStreamed(
+        'git', ['config', 'core.sparsecheckout', 'true'],
+        workingDirectory: repoPath));
+  }
+}
diff --git a/pkg/nnbd_migration/test/fantasyland/fantasy_sub_package_test.dart b/pkg/nnbd_migration/test/fantasyland/fantasy_sub_package_test.dart
new file mode 100644
index 0000000..3984c66
--- /dev/null
+++ b/pkg/nnbd_migration/test/fantasyland/fantasy_sub_package_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:nnbd_migration/src/fantasyland/fantasy_repo.dart';
+import 'package:nnbd_migration/src/fantasyland/fantasy_sub_package.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FantasySubPackageSettingsTest);
+  });
+}
+
+@reflectiveTest
+class FantasySubPackageSettingsTest {
+  test_settingsFromTable() {
+    var subPackageSettings = FantasySubPackageSettings.fromName('vm_service');
+    expect(subPackageSettings.name, equals('vm_service'));
+    expect(subPackageSettings.repoSettings.name, equals('sdk'));
+    expect(subPackageSettings.subDir, equals('pkg/vm_service'));
+  }
+
+  test_settingsFromTableDefault() {
+    var subPackageSettings =
+        FantasySubPackageSettings.fromName('completely_unknown_package');
+    expect(subPackageSettings.name, equals('completely_unknown_package'));
+    expect(subPackageSettings.repoSettings.name,
+        equals('completely_unknown_package'));
+    expect(subPackageSettings.subDir, equals('.'));
+  }
+
+  test_settingsEqual() {
+    var repo1 = FantasyRepoSettings.fromName('some_repo_somewhere');
+    var repo2 = FantasyRepoSettings.fromName('another_repo_somewhere_else');
+    var test1 = FantasySubPackageSettings('foo', repo1, '.');
+    var test2 = FantasySubPackageSettings('foo', repo2, '.');
+    var test3 = FantasySubPackageSettings('foo', repo1, 'pkg/something');
+    var test4 = FantasySubPackageSettings('foobie', repo1, '.');
+    var test5 = FantasySubPackageSettings('foo', repo1, '.');
+
+    expect(test1, equals(test1));
+    expect(test1, isNot(equals(test2)));
+    expect(test1, isNot(equals(test3)));
+    expect(test1, isNot(equals(test4)));
+    expect(test1, equals(test5));
+  }
+}
diff --git a/pkg/nnbd_migration/test/fantasyland/test_all.dart b/pkg/nnbd_migration/test/fantasyland/test_all.dart
new file mode 100644
index 0000000..c4601ce
--- /dev/null
+++ b/pkg/nnbd_migration/test/fantasyland/test_all.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fantasy_repo_test.dart' as fantasy_repo_test;
+import 'fantasy_sub_package_test.dart' as fantasy_sub_package_test;
+
+main() {
+  defineReflectiveSuite(() {
+    fantasy_repo_test.main();
+    fantasy_sub_package_test.main();
+  });
+}
diff --git a/pkg/nnbd_migration/test/fix_aggregator_test.dart b/pkg/nnbd_migration/test/fix_aggregator_test.dart
index cea68fe..504375d 100644
--- a/pkg/nnbd_migration/test/fix_aggregator_test.dart
+++ b/pkg/nnbd_migration/test/fix_aggregator_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type.dart';
 import 'package:nnbd_migration/src/decorated_type.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
 import 'package:nnbd_migration/src/fix_aggregator.dart';
@@ -23,8 +24,10 @@
 class FixAggregatorTest extends FixAggregatorTestBase {
   Future<void> test_addRequired() async {
     await analyze('f({int x}) => 0;');
-    var previewInfo = run(
-        {findNode.defaultParameter('int x'): const AddRequiredKeyword(null)});
+    var previewInfo = run({
+      findNode.defaultParameter('int x'): NodeChangeForDefaultFormalParameter()
+        ..addRequiredKeyword = true
+    });
     expect(previewInfo.applyTo(code), 'f({required int x}) => 0;');
   }
 
@@ -33,9 +36,9 @@
     var aRef = findNode.simple('a +');
     var bRef = findNode.simple('b;');
     var previewInfo = run({
-      aRef: const NullCheck(null),
-      bRef: const NullCheck(null),
-      findNode.binary('a + b'): const NullCheck(null)
+      aRef: NodeChangeForExpression()..addNullCheck = true,
+      bRef: NodeChangeForExpression()..addNullCheck = true,
+      findNode.binary('a + b'): NodeChangeForExpression()..addNullCheck = true
     });
     expect(previewInfo.applyTo(code), 'f(a, b) => (a! + b!)!;');
   }
@@ -47,8 +50,10 @@
 }
 ''');
     var previewInfo = run({
-      findNode.statement('if'): EliminateDeadIf(true),
-      findNode.simple('j.isEven'): const NullCheck(null)
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = true,
+      findNode.simple('j.isEven'): NodeChangeForExpression()
+        ..addNullCheck = true
     });
     expect(previewInfo.applyTo(code), '''
 f(int i, int/*?*/ j) {
@@ -66,8 +71,10 @@
 }
 ''');
     var previewInfo = run({
-      findNode.statement('if'): EliminateDeadIf(true),
-      findNode.simple('j.isEven'): const NullCheck(null)
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = true,
+      findNode.simple('j.isEven'): NodeChangeForExpression()
+        ..addNullCheck = true
     });
     expect(previewInfo.applyTo(code), '''
 f(int i, int/*?*/ j) {
@@ -82,7 +89,9 @@
   return [if (i == null) null];
 }
 ''');
-    var previewInfo = run({findNode.ifElement('=='): EliminateDeadIf(false)});
+    var previewInfo = run({
+      findNode.ifElement('=='): NodeChangeForIfElement()..conditionValue = false
+    });
     expect(previewInfo.applyTo(code), '''
 List<int> f(int i) {
   return [];
@@ -96,7 +105,9 @@
   return [if (i == null) null else i + 1];
 }
 ''');
-    var previewInfo = run({findNode.ifElement('=='): EliminateDeadIf(false)});
+    var previewInfo = run({
+      findNode.ifElement('=='): NodeChangeForIfElement()..conditionValue = false
+    });
     expect(previewInfo.applyTo(code), '''
 List<int> f(int i) {
   return [i + 1];
@@ -110,7 +121,9 @@
   return [if (i == null) null else i + 1];
 }
 ''');
-    var previewInfo = run({findNode.ifElement('=='): EliminateDeadIf(true)});
+    var previewInfo = run({
+      findNode.ifElement('=='): NodeChangeForIfElement()..conditionValue = true
+    });
     expect(previewInfo.applyTo(code), '''
 List<int> f(int i) {
   return [null];
@@ -124,8 +137,10 @@
   return i == null ? null : i + 1;
 }
 ''');
-    var previewInfo =
-        run({findNode.conditionalExpression('=='): EliminateDeadIf(false)});
+    var previewInfo = run({
+      findNode.conditionalExpression('=='): NodeChangeForConditionalExpression()
+        ..conditionValue = false
+    });
     expect(previewInfo.applyTo(code), '''
 int f(int i) {
   return i + 1;
@@ -139,8 +154,10 @@
   return i == null ? null : i + 1;
 }
 ''');
-    var previewInfo =
-        run({findNode.conditionalExpression('=='): EliminateDeadIf(true)});
+    var previewInfo = run({
+      findNode.conditionalExpression('=='): NodeChangeForConditionalExpression()
+        ..conditionValue = true
+    });
     expect(previewInfo.applyTo(code), '''
 int f(int i) {
   return null;
@@ -158,8 +175,10 @@
   }
 }
 ''');
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(false)},
-        removeViaComments: true);
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = false
+    }, removeViaComments: true);
     expect(previewInfo.applyTo(code), '''
 int f(int i) {
   /* if (i == null) {
@@ -181,8 +200,10 @@
   }
 }
 ''');
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(true)},
-        removeViaComments: true);
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = true
+    }, removeViaComments: true);
     expect(previewInfo.applyTo(code), '''
 int f(int i) {
   /* if (i == null) {
@@ -203,7 +224,10 @@
   }
 }
 ''');
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(false)});
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = false
+    });
     expect(previewInfo.applyTo(code), '''
 void f(int i) {}
 ''');
@@ -218,7 +242,10 @@
   }
 }
 ''');
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(true)});
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = true
+    });
     expect(previewInfo.applyTo(code), '''
 void f(int i) {}
 ''');
@@ -234,7 +261,10 @@
   }
 }
 ''');
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(false)});
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = false
+    });
     expect(previewInfo.applyTo(code), '''
 int f(int i) {
   return i + 1;
@@ -252,7 +282,10 @@
   }
 }
 ''');
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(true)});
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = true
+    });
     expect(previewInfo.applyTo(code), '''
 int f(int i) {
   return i + 1;
@@ -274,7 +307,10 @@
 ''');
     // In this case we have to keep the block so that the scope of `var i`
     // doesn't widen.
-    var previewInfo = run({findNode.statement('if'): EliminateDeadIf(true)});
+    var previewInfo = run({
+      findNode.statement('if'): NodeChangeForIfStatement()
+        ..conditionValue = true
+    });
     expect(previewInfo.applyTo(code), '''
 void f(int i, String callback()) {
   {
@@ -291,7 +327,11 @@
     // leave them.
     await analyze('f(a, c) => a..b = (throw c..d);');
     var cd = findNode.cascade('c..d');
-    var previewInfo = run({cd: const IntroduceAs('int', null)});
+    var previewInfo = run({
+      cd: NodeChangeForExpression()
+        ..introduceAsType = 'int'
+        ..introduceAsInfo = _MockInfo()
+    });
     expect(
         previewInfo.applyTo(code), 'f(a, c) => a..b = (throw (c..d) as int);');
   }
@@ -299,14 +339,22 @@
   Future<void> test_introduceAs_no_parens() async {
     await analyze('f(a, b) => a | b;');
     var expr = findNode.binary('a | b');
-    var previewInfo = run({expr: const IntroduceAs('int', null)});
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAsType = 'int'
+        ..introduceAsInfo = _MockInfo()
+    });
     expect(previewInfo.applyTo(code), 'f(a, b) => a | b as int;');
   }
 
   Future<void> test_introduceAs_parens() async {
     await analyze('f(a, b) => a < b;');
     var expr = findNode.binary('a < b');
-    var previewInfo = run({expr: const IntroduceAs('bool', null)});
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAsType = 'bool'
+        ..introduceAsInfo = _MockInfo()
+    });
     expect(previewInfo.applyTo(code), 'f(a, b) => (a < b) as bool;');
   }
 
@@ -319,22 +367,28 @@
   Future<void> test_makeNullable() async {
     await analyze('f(int x) {}');
     var typeName = findNode.typeName('int');
-    var previewInfo =
-        run({typeName: MakeNullable(MockDecoratedType(MockDartType()))});
+    var previewInfo = run({
+      typeName: NodeChangeForTypeAnnotation()
+        ..makeNullable = true
+        ..makeNullableType = MockDecoratedType(
+            MockDartType(toStringValueWithoutNullability: 'int'))
+    });
     expect(previewInfo.applyTo(code), 'f(int? x) {}');
   }
 
   Future<void> test_nullCheck_no_parens() async {
     await analyze('f(a) => a++;');
     var expr = findNode.postfix('a++');
-    var previewInfo = run({expr: const NullCheck(null)});
+    var previewInfo =
+        run({expr: NodeChangeForExpression()..addNullCheck = true});
     expect(previewInfo.applyTo(code), 'f(a) => a++!;');
   }
 
   Future<void> test_nullCheck_parens() async {
     await analyze('f(a) => -a;');
     var expr = findNode.prefix('-a');
-    var previewInfo = run({expr: const NullCheck(null)});
+    var previewInfo =
+        run({expr: NodeChangeForExpression()..addNullCheck = true});
     expect(previewInfo.applyTo(code), 'f(a) => (-a)!;');
   }
 
@@ -343,7 +397,7 @@
     await analyze('f(a) => ((a..b) as dynamic)..c;');
     var cascade = findNode.cascade('a..b');
     var cast = cascade.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a) => a..b..c;');
   }
 
@@ -354,7 +408,7 @@
     await analyze('f(a, b, c) => ((a ? b : c) as dynamic)..d;');
     var conditional = findNode.conditionalExpression('a ? b : c');
     var cast = conditional.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, c) => a ? b : c..d;');
   }
 
@@ -363,7 +417,7 @@
     await analyze('f(a, b) => ((a = b) as dynamic)..c;');
     var assignment = findNode.assignment('a = b');
     var cast = assignment.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b) => (a = b)..c;');
   }
 
@@ -371,7 +425,7 @@
     await analyze('f(a) => ((throw a) as dynamic)..b;');
     var throw_ = findNode.throw_('throw a');
     var cast = throw_.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a) => (throw a)..b;');
   }
 
@@ -379,14 +433,16 @@
       test_removeAs_lower_precedence_do_not_remove_inner_parens() async {
     await analyze('f(a, b, c) => (a == b) as Null == c;');
     var expr = findNode.binary('a == b');
-    var previewInfo = run({expr.parent.parent: const RemoveAs()});
+    var previewInfo =
+        run({expr.parent.parent: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, c) => (a == b) == c;');
   }
 
   Future<void> test_removeAs_lower_precedence_remove_inner_parens() async {
     await analyze('f(a, b) => (a == b) as Null;');
     var expr = findNode.binary('a == b');
-    var previewInfo = run({expr.parent.parent: const RemoveAs()});
+    var previewInfo =
+        run({expr.parent.parent: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b) => a == b;');
   }
 
@@ -404,7 +460,7 @@
     await analyze('f(a, c) => a..b = throw (c..d) as int;');
     var cd = findNode.cascade('c..d');
     var cast = cd.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, c) => a..b = (throw c..d);');
   }
 
@@ -413,7 +469,7 @@
     await analyze('f(a, b, c) => a ? b : (c..d) as int;');
     var cd = findNode.cascade('c..d');
     var cast = cd.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, c) => a ? b : (c..d);');
   }
 
@@ -422,36 +478,41 @@
     await analyze('f(a, b, d) => a ? (b..c) as int : d;');
     var bc = findNode.cascade('b..c');
     var cast = bc.parent.parent;
-    var previewInfo = run({cast: const RemoveAs()});
+    var previewInfo = run({cast: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, d) => a ? (b..c) : d;');
   }
 
   Future<void> test_removeAs_raise_precedence_do_not_remove_parens() async {
     await analyze('f(a, b, c) => a | (b | c as int);');
     var expr = findNode.binary('b | c');
-    var previewInfo = run({expr.parent: const RemoveAs()});
+    var previewInfo =
+        run({expr.parent: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, c) => a | (b | c);');
   }
 
   Future<void> test_removeAs_raise_precedence_no_parens_to_remove() async {
     await analyze('f(a, b, c) => a = b | c as int;');
     var expr = findNode.binary('b | c');
-    var previewInfo = run({expr.parent: const RemoveAs()});
+    var previewInfo =
+        run({expr.parent: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, c) => a = b | c;');
   }
 
   Future<void> test_removeAs_raise_precedence_remove_parens() async {
     await analyze('f(a, b, c) => a < (b | c as int);');
     var expr = findNode.binary('b | c');
-    var previewInfo = run({expr.parent: const RemoveAs()});
+    var previewInfo =
+        run({expr.parent: NodeChangeForAsExpression()..removeAs = true});
     expect(previewInfo.applyTo(code), 'f(a, b, c) => a < b | c;');
   }
 
   Future<void> test_removeNullAwarenessFromMethodInvocation() async {
     await analyze('f(x) => x?.m();');
     var methodInvocation = findNode.methodInvocation('?.');
-    var previewInfo = run(
-        {methodInvocation: const RemoveNullAwarenessFromMethodInvocation()});
+    var previewInfo = run({
+      methodInvocation: NodeChangeForMethodInvocation()
+        ..removeNullAwareness = true
+    });
     expect(previewInfo.applyTo(code), 'f(x) => x.m();');
   }
 
@@ -461,8 +522,9 @@
     var methodInvocation = findNode.methodInvocation('?.');
     var argument = findNode.simple('x);');
     var previewInfo = run({
-      methodInvocation: const RemoveNullAwarenessFromMethodInvocation(),
-      argument: const NullCheck(null)
+      methodInvocation: NodeChangeForMethodInvocation()
+        ..removeNullAwareness = true,
+      argument: NodeChangeForExpression()..addNullCheck = true
     });
     expect(previewInfo.applyTo(code), 'f(x) => x.m(x!);');
   }
@@ -473,8 +535,9 @@
     var methodInvocation = findNode.methodInvocation('?.');
     var cast = findNode.as_('as');
     var previewInfo = run({
-      methodInvocation: const RemoveNullAwarenessFromMethodInvocation(),
-      cast: const RemoveAs()
+      methodInvocation: NodeChangeForMethodInvocation()
+        ..removeNullAwareness = true,
+      cast: NodeChangeForAsExpression()..removeAs = true
     });
     expect(previewInfo.applyTo(code), 'f(x) => x.m();');
   }
@@ -485,8 +548,12 @@
     var methodInvocation = findNode.methodInvocation('?.');
     var typeAnnotation = findNode.typeAnnotation('int');
     var previewInfo = run({
-      methodInvocation: const RemoveNullAwarenessFromMethodInvocation(),
-      typeAnnotation: const MakeNullable(MockDecoratedType(MockDartType()))
+      methodInvocation: NodeChangeForMethodInvocation()
+        ..removeNullAwareness = true,
+      typeAnnotation: NodeChangeForTypeAnnotation()
+        ..makeNullable = true
+        ..makeNullableType = MockDecoratedType(
+            MockDartType(toStringValueWithoutNullability: 'int'))
     });
     expect(previewInfo.applyTo(code), 'f(x) => x.m<int?>();');
   }
@@ -494,8 +561,9 @@
   Future<void> test_removeNullAwarenessFromPropertyAccess() async {
     await analyze('f(x) => x?.y;');
     var propertyAccess = findNode.propertyAccess('?.');
-    var previewInfo =
-        run({propertyAccess: const RemoveNullAwarenessFromPropertyAccess()});
+    var previewInfo = run({
+      propertyAccess: NodeChangeForPropertyAccess()..removeNullAwareness = true
+    });
     expect(previewInfo.applyTo(code), 'f(x) => x.y;');
   }
 
@@ -504,8 +572,8 @@
     var propertyAccess = findNode.propertyAccess('?.');
     var cast = findNode.as_('as');
     var previewInfo = run({
-      propertyAccess: const RemoveNullAwarenessFromPropertyAccess(),
-      cast: const RemoveAs()
+      propertyAccess: NodeChangeForPropertyAccess()..removeNullAwareness = true,
+      cast: NodeChangeForAsExpression()..removeAs = true
     });
     expect(previewInfo.applyTo(code), 'f(x) => x.y;');
   }
@@ -517,8 +585,9 @@
 f({@meta.required int x}) {}
 ''');
     var annotation = findNode.annotation('required');
-    var previewInfo =
-        run({annotation: const RequiredAnnotationToRequiredKeyword(null)});
+    var previewInfo = run({
+      annotation: NodeChangeForAnnotation()..changeToRequiredKeyword = true
+    });
     expect(previewInfo.applyTo(code), '''
 import 'package:meta/meta.dart' as meta;
 f({required int x}) {}
@@ -534,8 +603,9 @@
 f({@foo int x}) {}
 ''');
     var annotation = findNode.annotation('@foo');
-    var previewInfo =
-        run({annotation: const RequiredAnnotationToRequiredKeyword(null)});
+    var previewInfo = run({
+      annotation: NodeChangeForAnnotation()..changeToRequiredKeyword = true
+    });
     expect(previewInfo.applyTo(code), '''
 import 'package:meta/meta.dart';
 const foo = required;
@@ -550,14 +620,59 @@
 f({@required int x}) {}
 ''');
     var annotation = findNode.annotation('required');
-    var previewInfo =
-        run({annotation: const RequiredAnnotationToRequiredKeyword(null)});
+    var previewInfo = run({
+      annotation: NodeChangeForAnnotation()..changeToRequiredKeyword = true
+    });
     expect(previewInfo.applyTo(code), '''
 import 'package:meta/meta.dart';
 f({required int x}) {}
 ''');
     expect(previewInfo.values.single.single.isDeletion, true);
   }
+
+  Future<void> test_variableDeclarationList_addExplicitType_insert() async {
+    await analyze('final x = 0;');
+    var previewInfo = run({
+      findNode.variableDeclarationList('final'):
+          NodeChangeForVariableDeclarationList()
+            ..addExplicitType =
+                MockDartType(toStringValueWithNullability: 'int')
+    });
+    expect(previewInfo.applyTo(code), 'final int x = 0;');
+  }
+
+  Future<void> test_variableDeclarationList_addExplicitType_no() async {
+    await analyze('var x = 0;');
+    var previewInfo = run({
+      findNode.variableDeclarationList('var'):
+          NodeChangeForVariableDeclarationList()
+    });
+    expect(previewInfo, isNull);
+  }
+
+  Future<void> test_variableDeclarationList_addExplicitType_otherPlans() async {
+    await analyze('var x = 0;');
+    var previewInfo = run({
+      findNode.variableDeclarationList('var'):
+          NodeChangeForVariableDeclarationList()
+            ..addExplicitType =
+                MockDartType(toStringValueWithNullability: 'int'),
+      findNode.integerLiteral('0'): NodeChangeForExpression()
+        ..addNullCheck = true
+    });
+    expect(previewInfo.applyTo(code), 'int x = 0!;');
+  }
+
+  Future<void> test_variableDeclarationList_addExplicitType_replaceVar() async {
+    await analyze('var x = 0;');
+    var previewInfo = run({
+      findNode.variableDeclarationList('var'):
+          NodeChangeForVariableDeclarationList()
+            ..addExplicitType =
+                MockDartType(toStringValueWithNullability: 'int')
+    });
+    expect(previewInfo.applyTo(code), 'int x = 0;');
+  }
 }
 
 class FixAggregatorTestBase extends AbstractSingleUnitTest {
@@ -575,13 +690,28 @@
   }
 }
 
-class MockDartType implements DartType {
-  const MockDartType();
+class MockDartType implements TypeImpl {
+  final String toStringValueWithNullability;
+
+  final String toStringValueWithoutNullability;
+
+  const MockDartType(
+      {this.toStringValueWithNullability,
+      this.toStringValueWithoutNullability});
 
   @override
   noSuchMethod(Invocation invocation) {
     return super.noSuchMethod(invocation);
   }
+
+  @override
+  String toString({bool withNullability = false}) {
+    var result = withNullability
+        ? toStringValueWithNullability
+        : toStringValueWithoutNullability;
+    expect(result, isNotNull);
+    return result;
+  }
 }
 
 class MockDecoratedType implements DecoratedType {
@@ -598,3 +728,7 @@
     return super.noSuchMethod(invocation);
   }
 }
+
+class _MockInfo implements AtomicEditInfo {
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
diff --git a/pkg/nnbd_migration/test/fix_builder_test.dart b/pkg/nnbd_migration/test/fix_builder_test.dart
index f33574c..19f863a 100644
--- a/pkg/nnbd_migration/test/fix_builder_test.dart
+++ b/pkg/nnbd_migration/test/fix_builder_test.dart
@@ -39,24 +39,25 @@
 @reflectiveTest
 class FixBuilderTest extends EdgeBuilderTestBase {
   static final isAddRequiredKeyword =
-      havingInnerMatcher(TypeMatcher<AddRequiredKeyword>(), isNoChange);
+      TypeMatcher<NodeChangeForDefaultFormalParameter>()
+          .having((c) => c.addRequiredKeyword, 'addRequiredKeyword', true);
 
-  static final isMakeNullable =
-      havingInnerMatcher(TypeMatcher<MakeNullable>(), isNoChange);
+  static final isMakeNullable = TypeMatcher<NodeChangeForTypeAnnotation>()
+      .having((c) => c.makeNullable, 'makeNullable', isNotNull);
 
-  static const isNoChange = TypeMatcher<NoChange>();
+  static final isNullCheck = TypeMatcher<NodeChangeForExpression>()
+      .having((c) => c.addNullCheck, 'addNullCheck', true);
 
-  static final isNullCheck =
-      havingInnerMatcher(TypeMatcher<NullCheck>(), isNoChange);
+  static final isRemoveNullAwareness =
+      TypeMatcher<NodeChangeForPropertyAccess>()
+          .having((c) => c.removeNullAwareness, 'removeNullAwareness', true);
 
-  static const isRemoveNullAwarenessFromPropertyAccess =
-      TypeMatcher<RemoveNullAwarenessFromPropertyAccess>();
+  static final isRemoveAs = TypeMatcher<NodeChangeForAsExpression>()
+      .having((c) => c.removeAs, 'removeAs', true);
 
-  static final isRemoveAs =
-      havingInnerMatcher(TypeMatcher<RemoveAs>(), isNoChange);
-
-  static final isRequiredAnnotationToRequiredKeyword = havingInnerMatcher(
-      TypeMatcher<RequiredAnnotationToRequiredKeyword>(), isNoChange);
+  static final isRequiredAnnotationToRequiredKeyword =
+      TypeMatcher<NodeChangeForAnnotation>().having(
+          (c) => c.changeToRequiredKeyword, 'changeToRequiredKeyword', true);
 
   DartType get dynamicType => postMigrationTypeProvider.dynamicType;
 
@@ -847,7 +848,7 @@
 
   Future<void> test_binaryExpression_bar_bar_nullChecked() async {
     await analyze('''
-_f(Object/*?*/ x, Object/*?*/ y) {
+_f(bool/*?*/ x, bool/*?*/ y) {
   return x || y;
 }
 ''');
@@ -2277,7 +2278,7 @@
     await analyze('_f(int/*!*/ i) => i?.isEven;');
     var propertyAccess = findNode.propertyAccess('?.');
     visitSubexpression(propertyAccess, 'bool',
-        changes: {propertyAccess: isRemoveNullAwarenessFromPropertyAccess});
+        changes: {propertyAccess: isRemoveNullAwareness});
   }
 
   Future<void>
@@ -2290,8 +2291,9 @@
 ''');
     var propertyAccess = findNode.propertyAccess('?.');
     visitSubexpression(propertyAccess, 'int', changes: {
-      propertyAccess: havingInnerMatcher(const TypeMatcher<NullCheck>(),
-          isRemoveNullAwarenessFromPropertyAccess)
+      propertyAccess: TypeMatcher<NodeChangeForPropertyAccess>()
+          .having((c) => c.addNullCheck, 'addNullCheck', true)
+          .having((c) => c.removeNullAwareness, 'removeNullAwareness', true)
     });
   }
 
@@ -2755,12 +2757,7 @@
         null;
   }
 
-  static TypeMatcher<NestableChange> havingInnerMatcher(
-          TypeMatcher<NestableChange> typeMatcher, Matcher innerMatcher) =>
-      typeMatcher.having(
-          (nullCheck) => nullCheck.inner, 'inner change', innerMatcher);
-
   static Matcher isEliminateDeadIf(bool knownValue) =>
-      TypeMatcher<EliminateDeadIf>()
+      TypeMatcher<NodeChangeForConditional>()
           .having((c) => c.conditionValue, 'conditionValue', knownValue);
 }
diff --git a/pkg/nnbd_migration/test/instrumentation_test.dart b/pkg/nnbd_migration/test/instrumentation_test.dart
index a99d220..82940fe 100644
--- a/pkg/nnbd_migration/test/instrumentation_test.dart
+++ b/pkg/nnbd_migration/test/instrumentation_test.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:nnbd_migration/instrumentation.dart';
 import 'package:nnbd_migration/nnbd_migration.dart';
-import 'package:nnbd_migration/nullability_state.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -95,12 +94,6 @@
   @override
   void prepareForUpdate() {
     test.changes = null;
-    test.propagationSteps.clear();
-  }
-
-  @override
-  void propagationStep(PropagationInfo info) {
-    test.propagationSteps.add(info);
   }
 }
 
@@ -129,8 +122,6 @@
 
   NullabilityNodeInfo never;
 
-  final List<PropagationInfo> propagationSteps = [];
-
   final Map<EdgeInfo, EdgeOriginInfo> edgeOrigin = {};
 
   FindNode findNode;
@@ -632,9 +623,7 @@
         .key;
     // Both assertEdge and unconditionalUsageEdge are upstream triggered because
     // either of them would have been sufficient to cause i to be marked as
-    // non-nullable, even though only one of them was actually reported to have
-    // done so via propagationStep.
-    expect(propagationSteps.where((s) => s.node == iNode), hasLength(1));
+    // non-nullable.
     expect(assertEdge.isUpstreamTriggered, true);
     expect(unconditionalUsageEdge.isUpstreamTriggered, true);
     // conditionalUsageEdge is not upstream triggered because it is a soft edge,
@@ -1205,32 +1194,6 @@
         hasLength(1));
   }
 
-  Future<void> test_propagationStep_downstream() async {
-    await analyze('''
-int x = null;
-''');
-    var xNode = explicitTypeNullability[findNode.typeAnnotation('int')];
-    var step = propagationSteps.where((s) => s.node == xNode).single;
-    expect(step.newState, NullabilityState.ordinaryNullable);
-    expect(step.reason, StateChangeReason.downstream);
-    expect(_isPointedToByAlways(step.edge.sourceNode), true);
-    expect(step.edge.destinationNode, xNode);
-  }
-
-  Future<void> test_propagationStep_upstream() async {
-    await analyze('''
-void f(int x) {
-  assert(x != null);
-}
-''');
-    var xNode = explicitTypeNullability[findNode.typeAnnotation('int')];
-    var step = propagationSteps.where((s) => s.node == xNode).single;
-    expect(step.newState, NullabilityState.nonNullable);
-    expect(step.reason, StateChangeReason.upstream);
-    expect(step.edge.sourceNode, xNode);
-    expect(step.edge.destinationNode, never);
-  }
-
   Future<void> test_substitutionNode() async {
     await analyze('''
 class C<T> {
diff --git a/pkg/nnbd_migration/test/migration_visitor_test_base.dart b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
index e18d412..5b9f840 100644
--- a/pkg/nnbd_migration/test/migration_visitor_test_base.dart
+++ b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
@@ -108,6 +108,9 @@
 
   NullabilityNode newNode() => NullabilityNode.forTypeAnnotation(_offset++);
 
+  DecoratedType num_({NullabilityNode node}) =>
+      DecoratedType(typeProvider.numType, node ?? newNode());
+
   DecoratedType object({NullabilityNode node}) =>
       DecoratedType(typeProvider.objectType, node ?? newNode());
 
@@ -198,7 +201,7 @@
   /// aren't already.  In practice this means that the caller can pass in either
   //  /// a [NodeMatcher] or a [NullabilityNode].
   NullabilityEdge assertEdge(Object source, Object destination,
-      {@required bool hard, List<NullabilityNode> guards = const []}) {
+      {@required bool hard, bool checkable = true, Object guards = isEmpty}) {
     var edges = getEdges(source, destination);
     if (edges.length == 0) {
       fail('Expected edge $source -> $destination, found none');
@@ -207,7 +210,8 @@
     } else {
       var edge = edges[0];
       expect(edge.isHard, hard);
-      expect(edge.guards, unorderedEquals(guards));
+      expect(edge.isCheckable, checkable);
+      expect(edge.guards, guards);
       return edge;
     }
   }
@@ -394,6 +398,12 @@
         testSource, findNode.typeAnnotation(text));
   }
 
+  /// Gets the [ConditionalDiscard] information associated with the collection
+  /// element whose text is [text].
+  ConditionalDiscard elementDiscard(String text) {
+    return variables.conditionalDiscard(findNode.collectionElement(text));
+  }
+
   NullabilityNode possiblyOptionalParameter(String text) {
     return variables.possiblyOptionalParameter(findNode.defaultParameter(text));
   }
@@ -403,12 +413,6 @@
   ConditionalDiscard statementDiscard(String text) {
     return variables.conditionalDiscard(findNode.statement(text));
   }
-
-  /// Gets the [ConditionalDiscard] information associated with the collection
-  /// element whose text is [text].
-  ConditionalDiscard elementDiscard(String text) {
-    return variables.conditionalDiscard(findNode.collectionElement(text));
-  }
 }
 
 /// Abstract base class representing a thing that can be matched against
diff --git a/pkg/nnbd_migration/test/node_builder_test.dart b/pkg/nnbd_migration/test/node_builder_test.dart
index ab73cca..d993021 100644
--- a/pkg/nnbd_migration/test/node_builder_test.dart
+++ b/pkg/nnbd_migration/test/node_builder_test.dart
@@ -39,7 +39,7 @@
     expect(exceptionType.node, TypeMatcher<NullabilityNodeMutable>());
     var stackTraceType =
         variables.decoratedElementType(findNode.simple('st').staticElement);
-    assertEdge(stackTraceType.node, never, hard: true);
+    assertEdge(stackTraceType.node, never, hard: true, checkable: false);
   }
 
   Future<void> test_catch_clause_with_stacktrace_without_on() async {
@@ -53,7 +53,7 @@
     expect(exceptionType.node.isImmutable, false);
     var stackTraceType =
         variables.decoratedElementType(findNode.simple('st').staticElement);
-    assertEdge(stackTraceType.node, never, hard: true);
+    assertEdge(stackTraceType.node, never, hard: true, checkable: false);
   }
 
   Future<void> test_catch_clause_without_catch() async {
@@ -313,7 +313,7 @@
     var types = decoratedDirectSupertypes('C');
     var decorated = types[typeProvider.objectType.element];
     expect(decorated.type.toString(), 'Object');
-    assertEdge(decorated.node, never, hard: true);
+    assertEdge(decorated.node, never, hard: true, checkable: false);
     expect(decorated.typeArguments, isEmpty);
   }
 
@@ -419,7 +419,7 @@
     var types = decoratedDirectSupertypes('C');
     var decorated = types[typeProvider.objectType.element];
     expect(decorated.type.toString(), 'Object');
-    assertEdge(decorated.node, never, hard: true);
+    assertEdge(decorated.node, never, hard: true, checkable: false);
     expect(decorated.typeArguments, isEmpty);
   }
 
@@ -1513,7 +1513,8 @@
     await analyze('''
 void f(int/*!*/ i) {}
 ''');
-    assertEdge(decoratedTypeAnnotation('int').node, never, hard: true);
+    assertEdge(decoratedTypeAnnotation('int').node, never,
+        hard: true, checkable: false);
   }
 
   Future<void> test_type_comment_question() async {
diff --git a/pkg/nnbd_migration/test/nullability_node_test.dart b/pkg/nnbd_migration/test/nullability_node_test.dart
index 39e24bb..7ac845b 100644
--- a/pkg/nnbd_migration/test/nullability_node_test.dart
+++ b/pkg/nnbd_migration/test/nullability_node_test.dart
@@ -43,9 +43,9 @@
       NullabilityNode.forTypeAnnotation(offset);
 
   void propagate() {
-    graph.propagate();
-    unsatisfiedEdges = graph.unsatisfiedEdges.toList();
-    unsatisfiedSubstitutions = graph.unsatisfiedSubstitutions.toList();
+    var propagationResult = graph.propagate();
+    unsatisfiedEdges = propagationResult.unsatisfiedEdges;
+    unsatisfiedSubstitutions = propagationResult.unsatisfiedSubstitutions;
   }
 
   NullabilityNode subst(NullabilityNode inner, NullabilityNode outer) {
diff --git a/pkg/nnbd_migration/test/test_all.dart b/pkg/nnbd_migration/test/test_all.dart
index 6b604595..cde6e0f 100644
--- a/pkg/nnbd_migration/test/test_all.dart
+++ b/pkg/nnbd_migration/test/test_all.dart
@@ -15,6 +15,7 @@
 import 'edit_plan_test.dart' as edit_plan_test;
 import 'edit_planner_pass_through_merging_test.dart'
     as edit_planner_pass_through_merging_test;
+import 'fantasyland/test_all.dart' as fantasyland;
 import 'fix_aggregator_test.dart' as fix_aggregator_test;
 import 'fix_builder_test.dart' as fix_builder_test;
 import 'instrumentation_test.dart' as instrumentation_test;
@@ -35,6 +36,7 @@
     edge_builder_test.main();
     edit_plan_test.main();
     edit_planner_pass_through_merging_test.main();
+    fantasyland.main();
     fix_aggregator_test.main();
     fix_builder_test.main();
     instrumentation_test.main();
diff --git a/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart b/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart
index aca5806..b1980da 100644
--- a/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart
+++ b/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart
@@ -31,11 +31,21 @@
     await tempDir.delete(recursive: true);
   }
 
+  Future<void> test_subprocessWorksViaParallelSubprocessLimit() async {
+    SubprocessLauncher launcher =
+        SubprocessLauncher('test_subprocessWorksViaParallelSubprocessLimit');
+
+    await launcher.runStreamed(Platform.resolvedExecutable, ['--version'],
+        perLine: outputCallback);
+    expect(output, anyElement(contains('Dart')));
+  }
+
   Future<void> test_subprocessRunsValidExecutable() async {
     SubprocessLauncher launcher =
         SubprocessLauncher('test_subprocessRunsValidExecutable');
 
-    await launcher.runStreamed(Platform.resolvedExecutable, ['--version'],
+    await launcher.runStreamedImmediate(
+        Platform.resolvedExecutable, ['--version'],
         perLine: outputCallback);
     expect(output, anyElement(contains('Dart')));
   }
@@ -52,7 +62,7 @@
         print('args: $args');
       }''');
 
-    await launcher.runStreamed(
+    await launcher.runStreamedImmediate(
         Platform.resolvedExecutable, [testScript.path, 'testArgument'],
         perLine: outputCallback);
     expect(output, anyElement(contains('args: [testArgument]')));
@@ -70,7 +80,8 @@
         print('environment: ${Platform.environment}');
       }''');
 
-    await launcher.runStreamed(Platform.resolvedExecutable, [testScript.path],
+    await launcher.runStreamedImmediate(
+        Platform.resolvedExecutable, [testScript.path],
         environment: {'__SUBPROCESS_PASSES_ENVIRONMENT_TEST': 'yes'},
         perLine: outputCallback);
     expect(
@@ -91,7 +102,8 @@
         print('working directory: ${Directory.current.path}');
       }''');
 
-    await launcher.runStreamed(Platform.resolvedExecutable, [testScript.path],
+    await launcher.runStreamedImmediate(
+        Platform.resolvedExecutable, [testScript.path],
         workingDirectory: tempDir.path, perLine: outputCallback);
     expect(
         output,
@@ -111,7 +123,7 @@
         exit(1);
       }''');
     await expectLater(
-        () async => await launcher.runStreamed(
+        () async => await launcher.runStreamedImmediate(
             Platform.resolvedExecutable, [testScript.path],
             perLine: outputCallback),
         throwsA(TypeMatcher<ProcessException>()));
diff --git a/pkg/nnbd_migration/tool/trial_migration.dart b/pkg/nnbd_migration/tool/trial_migration.dart
index f607a7b..878c024 100644
--- a/pkg/nnbd_migration/tool/trial_migration.dart
+++ b/pkg/nnbd_migration/tool/trial_migration.dart
@@ -17,7 +17,6 @@
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:args/args.dart';
 import 'package:nnbd_migration/nnbd_migration.dart';
-import 'package:nnbd_migration/src/utilities/multi_future_tracker.dart';
 import 'package:path/path.dart' as path;
 
 import 'src/package.dart';
@@ -40,17 +39,10 @@
       ManualPackage(package),
   ];
 
-  // Limit the number of simultaneous git/pub commands.
-  MultiFutureTracker futureTracker =
-      MultiFutureTracker(Platform.numberOfProcessors);
-
-  for (String package in parsedArgs['git_packages'] as Iterable<String>) {
-    await futureTracker.addFutureFromClosure(() async => packages.add(
-        await GitPackage.gitPackageFactory(
-            package, playground, parsedArgs['update'] as bool)));
-  }
-
-  await futureTracker.wait();
+  var packageNames = parsedArgs['git_packages'] as Iterable<String>;
+  await Future.wait(packageNames.map((n) async => packages.add(
+      await GitPackage.gitPackageFactory(
+          n, playground, parsedArgs['update'] as bool))));
 
   String categoryOfInterest =
       parsedArgs.rest.isEmpty ? null : parsedArgs.rest.single;
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 32c34d5..53d5295 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -9,22 +9,22 @@
 */*/*/packages/*/*: Skip
 */*/packages/*/*: Skip
 */packages/*/*: Skip
-analyzer/test/generated/compile_time_error_code_driver_test: Slow
-analyzer/test/generated/compile_time_error_code_kernel_test: Slow
-analyzer/test/generated/compile_time_error_code_test: Slow
-analyzer/test/generated/hint_code_kernel_test: Slow
-analyzer/test/generated/non_error_resolver_driver_test: Slow
-analyzer/test/generated/non_error_resolver_kernel_test: Slow
-analyzer/test/generated/non_hint_code_kernel_test: Slow
-analyzer/test/generated/static_type_warning_code_kernel_test: Slow
-analyzer/test/generated/static_warning_code_driver_test: Slow
-analyzer/test/generated/static_warning_code_kernel_test: Slow
-analyzer/test/generated/strong_mode_kernel_test: Slow
-analyzer/test/src/dart/analysis/driver_kernel_test: Slow
-analyzer/test/src/summary/resynthesize_kernel_test: Slow
-analyzer/test/src/task/strong/checker_test: Slow
-analyzer_plugin/test/plugin/folding_mixin_test: Slow
-dev_compiler/test/modular/*: Slow
+analyzer/test/generated/compile_time_error_code_driver_test: Slow, Pass
+analyzer/test/generated/compile_time_error_code_kernel_test: Slow, Pass
+analyzer/test/generated/compile_time_error_code_test: Slow, Pass
+analyzer/test/generated/hint_code_kernel_test: Slow, Pass
+analyzer/test/generated/non_error_resolver_driver_test: Slow, Pass
+analyzer/test/generated/non_error_resolver_kernel_test: Slow, Pass
+analyzer/test/generated/non_hint_code_kernel_test: Slow, Pass
+analyzer/test/generated/static_type_warning_code_kernel_test: Slow, Pass
+analyzer/test/generated/static_warning_code_driver_test: Slow, Pass
+analyzer/test/generated/static_warning_code_kernel_test: Slow, Pass
+analyzer/test/generated/strong_mode_kernel_test: Slow, Pass
+analyzer/test/src/dart/analysis/driver_kernel_test: Slow, Pass
+analyzer/test/src/summary/resynthesize_kernel_test: Slow, Pass
+analyzer/test/src/task/strong/checker_test: Slow, Pass
+analyzer_plugin/test/plugin/folding_mixin_test: Slow, Pass
+dev_compiler/test/modular/*: Slow, Pass
 dev_compiler/test/options/*: Skip # test needs fixes
 dev_compiler/test/sourcemap/*: SkipByDesign # Skip sourcemap tests
 dev_compiler/test/sourcemap/testfiles/*: SkipByDesign # Skip dev_compiler codegen tests
@@ -50,10 +50,10 @@
 front_end/test/whole_program_test: Slow, Pass
 front_end/testcases/*: Skip # These are not tests but input for tests.
 front_end/tool/incremental_perf_test: Slow, Pass
-kernel/test/closures_test: Slow
+kernel/test/closures_test: Slow, Pass
 kernel/testcases/*: Skip # These are not tests but input for tests.
-vm/test/frontend_server_test: Slow
-vm/test/transformations/type_flow/transformer_test: Slow
+vm/test/frontend_server_test: Slow, Pass
+vm/test/transformations/type_flow/transformer_test: Slow, Pass
 vm/testcases/*: SkipByDesign # These are not tests but input for tests.
 
 [ $compiler == dart2analyzer ]
@@ -61,7 +61,7 @@
 testing/test/dart_sdk_negative_test: SkipByDesign
 
 [ $compiler != dart2analyzer ]
-analyzer/test/src/summary/summarize_fasta_test: Slow
+analyzer/test/src/summary/summarize_fasta_test: Slow, Pass
 
 [ $compiler == dart2js ]
 _fe_analyzer_shared/test/*: SkipByDesign # Only meant to run on vm
@@ -73,13 +73,13 @@
 analyzer_plugin/tool/*: SkipByDesign # Only meant to run on vm
 build_integration/test/*: SkipByDesign # Only meant to run on vm, most use dart:mirrors and dart:io
 compiler/tool/*: SkipByDesign # Only meant to run on vm
-dartdev/test/command_test: SkipByDesign # Only meant to run on vm (uses dart:io)
+dartdev/test/*: SkipByDesign # Only meant to run on vm
 dartfix/test/*: SkipByDesign # Only meant to run on vm
 front_end/test/*: SkipByDesign # Only meant to run on vm, most use dart:mirrors and dart:io
 front_end/tool/*: SkipByDesign # Only meant to run on vm
-modular_test/test/memory_pipeline_test: Slow
-modular_test/test/validate_pipeline_test: Slow
-modular_test/test/validate_suite_test: Slow
+modular_test/test/memory_pipeline_test: Slow, Pass
+modular_test/test/validate_pipeline_test: Slow, Pass
+modular_test/test/validate_suite_test: Slow, Pass
 nnbd_migration/test/*: SkipByDesign # Uses mirrors
 smith/test/*: SkipByDesign # Only meant to run on vm
 status_file/test/normalize_test: SkipByDesign # Uses dart:io
@@ -93,30 +93,30 @@
 *: SkipByDesign # The pkg test framework imports dart:mirrors.
 
 [ $runtime == vm ]
-analysis_server/test/benchmarks_test: Slow
-analysis_server/test/domain_completion_test: Slow
-analysis_server/test/edit/refactoring_test: Slow
-analysis_server/test/integration/*: Slow
-analysis_server/test/services/completion/dart/imported_reference_contributor_test: Slow
-analysis_server/test/services/completion/dart/keyword_contributor_test: Slow
-analysis_server/test/services/completion/dart/local_constructor_contributor_test: Slow
-analysis_server/test/services/completion/dart/local_reference_contributor_test: Slow
-analysis_server/test/services/completion/dart/type_member_contributor_test: Slow
-analysis_server/test/services/correction/assist_test: Slow
-analysis_server/test/services/refactoring/extract_method_test: Slow
-analysis_server/test/services/refactoring/inline_method_test: Slow
+analysis_server/test/benchmarks_test: Slow, Pass
+analysis_server/test/domain_completion_test: Slow, Pass
+analysis_server/test/edit/refactoring_test: Slow, Pass
+analysis_server/test/integration/*: Slow, Pass
+analysis_server/test/services/completion/dart/imported_reference_contributor_test: Slow, Pass
+analysis_server/test/services/completion/dart/keyword_contributor_test: Slow, Pass
+analysis_server/test/services/completion/dart/local_constructor_contributor_test: Slow, Pass
+analysis_server/test/services/completion/dart/local_reference_contributor_test: Slow, Pass
+analysis_server/test/services/completion/dart/type_member_contributor_test: Slow, Pass
+analysis_server/test/services/correction/assist_test: Slow, Pass
+analysis_server/test/services/refactoring/extract_method_test: Slow, Pass
+analysis_server/test/services/refactoring/inline_method_test: Slow, Pass
 analysis_server/test/socket_server_test: Skip # Pass, Slow
-analysis_server/test/src/plugin/plugin_manager_test: Slow
-analyzer/test/generated/hint_code_driver_test: Slow
-analyzer/test/generated/non_error_resolver_kernel_test: Slow
-analyzer/test/generated/strong_mode_driver_test: Slow
-analyzer/test/src/dart/analysis/driver_resolution_kernel_test: Slow
-analyzer/test/src/dart/analysis/driver_test: Slow
-analyzer/test/src/summary/resynthesize_ast_test: Slow
-analyzer/test/src/task/strong/front_end_inference_test: Slow
-analyzer/test/src/task/strong/inferred_type_test: Slow
-analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test: Slow
-analyzer_plugin/test/src/utilities/completion/optype_test: Slow
+analysis_server/test/src/plugin/plugin_manager_test: Slow, Pass
+analyzer/test/generated/hint_code_driver_test: Slow, Pass
+analyzer/test/generated/non_error_resolver_kernel_test: Slow, Pass
+analyzer/test/generated/strong_mode_driver_test: Slow, Pass
+analyzer/test/src/dart/analysis/driver_resolution_kernel_test: Slow, Pass
+analyzer/test/src/dart/analysis/driver_test: Slow, Pass
+analyzer/test/src/summary/resynthesize_ast_test: Slow, Pass
+analyzer/test/src/task/strong/front_end_inference_test: Slow, Pass
+analyzer/test/src/task/strong/inferred_type_test: Slow, Pass
+analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test: Slow, Pass
+analyzer_plugin/test/src/utilities/completion/optype_test: Slow, Pass
 mutation_observer: Skip # Skip tests on the VM if the package depends on dart:html
 
 [ $runtime != vm ]
@@ -155,7 +155,7 @@
 kernel/test/*: SkipByDesign # Uses dart:io and bigints.
 
 [ $arch == x64 && $runtime == vm && $system == windows && $checked ]
-analyzer/test/src/task/strong/inferred_type_test: Slow
+analyzer/test/src/task/strong/inferred_type_test: Slow, Pass
 
 [ $builder_tag != dart2js_analyzer && $compiler == dart2js ]
 analysis_server/test/*: Skip # Issue 26813
@@ -171,7 +171,7 @@
 modular_test/test/src/find_sdk_root2_test: SkipByDesign
 
 [ $compiler == dart2js && $runtime == chrome && $system == macos ]
-third_party/di_tests/di_test: Slow # Issue 22896
+third_party/di_tests/di_test: Slow, Pass # Issue 22896
 
 [ $compiler == dart2js && $runtime == d8 ]
 front_end/test/src/base/uri_resolver_test: SkipByDesign # Relies on access to file system
@@ -180,11 +180,11 @@
 front_end/test/mixin_export_test: RuntimeError # Issue 30576
 
 [ $compiler == dart2js && $browser ]
-crypto/test/sha1_test: Slow
-crypto/test/sha256_test: Slow
+crypto/test/sha1_test: Slow, Pass
+crypto/test/sha256_test: Slow, Pass
 
 [ $compiler == dart2js && $checked ]
-crypto/test/base64_test: Slow
+crypto/test/base64_test: Slow, Pass
 
 [ $compiler == dart2js && $csp ]
 mutation_observer: Skip # This test cannot run under CSP because it is injecting a JavaScript polyfill
@@ -199,21 +199,21 @@
 
 [ $runtime == vm && $system == windows ]
 analysis_server/test/analysis/get_errors_test: Skip # runtime error, Issue 22180
-analysis_server/test/src/plugin/plugin_manager_test: Slow # Issue 34231
-analyzer/test/src/task/strong/checker_test: Slow
-analyzer/tool/task_dependency_graph/check_test: Slow
+analysis_server/test/src/plugin/plugin_manager_test: Slow, Pass # Issue 34231
+analyzer/test/src/task/strong/checker_test: Slow, Pass
+analyzer/tool/task_dependency_graph/check_test: Slow, Pass
 
 [ $runtime == vm && $system == windows && $checked ]
 front_end/tool/perf_test: Slow, Pass
 
 [ $runtime == vm && $checked ]
-analysis_server/test/completion_test: Slow
-analysis_server/test/integration/edit/sort_members_test: Slow
-analysis_server/test/services/correction/fix_test: Slow
+analysis_server/test/completion_test: Slow, Pass
+analysis_server/test/integration/edit/sort_members_test: Slow, Pass
+analysis_server/test/services/correction/fix_test: Slow, Pass
 analysis_server/test/socket_server_test: Skip # Pass, Slow
-analyzer/test/generated/non_error_resolver_kernel_test: Slow
-analyzer/test/src/summary/resynthesize_ast_test: Slow
-analyzer/test/src/task/strong/front_end_inference_test: Slow
+analyzer/test/generated/non_error_resolver_kernel_test: Slow, Pass
+analyzer/test/src/summary/resynthesize_ast_test: Slow, Pass
+analyzer/test/src/task/strong/front_end_inference_test: Slow, Pass
 
 # Timeout. These tests do not run efficiently on our simulator or low-end
 # devices.
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 719df1e..fdc14d2 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -263,7 +263,8 @@
         useElf: boolOption("use-elf"),
         useHotReload: boolOption("hot-reload"),
         useHotReloadRollback: boolOption("hot-reload-rollback"),
-        useSdk: boolOption("use-sdk"));
+        useSdk: boolOption("use-sdk"),
+        useQemu: boolOption("use-qemu"));
 
     // Should have consumed the whole map.
     if (optionsCopy.isNotEmpty) {
@@ -338,6 +339,8 @@
 
   final bool useSdk;
 
+  final bool useQemu;
+
   Configuration(this.name, this.architecture, this.compiler, this.mode,
       this.runtime, this.system,
       {NnbdMode nnbdMode,
@@ -360,7 +363,8 @@
       bool useElf,
       bool useHotReload,
       bool useHotReloadRollback,
-      bool useSdk})
+      bool useSdk,
+      bool useQemu})
       : nnbdMode = nnbdMode ?? NnbdMode.legacy,
         sanitizer = sanitizer ?? Sanitizer.none,
         babel = babel ?? "",
@@ -381,7 +385,8 @@
         useElf = useElf ?? false,
         useHotReload = useHotReload ?? false,
         useHotReloadRollback = useHotReloadRollback ?? false,
-        useSdk = useSdk ?? false;
+        useSdk = useSdk ?? false,
+        useQemu = useQemu ?? false;
 
   /// Returns `true` if this configuration's options all have the same values
   /// as [other].
@@ -411,7 +416,8 @@
       useElf == other.useElf &&
       useHotReload == other.useHotReload &&
       useHotReloadRollback == other.useHotReloadRollback &&
-      useSdk == other.useSdk;
+      useSdk == other.useSdk &&
+      useQemu == other.useQemu;
 
   /// Whether [a] and [b] contain the same strings, regardless of order.
   bool _listsEqual(List<String> a, List<String> b) {
@@ -460,7 +466,8 @@
         useElf,
         useHotReload,
         useHotReloadRollback,
-        useSdk
+        useSdk,
+        useQemu
       ]);
 
   String toString() {
@@ -500,6 +507,7 @@
     if (useHotReload) fields.add("hot-reload");
     if (useHotReloadRollback) fields.add("hot-reload-rollback");
     if (useSdk) fields.add("use-sdk");
+    if (useQemu) fields.add("use-qemu");
 
     buffer.write(fields.join(", "));
     buffer.write(")");
@@ -559,6 +567,7 @@
     boolField("hot-reload-rollback", useHotReloadRollback,
         other.useHotReloadRollback);
     boolField("use-sdk", useSdk, other.useSdk);
+    boolField("use-qemu", useQemu, other.useQemu);
 
     buffer.write(fields.join("\n   "));
     buffer.write("\n");
diff --git a/pkg/smith/lib/test_matrix.dart b/pkg/smith/lib/test_matrix.dart
index 0b8d003..5c8c35d 100644
--- a/pkg/smith/lib/test_matrix.dart
+++ b/pkg/smith/lib/test_matrix.dart
@@ -12,6 +12,7 @@
 class TestMatrix {
   final List<Configuration> configurations;
   final List<Builder> builders;
+  final List<String> branches;
 
   /// Reads a test matrix from the file at [path].
   static TestMatrix fromPath(String path) {
@@ -53,9 +54,10 @@
 
     var builderConfigurations = <Map>[...?json["builder_configurations"]];
     var builders = parseBuilders(builderConfigurations, configurations);
+    var branches = <String>[...?json["branches"]];
 
-    return TestMatrix._(configurations, builders);
+    return TestMatrix._(configurations, builders, branches);
   }
 
-  TestMatrix._(this.configurations, this.builders);
+  TestMatrix._(this.configurations, this.builders, this.branches);
 }
diff --git a/pkg/smith/test/test_matrix_test.dart b/pkg/smith/test/test_matrix_test.dart
index e4acbca..0884e67 100644
--- a/pkg/smith/test/test_matrix_test.dart
+++ b/pkg/smith/test/test_matrix_test.dart
@@ -121,6 +121,13 @@
       });
     });
   });
+
+  test("a list of branches is parsed", () {
+    var testMatrix = TestMatrix.fromJson({
+      "branches": ["master", "stable"]
+    });
+    expect(testMatrix.branches, unorderedEquals(["master", "stable"]));
+  });
 }
 
 void expectJsonError(String error, Map<String, dynamic> json) {
diff --git a/pkg/test_runner/lib/src/command.dart b/pkg/test_runner/lib/src/command.dart
index c03d4d2..938d48c 100644
--- a/pkg/test_runner/lib/src/command.dart
+++ b/pkg/test_runner/lib/src/command.dart
@@ -615,6 +615,7 @@
   AdbDartkCommand indexedCopy(int index) => AdbDartkCommand(
       buildPath, processTestFilename, kernelFile, arguments, extraLibraries,
       index: index);
+
   _buildHashCode(HashCodeBuilder builder) {
     super._buildHashCode(builder);
     builder.add(buildPath);
@@ -630,6 +631,11 @@
       extraLibraries == other.extraLibraries &&
       kernelFile == other.kernelFile;
 
+  VMCommandOutput createOutput(int exitCode, bool timedOut, List<int> stdout,
+          List<int> stderr, Duration time, bool compilationSkipped,
+          [int pid = 0]) =>
+      VMCommandOutput(this, exitCode, timedOut, stdout, stderr, time, pid);
+
   String toString() => 'Steps to push Dart VM and Dill file '
       'to an attached device. Uses (and requires) adb.';
 }
diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart
index a73d480..462ccba 100644
--- a/pkg/test_runner/lib/src/compiler_configuration.dart
+++ b/pkg/test_runner/lib/src/compiler_configuration.dart
@@ -688,6 +688,10 @@
         }
       } else if (_configuration.builderTag == "crossword") {
         exec = "${buildDir}_X64/gen_snapshot";
+      } else if (_configuration.useQemu) {
+        // DebugXARM --> DebugSIMARM_X64
+        final simBuildDir = buildDir.replaceAll("XARM", "SIMARM_X64");
+        exec = "$simBuildDir/gen_snapshot";
       } else {
         exec = "$buildDir/gen_snapshot";
       }
@@ -706,7 +710,10 @@
       ],
       if (_isAndroid && _isArm) '--no-sim-use-hardfp',
       if (_configuration.isMinified) '--obfuscate',
-      ..._replaceDartFiles(arguments, tempKernelFile(tempDir))
+      // The SIMARM precompiler assumes support for integer division, but the
+      // Qemu arm cpus do not support integer division.
+      if (_configuration.useQemu) '--no-use-integer-division',
+      ..._replaceDartFiles(arguments, tempKernelFile(tempDir)),
     ];
 
     return CompilationCommand('precompiler', tempDir, bootstrapDependencies(),
@@ -729,7 +736,7 @@
           "$host-x86_64/bin/$abiTriple-gcc";
       shared = '-shared';
     } else if (Platform.isLinux) {
-      if (_isSimArm) {
+      if (_isSimArm || _configuration.useQemu) {
         cc = 'arm-linux-gnueabihf-gcc';
       } else {
         cc = 'gcc';
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index ba2f2da..4982613 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -68,8 +68,7 @@
       this.outputDirectory,
       this.reproducingArguments,
       this.fastTestsOnly,
-      this.printPassingStdout,
-      this.useQemu})
+      this.printPassingStdout})
       : _packages = packages;
 
   final Map<String, RegExp> selectors;
@@ -98,7 +97,6 @@
   final bool writeResults;
   final bool writeLogs;
   final bool printPassingStdout;
-  final bool useQemu;
 
   Architecture get architecture => configuration.architecture;
   Compiler get compiler => configuration.compiler;
@@ -121,6 +119,7 @@
   bool get useElf => configuration.useElf;
   bool get useSdk => configuration.useSdk;
   bool get enableAsserts => configuration.enableAsserts;
+  bool get useQemu => configuration.useQemu;
 
   // Various file paths.
 
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index cedfc85..09a824c 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -26,7 +26,7 @@
   'service',
   'kernel',
   'observatory_ui',
-  'ffi'
+  'ffi_2'
 ];
 
 /// Specifies a single command line option.
@@ -751,8 +751,7 @@
           reproducingArguments:
               _reproducingCommand(data, namedConfiguration != null),
           fastTestsOnly: data["fast_tests"] as bool,
-          printPassingStdout: data["print_passing_stdout"] as bool,
-          useQemu: data["use_qemu"] as bool);
+          printPassingStdout: data["print_passing_stdout"] as bool);
 
       if (configuration.validate()) {
         result.add(configuration);
@@ -829,7 +828,8 @@
                   dart2jsOptions: dart2jsOptions,
                   experiments: experiments,
                   babel: data['babel'] as String,
-                  builderTag: data["builder_tag"] as String);
+                  builderTag: data["builder_tag"] as String,
+                  useQemu: data["use_qemu"] as bool);
               addConfiguration(configuration);
             }
           }
diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart
index b377f637..05fbe2b 100644
--- a/pkg/test_runner/lib/src/runtime_configuration.dart
+++ b/pkg/test_runner/lib/src/runtime_configuration.dart
@@ -300,9 +300,14 @@
       throw "dart_precompiled cannot run files of type '$type'.";
     }
 
-    return [
-      VMCommand(dartPrecompiledBinaryFileName, arguments, environmentOverrides)
-    ];
+    var executable = dartPrecompiledBinaryFileName;
+
+    if (_configuration.useQemu) {
+      arguments.insertAll(0, ['-L', '/usr/arm-linux-gnueabihf/', executable]);
+      executable = 'qemu-arm';
+    }
+
+    return [VMCommand(executable, arguments, environmentOverrides)];
   }
 }
 
diff --git a/pkg/test_runner/lib/src/test_configurations.dart b/pkg/test_runner/lib/src/test_configurations.dart
index 912bbb6..cce2e8d 100644
--- a/pkg/test_runner/lib/src/test_configurations.dart
+++ b/pkg/test_runner/lib/src/test_configurations.dart
@@ -45,6 +45,7 @@
   Path('tests/standalone'),
   Path('tests/standalone_2'),
   Path('tests/ffi'),
+  Path('tests/ffi_2'),
   Path('utils/tests/peg'),
 ];
 
diff --git a/pkg/vm/lib/target/flutter.dart b/pkg/vm/lib/target/flutter.dart
index 9d63c74..d95c679 100644
--- a/pkg/vm/lib/target/flutter.dart
+++ b/pkg/vm/lib/target/flutter.dart
@@ -5,6 +5,7 @@
 
 import 'package:kernel/ast.dart' show Component, Library;
 import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
 import 'package:kernel/transformations/track_widget_constructor_locations.dart';
 import 'package:vm/target/vm.dart' show VmTarget;
@@ -56,7 +57,8 @@
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg)}) {
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
     super.performPreConstantEvaluationTransformations(
         component, coreTypes, libraries, diagnosticReporter,
         logger: logger);
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 837a242..66458c9 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -10,6 +10,7 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
 import 'package:kernel/transformations/mixin_full_resolution.dart'
     as transformMixins show transformLibraries;
@@ -110,7 +111,8 @@
       CoreTypes coreTypes,
       List<Library> libraries,
       DiagnosticReporter diagnosticReporter,
-      {void logger(String msg)}) {
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
     super.performPreConstantEvaluationTransformations(
         component, coreTypes, libraries, diagnosticReporter,
         logger: logger);
@@ -140,15 +142,22 @@
       Map<String, String> environmentDefines,
       DiagnosticReporter diagnosticReporter,
       ReferenceFromIndex referenceFromIndex,
-      {void logger(String msg)}) {
+      {void logger(String msg),
+      ChangedStructureNotifier changedStructureNotifier}) {
     transformMixins.transformLibraries(
         this, coreTypes, hierarchy, libraries, referenceFromIndex,
         doSuperResolution: false /* resolution is done in Dart VM */);
     logger?.call("Transformed mixin applications");
 
     transformFfi.ReplacedMembers replacedFields =
-        transformFfiDefinitions.transformLibraries(component, coreTypes,
-            hierarchy, libraries, diagnosticReporter, referenceFromIndex);
+        transformFfiDefinitions.transformLibraries(
+            component,
+            coreTypes,
+            hierarchy,
+            libraries,
+            diagnosticReporter,
+            referenceFromIndex,
+            changedStructureNotifier);
     transformFfiUseSites.transformLibraries(component, coreTypes, hierarchy,
         libraries, diagnosticReporter, replacedFields, referenceFromIndex);
     logger?.call("Transformed ffi annotations");
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 5c16d85..97aa087 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -19,6 +19,7 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/library_index.dart' show LibraryIndex;
 import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart' show DiagnosticReporter;
 import 'package:kernel/type_environment.dart' show SubtypeCheckMode;
 
@@ -61,15 +62,16 @@
     ClassHierarchy hierarchy,
     List<Library> libraries,
     DiagnosticReporter diagnosticReporter,
-    ReferenceFromIndex referenceFromIndex) {
+    ReferenceFromIndex referenceFromIndex,
+    ChangedStructureNotifier changedStructureNotifier) {
   final LibraryIndex index =
       LibraryIndex(component, const ["dart:ffi", "dart:core"]);
   if (!index.containsLibrary("dart:ffi")) {
     // If dart:ffi is not loaded, do not do the transformation.
     return ReplacedMembers({}, {});
   }
-  final transformer = new _FfiDefinitionTransformer(
-      index, coreTypes, hierarchy, diagnosticReporter, referenceFromIndex);
+  final transformer = new _FfiDefinitionTransformer(index, coreTypes, hierarchy,
+      diagnosticReporter, referenceFromIndex, changedStructureNotifier);
   libraries.forEach(transformer.visitLibrary);
   return ReplacedMembers(
       transformer.replacedGetters, transformer.replacedSetters);
@@ -82,6 +84,8 @@
   Map<Field, Procedure> replacedGetters = {};
   Map<Field, Procedure> replacedSetters = {};
 
+  ChangedStructureNotifier changedStructureNotifier;
+
   IndexedLibrary currentLibraryIndex;
 
   _FfiDefinitionTransformer(
@@ -89,7 +93,8 @@
       CoreTypes coreTypes,
       ClassHierarchy hierarchy,
       DiagnosticReporter diagnosticReporter,
-      ReferenceFromIndex referenceFromIndex)
+      ReferenceFromIndex referenceFromIndex,
+      this.changedStructureNotifier)
       : super(index, coreTypes, hierarchy, diagnosticReporter,
             referenceFromIndex) {}
 
@@ -123,6 +128,7 @@
     if (fieldsValid) {
       final structSize = _replaceFields(node, indexedClass);
       _replaceSizeOfMethod(node, structSize, indexedClass);
+      changedStructureNotifier?.forClass(node);
     }
 
     return node;
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 673264a..f0021f0 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -10,7 +10,8 @@
 import 'package:kernel/target/targets.dart';
 import 'package:kernel/ast.dart' hide Statement, StatementVisitor;
 import 'package:kernel/ast.dart' as ast show Statement, StatementVisitor;
-import 'package:kernel/class_hierarchy.dart' show ClosedWorldClassHierarchy;
+import 'package:kernel/class_hierarchy.dart'
+    show ClassHierarchy, ClosedWorldClassHierarchy;
 import 'package:kernel/type_environment.dart'
     show StaticTypeContext, SubtypeCheckMode, TypeEnvironment;
 import 'package:kernel/type_algebra.dart' show Substitution;
@@ -113,6 +114,13 @@
               }
             }
           }
+        } else if (st is Narrow) {
+          // This pattern may appear after approximations during summary
+          // normalization (so it's not enough to handle it in _makeNarrow).
+          final arg = st.arg;
+          if (arg is Type && st.type == const AnyType()) {
+            return (arg is NullableType) ? arg.baseType : arg;
+          }
         }
 
         _processed.add(st);
@@ -472,6 +480,12 @@
   }
 }
 
+Iterable<Name> getSelectors(ClassHierarchy hierarchy, Class cls,
+        {bool setters = false}) =>
+    hierarchy
+        .getInterfaceMembers(cls, setters: setters)
+        .map((Member m) => m.name);
+
 enum FieldSummaryType { kFieldGuard, kInitializer }
 
 /// Create a type flow summary for a member from the kernel AST.
@@ -488,6 +502,8 @@
   final Map<AsExpression, TypeCheck> explicitCasts =
       <AsExpression, TypeCheck>{};
   final _FallthroughDetector _fallthroughDetector = new _FallthroughDetector();
+  final Set<Name> _nullMethodsAndGetters = <Name>{};
+  final Set<Name> _nullSetters = <Name>{};
 
   Summary _summary;
   _VariablesInfoCollector _variablesInfo;
@@ -542,6 +558,12 @@
       this._genericInterfacesInfo) {
     assertx(_genericInterfacesInfo != null);
     constantAllocationCollector = new ConstantAllocationCollector(this);
+    _nullMethodsAndGetters.addAll(getSelectors(
+        _hierarchy, _environment.coreTypes.nullClass,
+        setters: false));
+    _nullSetters.addAll(getSelectors(
+        _hierarchy, _environment.coreTypes.nullClass,
+        setters: true));
   }
 
   Summary createSummary(Member member,
@@ -1041,6 +1063,9 @@
         return (arg is NullableType) ? arg.baseType : arg;
       }
     }
+    if (type is NullableType && type.baseType == const AnyType()) {
+      return arg;
+    }
     Narrow narrow = new Narrow(arg, type);
     _summary.add(narrow);
     return narrow;
@@ -1290,15 +1315,37 @@
     _variableValues = null;
   }
 
+  void _updateReceiverAfterCall(
+      TreeNode receiverNode, TypeExpr receiverValue, Name selector,
+      {bool isSetter = false}) {
+    if (receiverNode is VariableGet) {
+      final nullSelectors = isSetter ? _nullSetters : _nullMethodsAndGetters;
+      if (!nullSelectors.contains(selector)) {
+        final int varIndex = _variablesInfo.varIndex[receiverNode.variable];
+        if (_variableCells[varIndex] == null) {
+          _variableValues[varIndex] =
+              _makeNarrow(receiverValue, const AnyType());
+        }
+      }
+    }
+  }
+
   @override
   defaultTreeNode(TreeNode node) =>
       throw 'Unexpected node ${node.runtimeType}: $node at ${node.location}';
 
   @override
   TypeExpr visitAsExpression(AsExpression node) {
-    final TypeExpr operand = _visit(node.operand);
+    final operandNode = node.operand;
+    final TypeExpr operand = _visit(operandNode);
     final TypeExpr result = _typeCheck(operand, node.type, node);
     explicitCasts[node] = result;
+    if (operandNode is VariableGet) {
+      final int varIndex = _variablesInfo.varIndex[operandNode.variable];
+      if (_variableCells[varIndex] == null) {
+        _variableValues[varIndex] = result;
+      }
+    }
     return result;
   }
 
@@ -1485,6 +1532,7 @@
         return _handleIndexingIntoListConstant(constant);
       }
     }
+    TypeExpr result;
     if (target == null) {
       if (node.name.name == '==') {
         assertx(args.values.length == 2);
@@ -1502,32 +1550,35 @@
           return _staticType(node);
         }
       }
-      return _makeCall(
+      result = _makeCall(
           node, new DynamicSelector(CallKind.Method, node.name), args);
-    }
-    // TODO(dartbug.com/34497): Once front-end desugars calls via
-    // fields/getters, handling of field and getter targets here
-    // can be turned into assertions.
-    if ((target is Field) || ((target is Procedure) && target.isGetter)) {
-      // Call via field/getter.
-      final value = _makeCall(
-          null,
-          (node.receiver is ThisExpression)
-              ? new VirtualSelector(target, callKind: CallKind.PropertyGet)
-              : new InterfaceSelector(target, callKind: CallKind.PropertyGet),
-          new Args<TypeExpr>([receiver]));
-      _makeCall(
-          null, DynamicSelector.kCall, new Args.withReceiver(args, value));
-      return _staticType(node);
     } else {
-      // TODO(alexmarkov): overloaded arithmetic operators
-      return _makeCall(
-          node,
-          (node.receiver is ThisExpression)
-              ? new VirtualSelector(target)
-              : new InterfaceSelector(target),
-          args);
+      // TODO(dartbug.com/34497): Once front-end desugars calls via
+      // fields/getters, handling of field and getter targets here
+      // can be turned into assertions.
+      if ((target is Field) || ((target is Procedure) && target.isGetter)) {
+        // Call via field/getter.
+        final value = _makeCall(
+            null,
+            (receiverNode is ThisExpression)
+                ? new VirtualSelector(target, callKind: CallKind.PropertyGet)
+                : new InterfaceSelector(target, callKind: CallKind.PropertyGet),
+            new Args<TypeExpr>([receiver]));
+        _makeCall(
+            null, DynamicSelector.kCall, new Args.withReceiver(args, value));
+        result = _staticType(node);
+      } else {
+        // TODO(alexmarkov): overloaded arithmetic operators
+        result = _makeCall(
+            node,
+            (node.receiver is ThisExpression)
+                ? new VirtualSelector(target)
+                : new InterfaceSelector(target),
+            args);
+      }
     }
+    _updateReceiverAfterCall(receiverNode, receiver, node.name);
+    return result;
   }
 
   TypeExpr _handleIndexingIntoListConstant(ListConstant list) {
@@ -1553,16 +1604,20 @@
     var receiver = _visit(node.receiver);
     var args = new Args<TypeExpr>([receiver]);
     final target = node.interfaceTarget;
+    TypeExpr result;
     if (target == null) {
-      return _makeCall(
+      result = _makeCall(
           node, new DynamicSelector(CallKind.PropertyGet, node.name), args);
+    } else {
+      result = _makeCall(
+          node,
+          (node.receiver is ThisExpression)
+              ? new VirtualSelector(target, callKind: CallKind.PropertyGet)
+              : new InterfaceSelector(target, callKind: CallKind.PropertyGet),
+          args);
     }
-    return _makeCall(
-        node,
-        (node.receiver is ThisExpression)
-            ? new VirtualSelector(target, callKind: CallKind.PropertyGet)
-            : new InterfaceSelector(target, callKind: CallKind.PropertyGet),
-        args);
+    _updateReceiverAfterCall(node.receiver, receiver, node.name);
+    return result;
   }
 
   @override
@@ -1583,6 +1638,8 @@
               : new InterfaceSelector(target, callKind: CallKind.PropertySet),
           args);
     }
+    _updateReceiverAfterCall(node.receiver, receiver, node.name,
+        isSetter: true);
     return value;
   }
 
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index dd6936e..86e516b 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -692,7 +692,7 @@
   class D<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::C<dart.core::int*, #lib::D::Q*, #lib::D::P*> {
     generic-covariant-impl field dart.core::Map<#lib::D::P*, #lib::D::Q*>* foo;
     constructor •(dynamic tt) → #lib::D<#lib::D::P*, #lib::D::Q*>*
-      : #lib::D::foo = tt as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*, super #lib::C::•()
+      : #lib::D::foo = tt as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*, super #lib::C::•()
       ;
     method foo2(dynamic y) → dynamic {
       if(y is #lib::A<#lib::D::P*>*) {
@@ -701,7 +701,7 @@
       if(y is #lib::C<dynamic, #lib::D::Q*, dart.core::List<#lib::D::P*>*>*) {
         dart.core::print("22");
       }
-      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
+      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
     }
     method foo3<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic>(dynamic z) → dynamic {
       if(z is #lib::A<#lib::D::foo3::T1*>*) {
@@ -713,8 +713,8 @@
       return (z as dart.core::Map<#lib::D::foo3::T2*, #lib::D::Q*>*).{dart.core::Map::values};
     }
     method foo4(dynamic w) → dart.core::Map<#lib::D::P*, #lib::D::Q*>* {
-      dart.core::List<dart.core::Map<#lib::D::P*, #lib::D::Q*>*>* list = <dart.core::Map<#lib::D::P*, #lib::D::Q*>*>[w as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*];
-      return w as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
+      dart.core::List<dart.core::Map<#lib::D::P*, #lib::D::Q*>*>* list = <dart.core::Map<#lib::D::P*, #lib::D::Q*>*>[w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*];
+      return w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
     }
   }
   class E<P extends dart.core::String* = dart.core::String*> extends dart.core::Object {
@@ -754,7 +754,7 @@
     return x as #lib::A<dart.core::int*>*;
   }
   static method foo5(dynamic x) → void {
-    #lib::globalVar = x as{TypeError} dart.core::List<dart.core::Iterable<dynamic>*>*;
+    #lib::globalVar = x as{TypeError,ForDynamic} dart.core::List<dart.core::Iterable<dynamic>*>*;
   }
   static method main() → dynamic {}
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
index b206c1d..f99332f 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
@@ -6,22 +6,21 @@
 RESULT: _T {}?
 ------------ #lib::bool_expressions ------------
 t0* = _Call direct [#lib::foo] ()
-t1 = _TypeCheck (t0 against dart.core::bool) (for #lib::foo() as{TypeError} dart.core::bool*)
+t1 = _TypeCheck (t0 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
 t2* = _Call direct [#lib::bar] ()
-t3* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi, 1))
+t3* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1))
 i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t3)
 t5* = _Call [dart.core::num::<] (i_0, _T (dart.core::_Smi, 10))
 t6* = _Call direct [#lib::bar] ()
 t7* = _Call direct [#lib::foo] ()
 t8 = _Join [dynamic] (_T (dart.core::bool, true), t7)
-t9 = _Narrow (t8 to _T ANY?)
-t10 = _TypeCheck (t9 against dart.core::bool) (for (x{dart.core::bool*} ?{dynamic} true : #lib::foo()) as{TypeError} dart.core::bool*)
+t9 = _TypeCheck (t8 against dart.core::bool) (for (x{dart.core::bool*} ?{dynamic} true : #lib::foo()) as{TypeError,ForDynamic} dart.core::bool*)
+t10* = _Call direct [#lib::bar] ()
 t11* = _Call direct [#lib::bar] ()
-t12* = _Call direct [#lib::bar] ()
-t13* = _Call direct [#lib::foo] ()
-t14 = _TypeCheck (t13 against dart.core::bool) (for #lib::foo() as{TypeError} dart.core::bool*)
-t15* = _Call direct [#lib::foo] ()
-t16 = _TypeCheck (t15 against dart.core::bool) (for #lib::foo() as{TypeError} dart.core::bool*)
+t12* = _Call direct [#lib::foo] ()
+t13 = _TypeCheck (t12 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
+t14* = _Call direct [#lib::foo] ()
+t15 = _TypeCheck (t14 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
 y_0 = _Join [dart.core::bool*] (_T (dart.core::bool), _T (dart.core::bool, true))
 RESULT: _T {}?
 ------------ #lib::main ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
index 19e394c..9b8e411 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
@@ -36,12 +36,13 @@
 %a4 = _Parameter #4 [_T (dart.core::Object)+?]
 t5 = _Call direct [#lib::B::] (_T (#lib::B))
 t6 = _Call [#lib::A::foo1] (%aa, _T (#lib::B))
-t7* = _Call get [#lib::A::foo2] (%aa)
-t8 = _TypeCheck (t7 against dart.core::int) (for aa.{#lib::A::foo2} as{TypeError} dart.core::int*)
-t9 = _Call set [#lib::A::foo3] (%aa, t8)
-t10* = _Call get [#lib::A::foo1] (%aa)
-t11* = _Call get [#lib::A::foo2] (%aa)
-t12 = _Call dynamic [call] (t11, %a2, %a3, t10)
+t7 = _Narrow (%aa to _T ANY)
+t8* = _Call get [#lib::A::foo2] (t7)
+t9 = _TypeCheck (t8 against dart.core::int) (for aa.{#lib::A::foo2} as{TypeError,ForDynamic} dart.core::int*)
+t10 = _Call set [#lib::A::foo3] (t7, t9)
+t11* = _Call get [#lib::A::foo1] (t7)
+t12* = _Call get [#lib::A::foo2] (t7)
+t13 = _Call dynamic [call] (t12, %a2, %a3, t11)
 RESULT: _T ANY?
 ------------ #lib::C::dynamicCalls ------------
 %this = _Parameter #0 [_T (#lib::C)+]
@@ -51,11 +52,12 @@
 %a4 = _Parameter #4 [_T (dart.core::Object)+?]
 t5 = _Call direct [#lib::B::] (_T (#lib::B))
 t6 = _Call dynamic [foo1] (%aa, _T (#lib::B))
-t7* = _Call dynamic get [foo2] (%aa)
-t8 = _Call dynamic set [foo3] (%aa, t7)
-t9* = _Call dynamic get [foo1] (%aa)
-t10* = _Call dynamic [foo2] (%aa, %a2, %a3, t9)
-RESULT: t10
+t7 = _Narrow (%aa to _T ANY)
+t8* = _Call dynamic get [foo2] (t7)
+t9 = _Call dynamic set [foo3] (t7, t8)
+t10* = _Call dynamic get [foo1] (t7)
+t11* = _Call dynamic [foo2] (t7, %a2, %a3, t10)
+RESULT: t11
 ------------ #lib::D:: ------------
 %this = _Parameter #0 [_T (#lib::D)+]
 t1 = _Call direct [#lib::B::] (%this)
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart
index 6b1a2e9..9dda4a4 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart
@@ -257,4 +257,9 @@
   return x;
 }
 
+void cast1(x) {
+  foo(x as C1);
+  bar(x);
+}
+
 main() {}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index 88b429a..eba9380 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -71,10 +71,10 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7* = _Call direct [#lib::foo] (_T (#lib::C3))
-t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError} dart.core::bool*)
+t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
 t10 = _Call direct [#lib::bar] (x_0)
 RESULT: x_0
@@ -82,10 +82,10 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t1 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t2* = _Call direct [#lib::foo] (_T (#lib::C2))
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t5* = _Call direct [#lib::foo] (_T (#lib::C3))
-t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError} dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t7 = _Call direct [#lib::bar] (_T (#lib::C3))
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
 RESULT: x_0
@@ -104,7 +104,7 @@
 RESULT: _T {}?
 ------------ #lib::if6b ------------
 %x = _Parameter #0 [_T ANY?]
-t1 = _TypeCheck (%x against dart.core::bool) (for x as{TypeError} dart.core::bool*)
+t1 = _TypeCheck (%x against dart.core::bool) (for x as{TypeError,ForDynamic} dart.core::bool*)
 t2 = _Call direct [#lib::foo] (_T (dart.core::bool, true))
 t3 = _Call direct [#lib::bar] (_T (dart.core::bool, false))
 x_0 = _Join [dynamic] (_T (dart.core::bool, true), _T (dart.core::bool, false))
@@ -138,7 +138,7 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7 = _Call direct [#lib::C4::] (_T (#lib::C4))
 x_0 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C4))
@@ -153,20 +153,19 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7 = _Call direct [#lib::C4::] (_T (#lib::C4))
 t8* = _Call direct [#lib::foo] (_T (dart.core::_GrowableList<#lib::C4>))
 t9 = _Call direct [#lib::foo] (_T (#lib::C3))
 t10 = _Join [dynamic] (_T (#lib::C3), t8)
-t11 = _Narrow (t10 to _T ANY?)
-t12 = _Call direct [#lib::bar] (t11)
+t11 = _Call direct [#lib::bar] (t10)
 RESULT: _T {}?
 ------------ #lib::loop1 ------------
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C2))
 t2* = _Call direct [#lib::foo] (x_0)
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t5 = _Call direct [#lib::bar] (x_0)
 RESULT: x_0
@@ -178,13 +177,13 @@
 t4 = _Call direct [#lib::bar] (_T (#lib::C2))
 t5 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t6* = _Call direct [#lib::bar] (_T (#lib::C3))
-t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3::•()) as{TypeError} dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
 RESULT: _T (#lib::C3)
 ------------ #lib::loop3 ------------
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t1 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t2* = _Call direct [#lib::foo] (_T (#lib::C2))
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t5 = _Call direct [#lib::bar] (_T (#lib::C2))
 RESULT: _T (#lib::C2)
@@ -195,19 +194,20 @@
 t3* = _Call direct [dart._internal::unsafeCast] (_T (dart.core::_GrowableList<dynamic>))
 t4* = _Call get [dart.core::Iterable::iterator] (t3)
 t5* = _Call [dart.core::Iterator::moveNext] (t4)
-t6 = _Call get [dart.core::Iterator::current] (t4)
+t6 = _Narrow (t4 to _T ANY)
+t7 = _Call get [dart.core::Iterator::current] (t6)
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
-t8 = _Call direct [#lib::foo] (x_0)
-t9 = _Call direct [#lib::C3::] (_T (#lib::C3))
+t9 = _Call direct [#lib::foo] (x_0)
+t10 = _Call direct [#lib::C3::] (_T (#lib::C3))
 RESULT: x_0
 ------------ #lib::loop5 ------------
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C3))
 t2* = _Call direct [#lib::foo] (x_0)
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t5* = _Call direct [#lib::bar] (_T (#lib::C2))
-t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::bar(x) as{TypeError} dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*)
 t7 = _Call direct [#lib::C3::] (_T (#lib::C3))
 x_1 = _Join [dynamic] (x_0, _T (#lib::C2))
 RESULT: x_1
@@ -216,10 +216,10 @@
 x_1 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C2))
 x_0 = _Join [dynamic] (_T (#lib::C1), x_1)
 t3* = _Call direct [#lib::foo] (x_0)
-t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as{TypeError} dart.core::bool*)
+t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
 t5 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t6* = _Call direct [#lib::bar] (_T (#lib::C2))
-t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as{TypeError} dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*)
 t8 = _Call direct [#lib::C3::] (_T (#lib::C3))
 RESULT: x_0
 ------------ #lib::try1 ------------
@@ -270,6 +270,12 @@
 t5 = _Call direct [#lib::C3::] (_T (#lib::C3))
 x_2 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C3))
 RESULT: x_2
+------------ #lib::cast1 ------------
+%x = _Parameter #0 [_T ANY?]
+t1 = _TypeCheck (%x against #lib::C1) (for x as #lib::C1*)
+t2 = _Call direct [#lib::foo] (t1)
+t3 = _Call direct [#lib::bar] (t1)
+RESULT: _T {}?
 ------------ #lib::main ------------
 
 RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
index c85e5b1..2aff27c 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
@@ -34,7 +34,7 @@
 RESULT: %a2
 ------------ #lib::loop2 ------------
 %x = _Parameter #0 [_T (dart.core::int)+?]
-t1* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi, 1))
+t1* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1))
 i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t1)
 t3* = _Call [dart.core::num::<] (i_0, _T (dart.core::_Smi, 5))
 t4* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi, 10))
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
index dae1516..d79868a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
@@ -6,7 +6,7 @@
 static method isPrime([@vm.inferred-type.metadata=int] dynamic n) → core::bool* {
   if(_in::unsafeCast<core::bool*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool] n.<(2)))
     return false;
-  for (core::int* i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation::*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i).{core::num::<=}(_in::unsafeCast<core::num*>(n)); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
+  for (core::int* i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation::*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i).{core::num::<=}(_in::unsafeCast<core::num*>(n)); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
     if([@vm.direct-call.metadata=dart.core::_IntegerImplementation::==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation::%] [@vm.inferred-type.metadata=int] n.%(i).{core::Object::==}(0))
       return false;
   }
@@ -31,7 +31,7 @@
 }
 static method main(core::List<core::String*>* args) → dynamic {
   core::Stopwatch* timer = let final core::Stopwatch* #t1 = new core::Stopwatch::•() in let final void #t2 = [@vm.direct-call.metadata=dart.core::Stopwatch::start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}() in #t1;
-  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
+  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
     self::run();
   }
   [@vm.direct-call.metadata=dart.core::Stopwatch::stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
index 6efba39..f7c22d7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
@@ -19,7 +19,7 @@
   }
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasThisUses:false,hasTearOffUses:false]  operator *([@vm.inferred-type.metadata=#lib::_Vector?] self::_Vector* a) → core::double* {
     core::double* result = 0.0;
-    for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector::_length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1))
+    for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector::_length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1))
       result = [@vm.direct-call.metadata=dart.core::_Double::+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double::*] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector::[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] this.{self::_Vector::[]}(i).{core::double::*}([@vm.direct-call.metadata=#lib::_Vector::[]??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] a.{self::_Vector::[]}(i)));
     return result;
   }
@@ -28,7 +28,7 @@
 [@vm.inferred-type.metadata=dart.core::_Double?]static field core::double* x = 0.0;
 static method main(core::List<core::String*>* args) → dynamic {
   core::Stopwatch* timer = let final core::Stopwatch* #t4 = new core::Stopwatch::•() in let final void #t5 = [@vm.direct-call.metadata=dart.core::Stopwatch::start] [@vm.inferred-type.metadata=!? (skip check)] #t4.{core::Stopwatch::start}() in #t4;
-  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100000000); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
+  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100000000); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
     self::x = [@vm.direct-call.metadata=dart.core::_Double::+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=dart.core::_Double?] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector::*??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=#lib::_Vector?] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector?] self::v));
   }
   [@vm.direct-call.metadata=dart.core::Stopwatch::stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
index 2e9bc45..d7385b2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
@@ -40,5 +40,5 @@
   return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
 static method main(core::List<core::String*>* args) → dynamic {
   self::foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
-  self::foo2(self::getDynamic() as{TypeError} asy::Future<self::A*>*, self::getDynamic() as{TypeError} self::A*, self::getDynamic() as{TypeError} asy::FutureOr<self::A*>*, self::getDynamic() as{TypeError} asy::FutureOr<self::A*>*);
+  self::foo2(self::getDynamic() as{TypeError,ForDynamic} asy::Future<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} self::A*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
index 21d4662..35e77bc 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -66,7 +66,7 @@
 static method getDynamic() → dynamic
   return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
 static method getValue() → core::Object* {
-  self::A* aa = self::getDynamic() as{TypeError} self::A*;
+  self::A* aa = self::getDynamic() as{TypeError,ForDynamic} self::A*;
   return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
 }
 static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1* x) → dynamic
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
index 934ad1b..87ebd0c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
@@ -38,7 +38,7 @@
   new self::B::•();
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::allocateB();
-  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
index 7c66149..caa602a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
@@ -67,9 +67,9 @@
   new self::E::•();
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::allocateB();
-  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::allocateE();
-  self::use3(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use3(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
index cd59c76..ccedd89 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
@@ -59,7 +59,7 @@
   new self::A::•();
   new self::T1::•();
   new self::T2::•();
-  self::use1(new self::DeepCaller1::•(), self::getDynamic() as{TypeError} self::A*);
-  self::use2(new self::DeepCaller2::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use1(new self::DeepCaller1::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
+  self::use2(new self::DeepCaller2::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::setField2(new self::A::•(), new self::T2::•());
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 062ebf9..4425a1c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -123,7 +123,7 @@
   core::print([@vm.direct-call.metadata=#lib::D::bar??] [@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bar});
   core::print([@vm.direct-call.metadata=#lib::D::bazz??] [@vm.inferred-type.metadata=#lib::T2 (skip check)] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bazz}(1, 2, 3, 4));
   new self::E::•();
-  self::A* xx = self::getDynamic() as{TypeError} self::A*;
+  self::A* xx = self::getDynamic() as{TypeError,ForDynamic} self::A*;
   core::print([@vm.inferred-type.metadata=!] xx.{self::A::bar});
   dynamic yy = self::getDynamic();
   core::print([@vm.inferred-type.metadata=!] yy.twoArg(1, 2, 3));
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
index 9fbf8c0..8b68037 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
@@ -53,10 +53,10 @@
 static method use(dynamic x) → dynamic
   return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(x);
 static method main(core::List<core::String*>* args) → dynamic {
-  self::func1(self::getDynamic() as{TypeError} self::T0*);
+  self::func1(self::getDynamic() as{TypeError,ForDynamic} self::T0*);
   self::use(#C1);
   self::use(new self::A::•().{self::A::method1});
-  self::B* bb = self::getDynamic() as{TypeError} self::B*;
+  self::B* bb = self::getDynamic() as{TypeError,ForDynamic} self::B*;
   [@vm.direct-call.metadata=#lib::C::method2??] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B::method2}(self::getDynamic());
   self::getDynamic().method3(self::getDynamic());
   new self::T2::•();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
index 44110b0..02808ea 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=hasThisUses:false]  method foo() → core::int*
-    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num*) as{TypeError} core::int*;
+    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
 }
 class TearOffDynamicMethod extends core::Object {
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false]  field dynamic bazz;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index b2c15f7..73eb1d5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -23,7 +23,7 @@
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasThisUses:false,hasNonThisUses:false]  method foo() → core::int*
     return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 3.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasNonThisUses:false,hasTearOffUses:false]  method doCall(dynamic x) → core::int*
-    return [@vm.call-site-attributes.metadata=receiverType:dynamic] x.call() as{TypeError} core::int*;
+    return [@vm.call-site-attributes.metadata=receiverType:dynamic] x.call() as{TypeError,ForDynamic} core::int*;
 }
 class TearOffSuperMethod extends self::Base {
   synthetic constructor •() → self::TearOffSuperMethod*
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index f07fdc6..a5bdc9c 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -140,6 +140,10 @@
     }
   }
 
+  if (use_nnbd) {
+    defines += [ "DART_BUILT_WITH_NNBD_FLAG" ]
+  }
+
   if (!is_win) {
     cflags = [
       "-Werror",
diff --git a/runtime/bin/dart_embedder_api_impl.cc b/runtime/bin/dart_embedder_api_impl.cc
index 6af5d82..73974ea 100644
--- a/runtime/bin/dart_embedder_api_impl.cc
+++ b/runtime/bin/dart_embedder_api_impl.cc
@@ -90,7 +90,8 @@
   if (!bin::VmService::Setup(config.ip, config.port, config.dev_mode,
                              config.disable_auth_codes,
                              config.write_service_info_filename,
-                             /*trace_loading=*/false, config.deterministic)) {
+                             /*trace_loading=*/false, config.deterministic,
+                             /*enable_service_port_fallback=*/false)) {
     *error = strdup(bin::VmService::GetErrorMessage());
     return nullptr;
   }
@@ -124,7 +125,8 @@
   if (!bin::VmService::Setup(config.ip, config.port, config.dev_mode,
                              config.disable_auth_codes,
                              config.write_service_info_filename,
-                             /*trace_loading=*/false, config.deterministic)) {
+                             /*trace_loading=*/false, config.deterministic,
+                             /*enable_service_port_fallback=*/false)) {
     *error = strdup(bin::VmService::GetErrorMessage());
     return nullptr;
   }
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index a72d807..0ac8065 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -713,7 +713,11 @@
   ASSERT((fd == STDIN_FILENO) || (fd == STDOUT_FILENO) ||
          (fd == STDERR_FILENO));
   File::StdioHandleType type = File::GetStdioHandleType(static_cast<int>(fd));
-  Dart_SetIntegerReturnValue(args, type);
+  if (type == File::StdioHandleType::kTypeError) {
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+  } else {
+    Dart_SetIntegerReturnValue(args, type);
+  }
 }
 
 void FUNCTION_NAME(File_GetType)(Dart_NativeArguments args) {
diff --git a/runtime/bin/file.h b/runtime/bin/file.h
index c0ab0fb..4255ba8 100644
--- a/runtime/bin/file.h
+++ b/runtime/bin/file.h
@@ -74,11 +74,13 @@
   enum Identical { kIdentical = 0, kDifferent = 1, kError = 2 };
 
   enum StdioHandleType {
+    // These match the constants in stdio.dart.
     kTerminal = 0,
     kPipe = 1,
     kFile = 2,
     kSocket = 3,
-    kOther = 4
+    kOther = 4,
+    kTypeError = 5
   };
 
   enum FileStat {
diff --git a/runtime/bin/file_android.cc b/runtime/bin/file_android.cc
index 59abc84..c79c1e0 100644
--- a/runtime/bin/file_android.cc
+++ b/runtime/bin/file_android.cc
@@ -669,7 +669,7 @@
   struct stat buf;
   int result = fstat(fd, &buf);
   if (result == -1) {
-    return kOther;
+    return kTypeError;
   }
   if (S_ISCHR(buf.st_mode)) {
     return kTerminal;
diff --git a/runtime/bin/file_fuchsia.cc b/runtime/bin/file_fuchsia.cc
index 98b6537..9445de6 100644
--- a/runtime/bin/file_fuchsia.cc
+++ b/runtime/bin/file_fuchsia.cc
@@ -622,7 +622,7 @@
     // fstat() on fds 0, 1, 2 on Fuchsia return -1 with errno ENOTSUP,
     // but if they are opened, then we can read/write them, so pretend they
     // are kPipe.
-    return ((errno == ENOTSUP) && fd_is_valid(fd)) ? kPipe : kOther;
+    return ((errno == ENOTSUP) && fd_is_valid(fd)) ? kPipe : kTypeError;
   }
   if (S_ISCHR(buf.st_mode)) {
     return kTerminal;
diff --git a/runtime/bin/file_linux.cc b/runtime/bin/file_linux.cc
index c012f8a..bd2f020 100644
--- a/runtime/bin/file_linux.cc
+++ b/runtime/bin/file_linux.cc
@@ -666,7 +666,7 @@
   struct stat64 buf;
   int result = TEMP_FAILURE_RETRY(fstat64(fd, &buf));
   if (result == -1) {
-    return kOther;
+    return kTypeError;
   }
   if (S_ISCHR(buf.st_mode)) {
     return kTerminal;
diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
index 456023c..25af65b9 100644
--- a/runtime/bin/file_macos.cc
+++ b/runtime/bin/file_macos.cc
@@ -585,7 +585,7 @@
   struct stat buf;
   int result = fstat(fd, &buf);
   if (result == -1) {
-    return kOther;
+    return kTypeError;
   }
   if (S_ISCHR(buf.st_mode)) {
     return kTerminal;
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index bd2df32..b98754b 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -565,7 +565,7 @@
           Options::vm_service_server_ip(), Options::vm_service_server_port(),
           Options::vm_service_dev_mode(), Options::vm_service_auth_disabled(),
           Options::vm_write_service_info_filename(), Options::trace_loading(),
-          Options::deterministic())) {
+          Options::deterministic(), Options::enable_service_port_fallback())) {
     *error = strdup(VmService::GetErrorMessage());
     return NULL;
   }
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 05fbb2c..9eaf8c4 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -212,6 +212,10 @@
 "  so it is not recommended to disable them unless behind a firewall on a\n"
 "  secure device.\n"
 "\n"
+"--enable-service-port-fallback\n"
+"  When the VM service is told to bind to a particular port, fallback to 0 if\n"
+"  it fails to bind instead of failing to start.\n"
+"\n"
 "--root-certs-file=<path>\n"
 "  The path to a file containing the trusted root certificates to use for\n"
 "  secure socket connections.\n"
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index db7c0b7..3fe9f74 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -45,7 +45,8 @@
   V(short_socket_write, short_socket_write)                                    \
   V(disable_exit, exit_disabled)                                               \
   V(preview_dart_2, nop_option)                                                \
-  V(suppress_core_dump, suppress_core_dump)
+  V(suppress_core_dump, suppress_core_dump)                                    \
+  V(enable_service_port_fallback, enable_service_port_fallback)
 
 // Boolean flags that have a short form.
 #define SHORT_BOOL_OPTIONS_LIST(V)                                             \
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 86c17f8..e99cd4e 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -148,7 +148,8 @@
   if (!bin::VmService::Setup("127.0.0.1", 0,
                              /*dev_mode=*/false, /*auth_disabled=*/true,
                              /*write_service_info_filename*/ "",
-                             /*trace_loading=*/false, /*deterministic=*/true)) {
+                             /*trace_loading=*/false, /*deterministic=*/true,
+                             /*enable_service_port_fallback=*/false)) {
     *error = strdup(bin::VmService::GetErrorMessage());
     return nullptr;
   }
diff --git a/runtime/bin/vmservice_impl.cc b/runtime/bin/vmservice_impl.cc
index 4c9c9a9..a3f4b00 100644
--- a/runtime/bin/vmservice_impl.cc
+++ b/runtime/bin/vmservice_impl.cc
@@ -116,7 +116,8 @@
                       bool auth_codes_disabled,
                       const char* write_service_info_filename,
                       bool trace_loading,
-                      bool deterministic) {
+                      bool deterministic,
+                      bool enable_service_port_fallback) {
   Dart_Isolate isolate = Dart_CurrentIsolate();
   ASSERT(isolate != NULL);
   SetServerAddress("");
@@ -177,6 +178,11 @@
                          Dart_NewBoolean(auth_codes_disabled));
   SHUTDOWN_ON_ERROR(result);
 
+  result =
+      Dart_SetField(library, DartUtils::NewString("_enableServicePortFallback"),
+                    Dart_NewBoolean(enable_service_port_fallback));
+  SHUTDOWN_ON_ERROR(result);
+
   if (write_service_info_filename != nullptr) {
     result = DartUtils::SetStringField(library, "_serviceInfoFilename",
                                        write_service_info_filename);
diff --git a/runtime/bin/vmservice_impl.h b/runtime/bin/vmservice_impl.h
index 17ec55a..4b5838b 100644
--- a/runtime/bin/vmservice_impl.h
+++ b/runtime/bin/vmservice_impl.h
@@ -20,7 +20,8 @@
                     bool auth_codes_disabled,
                     const char* write_service_info_filename,
                     bool trace_loading,
-                    bool deterministic);
+                    bool deterministic,
+                    bool enable_service_port_fallback);
 
   static void SetNativeResolver();
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 6b5ccdf..c736f39 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -3211,6 +3211,27 @@
 DART_EXPORT bool Dart_IsKernelIsolate(Dart_Isolate isolate);
 DART_EXPORT bool Dart_KernelIsolateIsRunning();
 DART_EXPORT Dart_Port Dart_KernelPort();
+
+/**
+ * Compiles the given `script_uri` to a kernel file.
+ *
+ * \param platform_kernel A buffer containing the kernel of the platform (e.g.
+ * `vm_platform_strong.dill`). The VM does not take ownership of this memory.
+ *
+ * \param platform_kernel_size The length of the platform_kernel buffer.
+ *
+ * \return Returns the result of the compilation.
+ *
+ * On a successful compilation the returned [Dart_KernelCompilationResult] has
+ * a status of [Dart_KernelCompilationStatus_Ok] and the `kernel`/`kernel_size`
+ * fields are set. The caller takes ownership of the malloc()ed buffer.
+ *
+ * On a failed compilation the `error` might be set describing the reason for
+ * the failed compilation. The caller takes ownership of the malloc()ed
+ * error.
+ *
+ * Requires there to be a current isolate.
+ */
 DART_EXPORT Dart_KernelCompilationResult
 Dart_CompileToKernel(const char* script_uri,
                      const uint8_t* platform_kernel,
diff --git a/runtime/observatory/bin/heap_snapshot.dart b/runtime/observatory/bin/heap_snapshot.dart
index 6b7c0a7..ca0761a 100644
--- a/runtime/observatory/bin/heap_snapshot.dart
+++ b/runtime/observatory/bin/heap_snapshot.dart
@@ -2,8 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// A way to test heap snapshot loading and analysis outside of Observatory.
-// Output is too noisy to be useful.
+// A way to test heap snapshot loading and analysis outside of Observatory, and
+// to handle snapshots that require more memory to analyze than is available in
+// a web browser.
 
 import 'dart:async';
 import 'dart:convert';
@@ -73,35 +74,355 @@
   return reader.done;
 }
 
-String size(SnapshotMergedDominator object) {
-  int s = object.retainedSize;
-  if (s < 1024) return '${s}B';
-  s = s ~/ 1024;
-  if (s < 1024) return '${s}kB';
-  s = s ~/ 1024;
-  if (s < 1024) return '${s}MB';
-  s = s ~/ 1024;
-  if (s < 1024) return '${s}GB';
-  s = s ~/ 1024;
-  return '${s}TB';
+String makeJson(root) {
+  // 'root' can be arbitrarily deep, so we need to use an explicit stack
+  // instead of the call stack. We also must avoid using a JSON expression to
+  // avoid stack overflow in the JS engine parser.
+  final ids = new Map<dynamic, int>();
+  final sb = new StringBuffer();
+  final worklist = new List<dynamic>();
+  worklist.add(root);
+
+  var id = 0;
+  while (id < worklist.length) {
+    var object = worklist[id];
+    ids[object] = id++;
+    worklist.addAll(object.children);
+  }
+
+  while (!worklist.isEmpty) {
+    var object = worklist.removeLast();
+    var id = ids[object];
+
+    sb.write('var node');
+    sb.write(id.toString());
+    sb.write(' = {"name":"');
+    sb.write(object.description);
+    sb.write('","type":"');
+    sb.write(object.klass.name);
+    sb.write('","size":');
+    sb.write(object.retainedSize.toString());
+    sb.write(',"children":[');
+
+    bool first = true;
+    for (var child in object.children) {
+      if (!first) {
+        sb.write(',');
+      }
+      first = false;
+      sb.write('node');
+      sb.write(ids[child].toString());
+    }
+
+    sb.write(']};\n');
+  }
+
+  return sb.toString();
 }
 
-void display(SnapshotMergedDominator object, int depth) {
-  if (object.retainedSize < 4096) return;
+var css = '''
+.treemapTile {
+    position: absolute;
+    box-sizing: border-box;
+    border: solid 1px;
+    font-size: 10;
+    text-align: center;
+    overflow: hidden;
+    white-space: nowrap;
+    cursor: default;
+}
+''';
 
-  var line = (' ' * (4 * depth)) + '[${size(object)}] ${object.description}';
-  print(line);
+var js = '''
+function hash(string) {
+  // Jenkin's one_at_a_time.
+  let h = string.length;
+  for (let i = 0; i < string.length; i++) {
+    h += string.charCodeAt(i);
+    h += h << 10;
+    h ^= h >> 6;
+  }
+  h += h << 3;
+  h ^= h >> 11;
+  h += h << 15;
+  return h;
+}
 
-  if (depth > 4) return;
+function color(string) {
+  let hue = hash(string) % 360;
+  return "hsl(" + hue + ",60%,60%)";
+}
 
-  var children = new List.from(object.children);
-  children.sort((a, b) => b.retainedSize - a.retainedSize);
-  for (var c in children) {
-    display(c, depth + 1);
+function prettySize(size) {
+  if (size < 1024) return size + "B";
+  size /= 1024;
+  if (size < 1024) return size.toFixed(1) + "KiB";
+  size /= 1024;
+  if (size < 1024) return size.toFixed(1) + "MiB";
+  size /= 1024;
+  return size.toFixed(1) + "GiB";
+}
+
+function prettyPercent(fraction) {
+  return (fraction * 100).toFixed(1);
+}
+
+function createTreemapTile(v, width, height, depth) {
+  let div = document.createElement("div");
+  div.className = "treemapTile";
+  div.style["background-color"] = color(v.type);
+  div.ondblclick = function(event) {
+    event.stopPropagation();
+    if (depth == 0) {
+      let dom = v.parent;
+      if (dom == undefined) {
+        // Already at root.
+      } else {
+        showDominatorTree(dom);  // Zoom out.
+      }
+    } else {
+      showDominatorTree(v);  // Zoom in.
+    }
+  };
+
+  let left = 0;
+  let top = 0;
+
+  const kPadding = 5;
+  const kBorder = 1;
+  left += kPadding - kBorder;
+  top += kPadding - kBorder;
+  width -= 2 * kPadding;
+  height -= 2 * kPadding;
+
+  let label = v.name + " [" + prettySize(v.size) + "]";
+  div.title = label;
+
+  if (width < 10 || height < 10) {
+    // Too small: don't render label or children.
+    return div;
+  }
+
+  div.appendChild(document.createTextNode(label));
+  const kLabelHeight = 9;
+  top += kLabelHeight;
+  height -= kLabelHeight;
+
+  if (depth > 2) {
+    // Too deep: don't render children.
+    return div;
+  }
+  if (width < 4 || height < 4) {
+    // Too small: don't render children.
+    return div;
+  }
+
+  let children = new Array();
+  v.children.forEach(function(c) {
+    // Size 0 children seem to confuse the layout algorithm (accumulating
+    // rounding errors?).
+    if (c.size > 0) {
+      children.push(c);
+    }
+  });
+  children.sort(function (a, b) {
+    return b.size - a.size;
+  });
+
+  const scale = width * height / v.size;
+
+  // Bruls M., Huizing K., van Wijk J.J. (2000) Squarified Treemaps. In: de
+  // Leeuw W.C., van Liere R. (eds) Data Visualization 2000. Eurographics.
+  // Springer, Vienna.
+  for (let rowStart = 0;  // Index of first child in the next row.
+       rowStart < children.length;) {
+    // Prefer wider rectangles, the better to fit text labels.
+    const GOLDEN_RATIO = 1.61803398875;
+    let verticalSplit = (width / height) > GOLDEN_RATIO;
+
+    let space;
+    if (verticalSplit) {
+      space = height;
+    } else {
+      space = width;
+    }
+
+    let rowMin = children[rowStart].size * scale;
+    let rowMax = rowMin;
+    let rowSum = 0;
+    let lastRatio = 0;
+
+    let rowEnd;  // One after index of last child in the next row.
+    for (rowEnd = rowStart; rowEnd < children.length; rowEnd++) {
+      let size = children[rowEnd].size * scale;
+      if (size < rowMin) rowMin = size;
+      if (size > rowMax) rowMax = size;
+      rowSum += size;
+
+      let ratio = Math.max((space * space * rowMax) / (rowSum * rowSum),
+                           (rowSum * rowSum) / (space * space * rowMin));
+      if ((lastRatio != 0) && (ratio > lastRatio)) {
+        // Adding the next child makes the aspect ratios worse: remove it and
+        // add the row.
+        rowSum -= size;
+        break;
+      }
+      lastRatio = ratio;
+    }
+
+    let rowLeft = left;
+    let rowTop = top;
+    let rowSpace = rowSum / space;
+
+    for (let i = rowStart; i < rowEnd; i++) {
+      let child = children[i];
+      let size = child.size * scale;
+
+      let childWidth;
+      let childHeight;
+      if (verticalSplit) {
+        childWidth = rowSpace;
+        childHeight = size / childWidth;
+      } else {
+        childHeight = rowSpace;
+        childWidth = size / childHeight;
+      }
+
+      let childDiv = createTreemapTile(child, childWidth, childHeight, depth + 1);
+      childDiv.style.left = rowLeft + "px";
+      childDiv.style.top = rowTop + "px";
+      // Oversize the final div by kBorder to make the borders overlap.
+      childDiv.style.width = (childWidth + kBorder) + "px";
+      childDiv.style.height = (childHeight + kBorder) + "px";
+      div.appendChild(childDiv);
+
+      if (verticalSplit)
+        rowTop += childHeight;
+      else
+        rowLeft += childWidth;
+    }
+
+    if (verticalSplit) {
+      left += rowSpace;
+      width -= rowSpace;
+    } else {
+      top += rowSpace;
+      height -= rowSpace;
+    }
+
+    rowStart = rowEnd;
+  }
+
+  return div;
+}
+
+function setBody(div) {
+  let body = document.body;
+  while (body.firstChild) {
+    body.removeChild(body.firstChild);
+  }
+  body.appendChild(div);
+}
+
+function showDominatorTree(v) {
+  let header = document.createElement("div");
+  header.textContent = "Dominator Tree";
+  header.title =
+    "Double click a box to zoom in.\\n" +
+    "Double click the outermost box to zoom out.";
+  header.className = "headerRow";
+  header.style["flex-grow"] = 0;
+  header.style["padding"] = "5px";
+  header.style["border-bottom"] = "solid 1px";
+
+  let content = document.createElement("div");
+  content.style["flex-basis"] = 0;
+  content.style["flex-grow"] = 1;
+
+  let column = document.createElement("div");
+  column.style["width"] = "100%";
+  column.style["height"] = "100%";
+  column.style["border"] = "solid 2px";
+  column.style["display"] = "flex";
+  column.style["flex-direction"] = "column";
+  column.appendChild(header);
+  column.appendChild(content);
+
+  setBody(column);
+
+  // Add the content div to the document first so the browser will calculate
+  // the available width and height.
+  let w = content.offsetWidth;
+  let h = content.offsetHeight;
+
+  let topTile = createTreemapTile(v, w, h, 0);
+  topTile.style.width = w;
+  topTile.style.height = h;
+  topTile.style.border = "none";
+  content.appendChild(topTile);
+}
+
+function linkParents(root) {
+  // 'root' can be arbitrarily deep, so we need to use an explicit stack
+  // instead of the call stack.
+  let worklist = new Array();
+  worklist.push(root);
+
+  while (worklist.length > 0) {
+    let node = worklist.pop();
+    node.children.forEach(function (child) {
+      child["parent"] = node;
+      worklist.push(child);
+    });
   }
 }
 
+var root = null;
+(function() {
+  __JSON__
+  root = node0;
+})();
+
+linkParents(root);
+showDominatorTree(root);
+''';
+
+var html = '''
+<html>
+  <head>
+    <title>Dart Heap Snapshot</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <style>$css</style>
+  </head>
+  <body>
+    <script>$js</script>
+  </body>
+</html>
+''';
+
 main(List<String> args) async {
-  final snapshot = await load(args[0]);
-  display(snapshot.mergedRoot, 0);
+  if (args.length < 1) {
+    print('Usage: heap_snapshot.dart <vm-service-uri>');
+    exitCode = 1;
+    return;
+  }
+
+  var uri = Uri.parse(args[0]);
+  if (uri.scheme == 'http') {
+    uri = uri.replace(scheme: 'ws');
+  } else if (uri.scheme == 'https') {
+    uri = uri.replace(scheme: 'wss');
+  }
+  if (!uri.path.endsWith('/ws')) {
+    uri = uri.resolve('ws');
+  }
+
+  final snapshot = await load(uri.toString());
+
+  final dir = await Directory.systemTemp.createTemp('heap-snapshot');
+  final path = dir.path + '/merged-dominator.html';
+  final file = await File(path).create();
+  final tree = makeJson(snapshot.mergedRoot);
+  await file.writeAsString(html.replaceAll('__JSON__', tree));
+  print('Wrote file://' + path);
 }
diff --git a/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart b/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart
new file mode 100644
index 0000000..9edaf23
--- /dev/null
+++ b/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart
@@ -0,0 +1,151 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+import 'dart:typed_data';
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+double getDoubleWithHeapObjectTag() {
+  final bd = ByteData(8);
+  bd.setUint64(0, 0x8000000000000001, Endian.host);
+  final double v = bd.getFloat64(0, Endian.host);
+  return v;
+}
+
+// small example from [Lenguaer & Tarjan 1979]
+class R {
+  final double fld = getDoubleWithHeapObjectTag();
+  var x;
+  var y;
+  var z;
+}
+
+class A {
+  var x;
+}
+
+class B {
+  var x;
+  var y;
+  var z;
+}
+
+class C {
+  var x;
+  var y;
+}
+
+class D {
+  var x;
+}
+
+class E {
+  var x;
+}
+
+class F {
+  var x;
+}
+
+class G {
+  var x;
+  var y;
+}
+
+class H {
+  var x;
+  var y;
+}
+
+class I {
+  var x;
+}
+
+class J {
+  var x;
+}
+
+class K {
+  var x;
+  var y;
+}
+
+class L {
+  var x;
+}
+
+var r;
+
+buildGraph() {
+  r = new R();
+  var a = new A();
+  var b = new B();
+  var c = new C();
+  var d = new D();
+  var e = new E();
+  var f = new F();
+  var g = new G();
+  var h = new H();
+  var i = new I();
+  var j = new J();
+  var k = new K();
+  var l = new L();
+
+  r.x = a;
+  r.y = b;
+  r.z = c;
+  a.x = d;
+  b.x = a;
+  b.y = d;
+  b.z = e;
+  c.x = f;
+  c.y = g;
+  d.x = l;
+  e.x = h;
+  f.x = i;
+  g.x = i;
+  g.y = j;
+  h.x = e;
+  h.y = k;
+  i.x = k;
+  j.x = i;
+  k.x = i;
+  k.y = r;
+  l.x = h;
+
+  expect(r.fld, getDoubleWithHeapObjectTag());
+}
+
+var tests = <IsolateTest>[
+  (Isolate isolate) async {
+    final graph = await isolate.fetchHeapSnapshot().done;
+
+    node(String className) {
+      return graph.objects.singleWhere((v) => v.klass.name == className);
+    }
+
+    expect(node('I').parent, equals(node('R')));
+    expect(node('K').parent, equals(node('R')));
+    expect(node('C').parent, equals(node('R')));
+    expect(node('H').parent, equals(node('R')));
+    expect(node('E').parent, equals(node('R')));
+    expect(node('A').parent, equals(node('R')));
+    expect(node('D').parent, equals(node('R')));
+    expect(node('B').parent, equals(node('R')));
+
+    expect(node('F').parent, equals(node('C')));
+    expect(node('G').parent, equals(node('C')));
+    expect(node('J').parent, equals(node('G')));
+    expect(node('L').parent, equals(node('D')));
+
+    expect(node('R'), isNotNull); // The field.
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: buildGraph);
diff --git a/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart b/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart
new file mode 100644
index 0000000..c2159eb
--- /dev/null
+++ b/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+// Tests that the --enable-service-port-fallback flag works correctly by trying to bind to
+// a port that is available.
+var tests = <VMTest>[
+  (VM vm) async {
+    // Correctly bound to provided port.
+    expect(Uri.parse(serviceHttpAddress).port == selectedPort, true);
+  }
+];
+
+int selectedPort = 0;
+
+main(args) async {
+  selectedPort = await _getUnusedPort();
+  await runVMTests(args, tests,
+      enable_service_port_fallback: true,
+      // Choose a port number that should always be open.
+      port: selectedPort,
+      extraArgs: []);
+}
+
+Future<int> _getUnusedPort() async {
+  var socket = await ServerSocket.bind(InternetAddress.anyIPv4, 0);
+  var port = socket.port;
+  await socket.close();
+  return port;
+}
diff --git a/runtime/observatory/tests/service/enable_service_port_fallback_test.dart b/runtime/observatory/tests/service/enable_service_port_fallback_test.dart
new file mode 100644
index 0000000..e5fdef0
--- /dev/null
+++ b/runtime/observatory/tests/service/enable_service_port_fallback_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+// Tests that the --enable-service-port-fallback flag works correctly by trying to bind to
+// a port that is unsupported.
+var tests = <VMTest>[
+  (VM vm) async {
+    // Did not bind to provided port.
+    expect(Uri.parse(serviceHttpAddress).port != portNumber, true);
+    await socket.close();
+  }
+];
+
+ServerSocket socket;
+int portNumber = -1;
+
+main(args) async {
+  socket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
+  portNumber = socket.port;
+  return runVMTests(args, tests,
+      enable_service_port_fallback: true, port: portNumber, extraArgs: []);
+}
diff --git a/runtime/observatory/tests/service/get_object_rpc_test.dart b/runtime/observatory/tests/service/get_object_rpc_test.dart
index a19a869..7ebabac 100644
--- a/runtime/observatory/tests/service/get_object_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_object_rpc_test.dart
@@ -762,7 +762,7 @@
     expect(result['name'], equals('_DummyClass'));
     expect(result['_vmName'], startsWith('_DummyClass@'));
     expect(result['abstract'], equals(false));
-    expect(result['const'], equals(false));
+    expect(result['const'], equals(true));
     expect(result['_finalized'], equals(true));
     expect(result['_implemented'], equals(false));
     expect(result['_patch'], equals(false));
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index f7857bc..4aa30d7 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -14,6 +14,11 @@
 [ $arch == arm ]
 process_service_test: Pass, Fail # Issue 24344
 
+# Test uses service API and relies on correct class names
+[ $builder_tag == obfuscated ]
+dominator_tree_vm_test: SkipByDesign
+dominator_tree_vm_with_double_field_test: SkipByDesign
+
 # Tests with known analyzer issues
 [ $compiler == dart2analyzer ]
 developer_extension_test: SkipByDesign
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index 745cba3..9060c00 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -105,8 +105,10 @@
       bool pause_on_start,
       bool pause_on_exit,
       bool pause_on_unhandled_exceptions,
+      bool enable_service_port_fallback,
       bool testeeControlsServer,
       Uri serviceInfoUri,
+      int port,
       List<String> extraArgs) {
     assert(pause_on_start != null);
     assert(pause_on_exit != null);
@@ -121,8 +123,10 @@
           pause_on_start,
           pause_on_exit,
           pause_on_unhandled_exceptions,
+          enable_service_port_fallback,
           testeeControlsServer,
           serviceInfoUri,
+          port,
           extraArgs);
     }
   }
@@ -131,8 +135,10 @@
       bool pause_on_start,
       bool pause_on_exit,
       bool pause_on_unhandled_exceptions,
+      bool enable_service_port_fallback,
       bool testeeControlsServer,
       Uri serviceInfoUri,
+      int port,
       List<String> extraArgs) {
     assert(!_shouldLaunchSkyShell());
 
@@ -145,6 +151,9 @@
     if (pause_on_exit) {
       fullArgs.add('--pause-isolates-on-exit');
     }
+    if (enable_service_port_fallback) {
+      fullArgs.add('--enable_service_port_fallback');
+    }
     fullArgs.add('--write-service-info=$serviceInfoUri');
 
     if (pause_on_unhandled_exceptions) {
@@ -157,7 +166,7 @@
 
     fullArgs.addAll(Platform.executableArguments);
     if (!testeeControlsServer) {
-      fullArgs.add('--enable-vm-service:0');
+      fullArgs.add('--enable-vm-service:$port');
     }
     fullArgs.addAll(args);
 
@@ -221,15 +230,24 @@
       bool pause_on_start,
       bool pause_on_exit,
       bool pause_on_unhandled_exceptions,
+      bool enable_service_port_fallback,
       bool testeeControlsServer,
+      int port,
       List<String> extraArgs) async {
     final completer = new Completer<Uri>();
     final serviceInfoDir =
         await Directory.systemTemp.createTemp('dart_service');
     final serviceInfoUri = serviceInfoDir.uri.resolve('service_info.json');
     final serviceInfoFile = await File.fromUri(serviceInfoUri).create();
-    _spawnProcess(pause_on_start, pause_on_exit, pause_on_unhandled_exceptions,
-            testeeControlsServer, serviceInfoUri, extraArgs)
+    _spawnProcess(
+            pause_on_start,
+            pause_on_exit,
+            pause_on_unhandled_exceptions,
+            enable_service_port_fallback,
+            testeeControlsServer,
+            serviceInfoUri,
+            port,
+            extraArgs)
         .then((p) async {
       process = p;
       Uri uri;
@@ -291,22 +309,31 @@
 }
 
 class _ServiceTesterRunner {
-  void run(
-      {List<String> mainArgs,
-      List<String> extraArgs,
-      List<VMTest> vmTests,
-      List<IsolateTest> isolateTests,
-      bool pause_on_start: false,
-      bool pause_on_exit: false,
-      bool verbose_vm: false,
-      bool pause_on_unhandled_exceptions: false,
-      bool testeeControlsServer: false}) {
+  void run({
+    List<String> mainArgs,
+    List<String> extraArgs,
+    List<VMTest> vmTests,
+    List<IsolateTest> isolateTests,
+    bool pause_on_start: false,
+    bool pause_on_exit: false,
+    bool verbose_vm: false,
+    bool pause_on_unhandled_exceptions: false,
+    bool enable_service_port_fallback: false,
+    bool testeeControlsServer: false,
+    int port = 0,
+  }) {
     var process = new _ServiceTesteeLauncher();
     bool testsDone = false;
     runZoned(() {
       process
-          .launch(pause_on_start, pause_on_exit, pause_on_unhandled_exceptions,
-              testeeControlsServer, extraArgs)
+          .launch(
+              pause_on_start,
+              pause_on_exit,
+              pause_on_unhandled_exceptions,
+              enable_service_port_fallback,
+              testeeControlsServer,
+              port,
+              extraArgs)
           .then((Uri serverAddress) async {
         if (mainArgs.contains("--gdb")) {
           var pid = process.process.pid;
@@ -486,6 +513,8 @@
     bool pause_on_exit: false,
     bool verbose_vm: false,
     bool pause_on_unhandled_exceptions: false,
+    bool enable_service_port_fallback: false,
+    int port = 0,
     List<String> extraArgs}) async {
   if (_isTestee()) {
     new _ServiceTesteeRunner().run(
@@ -495,12 +524,15 @@
         pause_on_exit: pause_on_exit);
   } else {
     new _ServiceTesterRunner().run(
-        mainArgs: mainArgs,
-        extraArgs: extraArgs,
-        vmTests: tests,
-        pause_on_start: pause_on_start,
-        pause_on_exit: pause_on_exit,
-        verbose_vm: verbose_vm,
-        pause_on_unhandled_exceptions: pause_on_unhandled_exceptions);
+      mainArgs: mainArgs,
+      extraArgs: extraArgs,
+      vmTests: tests,
+      pause_on_start: pause_on_start,
+      pause_on_exit: pause_on_exit,
+      verbose_vm: verbose_vm,
+      pause_on_unhandled_exceptions: pause_on_unhandled_exceptions,
+      enable_service_port_fallback: enable_service_port_fallback,
+      port: port,
+    );
   }
 }
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 3e16778..26c981d 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -417,6 +417,10 @@
 #define DUAL_MAPPING_SUPPORTED 1
 #endif
 
+#if defined(DART_PRECOMPILED_RUNTIME) || defined(DART_PRECOMPILER)
+#define SUPPORT_UNBOXED_INSTANCE_FIELDS
+#endif
+
 // Short form printf format specifiers
 #define Pd PRIdPTR
 #define Pu PRIuPTR
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index ee24ad6..38d4d2f 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.h
@@ -21,7 +21,7 @@
   }
 
   template <typename T>
-  static inline T Maximum(T x, T y) {
+  static constexpr inline T Maximum(T x, T y) {
     return x > y ? x : y;
   }
 
@@ -352,12 +352,18 @@
     return bit_cast<word>(mask);
   }
 
-  static uword Bit(uint32_t n) {
-    ASSERT(n < kBitsPerWord);
-    uword bit = 1;
+  template <typename T = uword>
+  static T Bit(uint32_t n) {
+    ASSERT(n < sizeof(T) * kBitsPerByte);
+    T bit = 1;
     return bit << n;
   }
 
+  template <typename T>
+  DART_FORCE_INLINE static bool TestBit(T mask, intptr_t position) {
+    return ((mask >> position) & 1) != 0;
+  }
+
   // Decode integer in SLEB128 format from |data| and update |byte_index|.
   template <typename ValueType>
   static ValueType DecodeSLEB128(const uint8_t* data,
diff --git a/runtime/tests/vm/dart/causal_stacks/async_throws_stack_no_causal_test.dart b/runtime/tests/vm/dart/causal_stacks/async_throws_stack_no_causal_test.dart
index cb27690..7cc8cf0 100644
--- a/runtime/tests/vm/dart/causal_stacks/async_throws_stack_no_causal_test.dart
+++ b/runtime/tests/vm/dart/causal_stacks/async_throws_stack_no_causal_test.dart
@@ -8,4 +8,4 @@
 
 import 'utils.dart';
 
-Future<void> main(List<String> args) async => await doTestsNoCausal();
+Future<void> main(List<String> args) async => await doTestsNoCausalNoLazy();
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index 3fa25e4..8cca3e5 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -133,6 +133,22 @@
   await ss.asFuture();
 }
 
+// ----
+// Scenario: All async functions yielded and we run in a custom zone with a
+// custom error handler.
+// ----
+
+Future<void> customErrorZone() async {
+  final completer = Completer<void>();
+  runZoned(() async {
+    await allYield();
+    completer.complete(null);
+  }, onError: (e, s) {
+    completer.completeError(e, s);
+  });
+  return completer.future;
+}
+
 // Helpers:
 
 void assertStack(List<String> expects, StackTrace stackTrace) {
@@ -149,8 +165,8 @@
       // On failed expect, print full stack for reference.
       print('Actual stack:');
       print(stackTrace.toString());
-      print('Expected line ${i + 1} to match:');
-      print(expects[i]);
+      print('Expected line ${i + 1} to be `${expects[i]}` '
+          'but was `${frames[i]}`');
       rethrow;
     }
   }
@@ -522,10 +538,61 @@
             r'^#7      _RawReceivePortImpl._handleMessage \(.+\)$',
             r'^$',
           ]);
+  final customErrorZoneExpected = const <String>[
+    r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#2      allYield2 \(.*/utils.dart:34(:9)?\)$',
+    r'<asynchronous suspension>$',
+    r'#3      allYield \(.*/utils.dart:29(:9)?\)$',
+    r'<asynchronous suspension>$',
+    r'#4      customErrorZone.<anonymous closure> \(.*/utils.dart:144(:11)?\)$',
+    r'#5      _rootRun ',
+    r'#6      _CustomZone.run ',
+    r'#7      _runZoned ',
+    r'#8      runZoned ',
+    r'#9      customErrorZone \(.*/utils.dart:143(:3)?\)$',
+  ];
+  await doTestAwait(
+      customErrorZone,
+      customErrorZoneExpected +
+          const <String>[
+            r'#10     doTestAwait ',
+            r'#11     doTestsCausal ',
+            r'<asynchronous suspension>$',
+            r'#12     main \(.+\)$',
+            r'#13     _startIsolate.<anonymous closure> ',
+            r'#14     _RawReceivePortImpl._handleMessage ',
+            r'$',
+          ]);
+  await doTestAwaitThen(
+      customErrorZone,
+      customErrorZoneExpected +
+          const <String>[
+            r'#10     doTestAwaitThen ',
+            r'#11     doTestsCausal ',
+            r'<asynchronous suspension>$',
+            r'#12     main \(.+\)$',
+            r'#13     _startIsolate.<anonymous closure> ',
+            r'#14     _RawReceivePortImpl._handleMessage ',
+            r'$'
+          ]);
+  await doTestAwaitCatchError(
+      customErrorZone,
+      customErrorZoneExpected +
+          const <String>[
+            r'#10     doTestAwaitCatchError ',
+            r'#11     doTestsCausal ',
+            r'<asynchronous suspension>$',
+            r'#12     main \(.+\)$',
+            r'#13     _startIsolate.<anonymous closure> ',
+            r'#14     _RawReceivePortImpl._handleMessage ',
+            r'$'
+          ]);
 }
 
-// For: --no-causal-async-stacks
-Future<void> doTestsNoCausal() async {
+// For: --no-causal-async-stacks --no-lazy-async-stacks
+Future<void> doTestsNoCausalNoLazy() async {
   final allYieldExpected = const <String>[
     r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
     r'^#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
@@ -564,7 +631,7 @@
             r'^#10     doTestAwait ',
             r'^#11     _AsyncAwaitCompleter.start ',
             r'^#12     doTestAwait ',
-            r'^#13     doTestsNoCausal ',
+            r'^#13     doTestsNoCausalNoLazy ',
             r'^#14     _RootZone.runUnary ',
             r'^#15     _FutureListener.handleValue ',
             r'^#16     Future._propagateToListeners.handleValueCallback ',
@@ -615,7 +682,7 @@
             r'^#10     doTestAwaitThen ',
             r'^#11     _AsyncAwaitCompleter.start ',
             r'^#12     doTestAwaitThen ',
-            r'^#13     doTestsNoCausal ',
+            r'^#13     doTestsNoCausalNoLazy ',
             r'^#14     _RootZone.runUnary ',
             r'^#15     _FutureListener.handleValue ',
             r'^#16     Future._propagateToListeners.handleValueCallback ',
@@ -661,7 +728,7 @@
             r'^#10     doTestAwaitCatchError ',
             r'^#11     _AsyncAwaitCompleter.start ',
             r'^#12     doTestAwaitCatchError ',
-            r'^#13     doTestsNoCausal ',
+            r'^#13     doTestsNoCausalNoLazy ',
             r'^#14     _RootZone.runUnary ',
             r'^#15     _FutureListener.handleValue ',
             r'^#16     Future._propagateToListeners.handleValueCallback ',
@@ -814,6 +881,29 @@
   await doTestAwaitThen(listenAsyncStarThrowAsync, listenAsyncStartExpected);
   await doTestAwaitCatchError(
       listenAsyncStarThrowAsync, listenAsyncStartExpected);
+
+  final customErrorZoneExpected = const <String>[
+    r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'#2      _rootRunUnary ',
+    r'#3      _CustomZone.runUnary ',
+    r'#4      _FutureListener.handleValue ',
+    r'#5      Future._propagateToListeners.handleValueCallback ',
+    r'#6      Future._propagateToListeners ',
+    r'#7      Future.(_addListener|_prependListeners).<anonymous closure> ',
+    r'#8      _rootRun ',
+    r'#9      _CustomZone.run ',
+    r'#10     _CustomZone.runGuarded ',
+    r'#11     _CustomZone.bindCallbackGuarded.<anonymous closure> ',
+    r'#12     _microtaskLoop ',
+    r'#13     _startMicrotaskLoop ',
+    r'#14     _runPendingImmediateCallback ',
+    r'#15     _RawReceivePortImpl._handleMessage ',
+    r'$',
+  ];
+  await doTestAwait(customErrorZone, customErrorZoneExpected);
+  await doTestAwaitThen(customErrorZone, customErrorZoneExpected);
+  await doTestAwaitCatchError(customErrorZone, customErrorZoneExpected);
 }
 
 // For: --lazy-async-stacks
@@ -1094,4 +1184,20 @@
   await doTestAwaitThen(listenAsyncStarThrowAsync, listenAsyncStartExpected);
   await doTestAwaitCatchError(
       listenAsyncStarThrowAsync, listenAsyncStartExpected);
+
+  final customErrorZoneExpected = const <String>[
+    r'#0      throwSync \(.*/utils.dart:16(:3)?\)$',
+    r'#1      allYield3 \(.*/utils.dart:39(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#2      allYield2 \(.*/utils.dart:34(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#3      allYield \(.*/utils.dart:29(:3)?\)$',
+    r'<asynchronous suspension>$',
+    r'#4      customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
+    r'<asynchronous suspension>$',
+    r'^$',
+  ];
+  await doTestAwait(customErrorZone, customErrorZoneExpected);
+  await doTestAwaitThen(customErrorZone, customErrorZoneExpected);
+  await doTestAwaitCatchError(customErrorZone, customErrorZoneExpected);
 }
diff --git a/runtime/tests/vm/dart/isolate_send_function_types_test.dart b/runtime/tests/vm/dart/isolate_send_function_types_test.dart
new file mode 100644
index 0000000..e8fb8ff
--- /dev/null
+++ b/runtime/tests/vm/dart/isolate_send_function_types_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+class A<T> {}
+
+main(args) async {
+  final x = A<void Function()>();
+
+  {
+    final caughtErrorCompleter = Completer<String>();
+    await runZoned(() {
+      Isolate.spawn(isolate, x);
+    }, onError: (e) {
+      caughtErrorCompleter.complete(e.toString());
+    });
+    Expect.equals(
+        await caughtErrorCompleter.future,
+        "Invalid argument(s): Illegal argument in isolate message : "
+        "(function types are not supported yet)");
+  }
+
+  void genericFunc<T>() async {
+    final y = A<void Function(T)>();
+    final caughtErrorCompleter = Completer<String>();
+    await runZoned(() {
+      Isolate.spawn(isolate, y);
+    }, onError: (e) {
+      caughtErrorCompleter.complete(e.toString());
+    });
+    Expect.equals(
+        await caughtErrorCompleter.future,
+        "Invalid argument(s): Illegal argument in isolate message : "
+        "(function types are not supported yet)");
+  }
+
+  await genericFunc<int>();
+}
+
+void isolate(A foo) async {
+  print('Tick: ${foo}');
+}
diff --git a/runtime/tests/vm/dart/unboxed_fields_type_args_test.dart b/runtime/tests/vm/dart/unboxed_fields_type_args_test.dart
new file mode 100644
index 0000000..d19c5e9
--- /dev/null
+++ b/runtime/tests/vm/dart/unboxed_fields_type_args_test.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:typed_data';
+import 'dart:async';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+
+double getDoubleWithHeapObjectTag() {
+  final bd = ByteData(8);
+  bd.setUint64(0, 0x8000000000000001, Endian.host);
+  final double v = bd.getFloat64(0, Endian.host);
+  return v;
+}
+
+class Foo {
+  final String clazz = "foo";
+  final double x = getDoubleWithHeapObjectTag();
+}
+
+// Here we ensure to have a GC pointer and a non-GC pointer field, and then a
+// type argument vector, so the offset in number of words for the type arguments
+// will be different between host and target when compiling from 64-bit to
+// 32-bit architectures.
+class Bar<T> extends Foo {
+  final String clazz = "bar";
+  final double y = getDoubleWithHeapObjectTag();
+  final T value;
+  Bar(T val) : value = val;
+}
+
+main() async {
+  final receivePort = new ReceivePort();
+  receivePort.sendPort.send(Foo());
+  receivePort.sendPort.send(Bar<String>("StringBar"));
+  receivePort.sendPort.send(Bar<double>(4.2));
+  final it = StreamIterator(receivePort);
+
+  Expect.isTrue(await it.moveNext());
+  final foo = it.current as Foo;
+
+  Expect.isTrue(await it.moveNext());
+  final string_bar = it.current as Bar<String>;
+
+  Expect.isTrue(await it.moveNext());
+  final double_bar = it.current as Bar<double>;
+
+  Expect.equals(string_bar.value, "StringBar");
+  Expect.equals(string_bar.clazz, "bar");
+  Expect.equals(string_bar.y, getDoubleWithHeapObjectTag());
+  Expect.equals(string_bar.x, getDoubleWithHeapObjectTag());
+  Expect.equals(double_bar.value, 4.2);
+  Expect.equals(foo.clazz, "foo");
+  Expect.equals(foo.x, getDoubleWithHeapObjectTag());
+
+  await it.cancel();
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 7f713cd..e2a4f25 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -77,7 +77,7 @@
 cc/GenKernelKernelMaxRSS: Skip # Issue 34393.
 cc/GenKernelKernelReadAllBytecode: Skip # Issue 34393.
 dart/appjit_bytecode_simple_test: Skip # Issue 34393.
-dart/disassemble_determinism_test: Slow # Times out on slower bots.
+dart/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
 
 [ $arch == ia32 && $mode == debug && $system == windows ]
 dart/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index d0bcee0..50239a1 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -70,14 +70,16 @@
   if (is_fuchsia) {
     if (using_fuchsia_sdk) {
       extra_deps += [
-        "$fuchsia_sdk_root/fidl:fuchsia.intl",
+        "$fuchsia_sdk_root/fidl:fuchsia.deprecatedtimezone",
         "$fuchsia_sdk_root/pkg:sys_cpp",
         "$fuchsia_sdk_root/pkg:trace-engine",
       ]
     } else {
       extra_deps += [
-        "//sdk/fidl/fuchsia.intl",
+        # TODO(US-399): Remove time_service specific code when it is no longer
+        # necessary.
         "//sdk/lib/sys/cpp",
+        "//sdk/fidl/fuchsia.deprecatedtimezone",
 
         "//zircon/public/lib/fbl",
         "//zircon/public/lib/trace-engine",
diff --git a/runtime/vm/bootstrap.cc b/runtime/vm/bootstrap.cc
index 584baa3..ff1c7b7 100644
--- a/runtime/vm/bootstrap.cc
+++ b/runtime/vm/bootstrap.cc
@@ -71,17 +71,17 @@
   // Verify that closure field offsets are identical in Dart and C++.
   ASSERT(fields.Length() == 6);
   field ^= fields.At(0);
-  ASSERT(field.Offset() == Closure::instantiator_type_arguments_offset());
+  ASSERT(field.HostOffset() == Closure::instantiator_type_arguments_offset());
   field ^= fields.At(1);
-  ASSERT(field.Offset() == Closure::function_type_arguments_offset());
+  ASSERT(field.HostOffset() == Closure::function_type_arguments_offset());
   field ^= fields.At(2);
-  ASSERT(field.Offset() == Closure::delayed_type_arguments_offset());
+  ASSERT(field.HostOffset() == Closure::delayed_type_arguments_offset());
   field ^= fields.At(3);
-  ASSERT(field.Offset() == Closure::function_offset());
+  ASSERT(field.HostOffset() == Closure::function_offset());
   field ^= fields.At(4);
-  ASSERT(field.Offset() == Closure::context_offset());
+  ASSERT(field.HostOffset() == Closure::context_offset());
   field ^= fields.At(5);
-  ASSERT(field.Offset() == Closure::hash_offset());
+  ASSERT(field.HostOffset() == Closure::hash_offset());
 #endif  // defined(DEBUG)
 
   // Eagerly compile Bool class, bool constants are used from within compiler.
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index a7b520f..5f72da1 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -240,33 +240,33 @@
 #if defined(DEBUG)
   // Basic checking.
   cls = object_store->object_class();
-  ASSERT(Instance::InstanceSize() == cls.instance_size());
+  ASSERT(Instance::InstanceSize() == cls.host_instance_size());
   cls = object_store->integer_implementation_class();
-  ASSERT(Integer::InstanceSize() == cls.instance_size());
+  ASSERT(Integer::InstanceSize() == cls.host_instance_size());
   cls = object_store->smi_class();
-  ASSERT(Smi::InstanceSize() == cls.instance_size());
+  ASSERT(Smi::InstanceSize() == cls.host_instance_size());
   cls = object_store->mint_class();
-  ASSERT(Mint::InstanceSize() == cls.instance_size());
+  ASSERT(Mint::InstanceSize() == cls.host_instance_size());
   cls = object_store->one_byte_string_class();
-  ASSERT(OneByteString::InstanceSize() == cls.instance_size());
+  ASSERT(OneByteString::InstanceSize() == cls.host_instance_size());
   cls = object_store->two_byte_string_class();
-  ASSERT(TwoByteString::InstanceSize() == cls.instance_size());
+  ASSERT(TwoByteString::InstanceSize() == cls.host_instance_size());
   cls = object_store->external_one_byte_string_class();
-  ASSERT(ExternalOneByteString::InstanceSize() == cls.instance_size());
+  ASSERT(ExternalOneByteString::InstanceSize() == cls.host_instance_size());
   cls = object_store->external_two_byte_string_class();
-  ASSERT(ExternalTwoByteString::InstanceSize() == cls.instance_size());
+  ASSERT(ExternalTwoByteString::InstanceSize() == cls.host_instance_size());
   cls = object_store->double_class();
-  ASSERT(Double::InstanceSize() == cls.instance_size());
+  ASSERT(Double::InstanceSize() == cls.host_instance_size());
   cls = object_store->bool_class();
-  ASSERT(Bool::InstanceSize() == cls.instance_size());
+  ASSERT(Bool::InstanceSize() == cls.host_instance_size());
   cls = object_store->array_class();
-  ASSERT(Array::InstanceSize() == cls.instance_size());
+  ASSERT(Array::InstanceSize() == cls.host_instance_size());
   cls = object_store->immutable_array_class();
-  ASSERT(ImmutableArray::InstanceSize() == cls.instance_size());
+  ASSERT(ImmutableArray::InstanceSize() == cls.host_instance_size());
   cls = object_store->weak_property_class();
-  ASSERT(WeakProperty::InstanceSize() == cls.instance_size());
+  ASSERT(WeakProperty::InstanceSize() == cls.host_instance_size());
   cls = object_store->linked_hash_map_class();
-  ASSERT(LinkedHashMap::InstanceSize() == cls.instance_size());
+  ASSERT(LinkedHashMap::InstanceSize() == cls.host_instance_size());
 #endif  // defined(DEBUG)
 
   // Remember the currently pending classes.
@@ -1358,7 +1358,7 @@
   fields_array ^= cls.fields();
   ASSERT(fields_array.Length() == ByteBuffer::NumberOfFields());
   field ^= fields_array.At(0);
-  ASSERT(field.Offset() == ByteBuffer::data_offset());
+  ASSERT(field.HostOffset() == ByteBuffer::data_offset());
   name ^= field.name();
   expected_name ^= String::New("_data");
   ASSERT(String::EqualsIgnoringPrivateKey(name, expected_name));
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index 5722c74..e645df3 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -4,6 +4,8 @@
 
 #include "vm/class_table.h"
 
+#include <memory>
+
 #include "platform/atomic.h"
 #include "vm/flags.h"
 #include "vm/growable_array.h"
@@ -21,7 +23,9 @@
     : top_(kNumPredefinedCids),
       capacity_(0),
       table_(NULL),
-      old_tables_(new MallocGrowableArray<intptr_t*>()) {
+      old_tables_(new MallocGrowableArray<intptr_t*>()),
+      unboxed_fields_map_(nullptr),
+      old_unboxed_fields_maps_(new MallocGrowableArray<UnboxedFieldBitmap*>()) {
   if (Dart::vm_isolate() == NULL) {
     ASSERT(kInitialCapacity >= kNumPredefinedCids);
     capacity_ = kInitialCapacity;
@@ -47,6 +51,11 @@
     table_[kVoidCid] = vm_shared_class_table->SizeAt(kVoidCid);
     table_[kNeverCid] = vm_shared_class_table->SizeAt(kNeverCid);
   }
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+  unboxed_fields_map_ = static_cast<UnboxedFieldBitmap*>(
+      malloc(capacity_ * sizeof(UnboxedFieldBitmap)));
+  memset(unboxed_fields_map_, 0, sizeof(UnboxedFieldBitmap) * capacity_);
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 #ifndef PRODUCT
   trace_allocation_table_ =
       static_cast<uint8_t*>(malloc(capacity_ * sizeof(uint8_t)));  // NOLINT
@@ -61,6 +70,16 @@
     delete old_tables_;
     free(table_);
   }
+
+  if (old_unboxed_fields_maps_ != nullptr) {
+    FreeOldUnboxedFieldsMaps();
+    delete old_unboxed_fields_maps_;
+  }
+
+  if (unboxed_fields_map_ != nullptr) {
+    free(unboxed_fields_map_);
+  }
+
   NOT_IN_PRODUCT(free(trace_allocation_table_));
 }
 
@@ -133,6 +152,12 @@
   }
 }
 
+void SharedClassTable::FreeOldUnboxedFieldsMaps() {
+  while (old_unboxed_fields_maps_->length() > 0) {
+    free(old_unboxed_fields_maps_->RemoveLast());
+  }
+}
+
 void ClassTable::Register(const Class& cls) {
   ASSERT(Thread::Current()->IsMutatorThread());
 
@@ -142,7 +167,7 @@
   // parallel to [ClassTable].
 
   const intptr_t instance_size =
-      cls.is_abstract() ? 0 : Class::instance_size(cls.raw());
+      cls.is_abstract() ? 0 : Class::host_instance_size(cls.raw());
 
   const intptr_t expected_cid =
       shared_class_table_->Register(index, instance_size);
@@ -239,6 +264,7 @@
 
   intptr_t* new_table = static_cast<intptr_t*>(
       malloc(new_capacity * sizeof(intptr_t)));  // NOLINT
+
   memmove(new_table, table_, top_ * sizeof(intptr_t));
   memset(new_table + top_, 0, (new_capacity - top_) * sizeof(intptr_t));
 #ifndef PRODUCT
@@ -250,10 +276,22 @@
     new_table[i] = 0;
     NOT_IN_PRODUCT(new_stats_table[i] = 0);
   }
+
   capacity_ = new_capacity;
   old_tables_->Add(table_);
   table_ = new_table;  // TODO(koda): This should use atomics.
   NOT_IN_PRODUCT(trace_allocation_table_ = new_stats_table);
+
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+  auto new_unboxed_fields_map = static_cast<UnboxedFieldBitmap*>(
+      malloc(new_capacity * sizeof(UnboxedFieldBitmap)));
+  memmove(new_unboxed_fields_map, unboxed_fields_map_,
+          top_ * sizeof(UnboxedFieldBitmap));
+  memset(new_unboxed_fields_map + top_, 0,
+         (new_capacity - top_) * sizeof(UnboxedFieldBitmap));
+  old_unboxed_fields_maps_->Add(unboxed_fields_map_);
+  unboxed_fields_map_ = new_unboxed_fields_map;
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 }
 
 void ClassTable::Unregister(intptr_t index) {
@@ -263,6 +301,9 @@
 
 void SharedClassTable::Unregister(intptr_t index) {
   table_[index] = 0;
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+  unboxed_fields_map_[index].Reset();
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 }
 
 void ClassTable::Remap(intptr_t* old_to_new_cid) {
@@ -281,14 +322,24 @@
 void SharedClassTable::Remap(intptr_t* old_to_new_cid) {
   ASSERT(Thread::Current()->IsAtSafepoint());
   const intptr_t num_cids = NumCids();
-  intptr_t* cls_by_old_cid = new intptr_t[num_cids];
+  std::unique_ptr<intptr_t[]> cls_by_old_cid(new intptr_t[num_cids]);
   for (intptr_t i = 0; i < num_cids; i++) {
     cls_by_old_cid[i] = table_[i];
   }
   for (intptr_t i = 0; i < num_cids; i++) {
     table_[old_to_new_cid[i]] = cls_by_old_cid[i];
   }
-  delete[] cls_by_old_cid;
+
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+  std::unique_ptr<UnboxedFieldBitmap[]> unboxed_fields_by_old_cid(
+      new UnboxedFieldBitmap[num_cids]);
+  for (intptr_t i = 0; i < num_cids; i++) {
+    unboxed_fields_by_old_cid[i] = unboxed_fields_map_[i];
+  }
+  for (intptr_t i = 0; i < num_cids; i++) {
+    unboxed_fields_map_[old_to_new_cid[i]] = unboxed_fields_by_old_cid[i];
+  }
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 }
 
 void ClassTable::VisitObjectPointers(ObjectPointerVisitor* visitor) {
@@ -344,7 +395,8 @@
 void ClassTable::SetAt(intptr_t index, RawClass* raw_cls) {
   // This is called by snapshot reader and class finalizer.
   ASSERT(index < capacity_);
-  const intptr_t size = raw_cls == nullptr ? 0 : Class::instance_size(raw_cls);
+  const intptr_t size =
+      raw_cls == nullptr ? 0 : Class::host_instance_size(raw_cls);
   shared_class_table_->SetSizeAt(index, size);
   table_[index] = raw_cls;
 }
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index fb13d2e..62383d3 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.h
@@ -7,9 +7,11 @@
 
 #include "platform/assert.h"
 #include "platform/atomic.h"
+#include "platform/utils.h"
 
 #include "vm/bitfield.h"
 #include "vm/class_id.h"
+#include "vm/flags.h"
 #include "vm/globals.h"
 
 namespace dart {
@@ -28,6 +30,33 @@
 class ObjectPointerVisitor;
 class RawClass;
 
+// Wraps a 64-bit integer to represent the bitmap of unboxed fields
+// stored in the shared class table.
+class UnboxedFieldBitmap {
+ public:
+  UnboxedFieldBitmap() : bitmap_(0) {}
+  explicit UnboxedFieldBitmap(uint64_t bitmap) : bitmap_(bitmap) {}
+  UnboxedFieldBitmap(const UnboxedFieldBitmap&) = default;
+  UnboxedFieldBitmap& operator=(const UnboxedFieldBitmap&) = default;
+
+  DART_FORCE_INLINE bool Get(intptr_t position) const {
+    return Utils::TestBit(bitmap_, position);
+  }
+  DART_FORCE_INLINE void Set(intptr_t position) {
+    bitmap_ |= Utils::Bit<decltype(bitmap_)>(position);
+  }
+  DART_FORCE_INLINE uint64_t Value() const { return bitmap_; }
+  DART_FORCE_INLINE bool IsEmpty() const { return bitmap_ == 0; }
+  DART_FORCE_INLINE void Reset() { bitmap_ = 0; }
+
+  DART_FORCE_INLINE static constexpr intptr_t Length() {
+    return sizeof(decltype(bitmap_)) * kBitsPerByte;
+  }
+
+ private:
+  uint64_t bitmap_;
+};
+
 // Registry of all known classes and their sizes.
 //
 // The GC will only need the information in this shared class table to scan
@@ -62,6 +91,19 @@
   intptr_t NumCids() const { return top_; }
   intptr_t Capacity() const { return capacity_; }
 
+  UnboxedFieldBitmap GetUnboxedFieldsMapAt(intptr_t index) const {
+    ASSERT(IsValidIndex(index));
+    return FLAG_precompiled_mode ? unboxed_fields_map_[index]
+                                 : UnboxedFieldBitmap();
+  }
+
+  void SetUnboxedFieldsMapAt(intptr_t index,
+                             UnboxedFieldBitmap unboxed_fields_map) {
+    ASSERT(IsValidIndex(index));
+    ASSERT(unboxed_fields_map_[index].IsEmpty());
+    unboxed_fields_map_[index] = unboxed_fields_map;
+  }
+
   // Used to drop recently added classes.
   void SetNumCids(intptr_t num_cids) {
     ASSERT(num_cids <= top_);
@@ -117,6 +159,9 @@
   // Deallocates table copies. Do not call during concurrent access to table.
   void FreeOldTables();
 
+  // Deallocates bitmap copies. Do not call during concurrent access to table.
+  void FreeOldUnboxedFieldsMaps();
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
   bool IsReloading() const { return reload_context_ != nullptr; }
 
@@ -171,6 +216,14 @@
 
   IsolateGroupReloadContext* reload_context_ = nullptr;
 
+  // Stores a 64-bit bitmap for each class. There is one bit for each word in an
+  // instance of the class. A 0 bit indicates that the word contains a pointer
+  // the GC has to scan, a 1 indicates that the word is part of e.g. an unboxed
+  // double and does not need to be scanned. (see Class::Calculate...() where
+  // the bitmap is constructed)
+  UnboxedFieldBitmap* unboxed_fields_map_;
+  MallocGrowableArray<UnboxedFieldBitmap*>* old_unboxed_fields_maps_;
+
   DISALLOW_COPY_AND_ASSIGN(SharedClassTable);
 };
 
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 50410b4..9dddd4c 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -182,19 +182,57 @@
     if (s->kind() != Snapshot::kFullAOT) {
       s->Write<uint32_t>(cls->ptr()->binary_declaration_);
     }
-    s->Write<int32_t>(cls->ptr()->instance_size_in_words_);
-    s->Write<int32_t>(cls->ptr()->next_field_offset_in_words_);
-    s->Write<int32_t>(cls->ptr()->type_arguments_field_offset_in_words_);
+    s->Write<int32_t>(Class::target_instance_size_in_words(cls));
+    s->Write<int32_t>(Class::target_next_field_offset_in_words(cls));
+    s->Write<int32_t>(Class::target_type_arguments_field_offset_in_words(cls));
     s->Write<int16_t>(cls->ptr()->num_type_arguments_);
     s->Write<uint16_t>(cls->ptr()->num_native_fields_);
     s->WriteTokenPosition(cls->ptr()->token_pos_);
     s->WriteTokenPosition(cls->ptr()->end_token_pos_);
     s->Write<uint32_t>(cls->ptr()->state_bits_);
+
+    // In AOT, the bitmap of unboxed fields should also be serialized
+    if (FLAG_precompiled_mode) {
+      s->WriteUnsigned64(
+          CalculateTargetUnboxedFieldsBitmap(s, class_id).Value());
+    }
   }
 
  private:
   GrowableArray<RawClass*> predefined_;
   GrowableArray<RawClass*> objects_;
+
+  UnboxedFieldBitmap CalculateTargetUnboxedFieldsBitmap(Serializer* s,
+                                                        intptr_t class_id) {
+    const auto unboxed_fields_bitmap_host =
+        s->isolate()->shared_class_table()->GetUnboxedFieldsMapAt(class_id);
+
+    UnboxedFieldBitmap unboxed_fields_bitmap;
+    if (unboxed_fields_bitmap_host.IsEmpty() ||
+        kWordSize == compiler::target::kWordSize) {
+      unboxed_fields_bitmap = unboxed_fields_bitmap_host;
+    } else {
+      ASSERT(kWordSize == 8 && compiler::target::kWordSize == 4);
+      // A new bitmap is built if the word sizes in the target and
+      // host are different
+      unboxed_fields_bitmap.Reset();
+      intptr_t target_i = 0, host_i = 0;
+
+      while (host_i < UnboxedFieldBitmap::Length()) {
+        // Each unboxed field has constant length, therefore the number of
+        // words used by it should double when compiling from 64-bit to 32-bit.
+        if (unboxed_fields_bitmap_host.Get(host_i++)) {
+          unboxed_fields_bitmap.Set(target_i++);
+          unboxed_fields_bitmap.Set(target_i++);
+        } else {
+          // For object pointers, the field is always one word length
+          target_i++;
+        }
+      }
+    }
+
+    return unboxed_fields_bitmap;
+  }
 };
 #endif  // !DART_PRECOMPILED_RUNTIME
 
@@ -240,18 +278,35 @@
       }
 #endif
       if (!RawObject::IsInternalVMdefinedClassId(class_id)) {
-        cls->ptr()->instance_size_in_words_ = d->Read<int32_t>();
-        cls->ptr()->next_field_offset_in_words_ = d->Read<int32_t>();
+        cls->ptr()->host_instance_size_in_words_ = d->Read<int32_t>();
+        cls->ptr()->host_next_field_offset_in_words_ = d->Read<int32_t>();
+#if !defined(DART_PRECOMPILED_RUNTIME)
+        // Only one pair is serialized. The target field only exists when
+        // DART_PRECOMPILED_RUNTIME is not defined
+        cls->ptr()->target_instance_size_in_words_ =
+            cls->ptr()->host_instance_size_in_words_;
+        cls->ptr()->target_next_field_offset_in_words_ =
+            cls->ptr()->host_next_field_offset_in_words_;
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
       } else {
         d->Read<int32_t>();  // Skip.
         d->Read<int32_t>();  // Skip.
       }
-      cls->ptr()->type_arguments_field_offset_in_words_ = d->Read<int32_t>();
+      cls->ptr()->host_type_arguments_field_offset_in_words_ =
+          d->Read<int32_t>();
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      cls->ptr()->target_type_arguments_field_offset_in_words_ =
+          cls->ptr()->host_type_arguments_field_offset_in_words_;
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
       cls->ptr()->num_type_arguments_ = d->Read<int16_t>();
       cls->ptr()->num_native_fields_ = d->Read<uint16_t>();
       cls->ptr()->token_pos_ = d->ReadTokenPosition();
       cls->ptr()->end_token_pos_ = d->ReadTokenPosition();
       cls->ptr()->state_bits_ = d->Read<uint32_t>();
+
+      if (FLAG_precompiled_mode) {
+        d->ReadUnsigned64();  // Skip unboxed fields bitmap.
+      }
     }
 
     for (intptr_t id = start_index_; id < stop_index_; id++) {
@@ -268,9 +323,18 @@
         cls->ptr()->binary_declaration_ = d->Read<uint32_t>();
       }
 #endif
-      cls->ptr()->instance_size_in_words_ = d->Read<int32_t>();
-      cls->ptr()->next_field_offset_in_words_ = d->Read<int32_t>();
-      cls->ptr()->type_arguments_field_offset_in_words_ = d->Read<int32_t>();
+      cls->ptr()->host_instance_size_in_words_ = d->Read<int32_t>();
+      cls->ptr()->host_next_field_offset_in_words_ = d->Read<int32_t>();
+      cls->ptr()->host_type_arguments_field_offset_in_words_ =
+          d->Read<int32_t>();
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      cls->ptr()->target_instance_size_in_words_ =
+          cls->ptr()->host_instance_size_in_words_;
+      cls->ptr()->target_next_field_offset_in_words_ =
+          cls->ptr()->host_next_field_offset_in_words_;
+      cls->ptr()->target_type_arguments_field_offset_in_words_ =
+          cls->ptr()->host_type_arguments_field_offset_in_words_;
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
       cls->ptr()->num_type_arguments_ = d->Read<int16_t>();
       cls->ptr()->num_native_fields_ = d->Read<uint16_t>();
       cls->ptr()->token_pos_ = d->ReadTokenPosition();
@@ -279,6 +343,12 @@
 
       table->AllocateIndex(class_id);
       table->SetAt(class_id, cls);
+
+      if (FLAG_precompiled_mode) {
+        const UnboxedFieldBitmap unboxed_fields_map(d->ReadUnsigned64());
+        d->isolate()->shared_class_table()->SetUnboxedFieldsMapAt(
+            class_id, unboxed_fields_map);
+      }
     }
   }
 
@@ -935,13 +1005,13 @@
           kind == Snapshot::kFullAOT ||
           // Do not reset const fields.
           Field::ConstBit::decode(field->ptr()->kind_bits_)) {
-        s->Push(s->field_table()->At(field->ptr()->offset_or_field_id_));
+        s->Push(s->field_table()->At(field->ptr()->host_offset_or_field_id_));
       } else {
         // Otherwise, for static fields we write out the initial static value.
         s->Push(field->ptr()->saved_initial_value_);
       }
     } else {
-      s->Push(Smi::New(field->ptr()->offset_or_field_id_));
+      s->Push(Smi::New(Field::TargetOffsetOf(field)));
     }
   }
 
@@ -1001,14 +1071,14 @@
             Field::ConstBit::decode(field->ptr()->kind_bits_)) {
           WriteFieldValue(
               "static value",
-              s->field_table()->At(field->ptr()->offset_or_field_id_));
+              s->field_table()->At(field->ptr()->host_offset_or_field_id_));
         } else {
           // Otherwise, for static fields we write out the initial static value.
           WriteFieldValue("static value", field->ptr()->saved_initial_value_);
         }
-        s->WriteUnsigned(field->ptr()->offset_or_field_id_);
+        s->WriteUnsigned(field->ptr()->host_offset_or_field_id_);
       } else {
-        WriteFieldValue("offset", Smi::New(field->ptr()->offset_or_field_id_));
+        WriteFieldValue("offset", Smi::New(Field::TargetOffsetOf(field)));
       }
     }
   }
@@ -1057,10 +1127,13 @@
         intptr_t field_id = d->ReadUnsigned();
         d->field_table()->SetAt(
             field_id, reinterpret_cast<RawInstance*>(value_or_offset));
-        field->ptr()->offset_or_field_id_ = field_id;
+        field->ptr()->host_offset_or_field_id_ = field_id;
       } else {
-        field->ptr()->offset_or_field_id_ =
+        field->ptr()->host_offset_or_field_id_ =
             Smi::Value(Smi::RawCast(value_or_offset));
+#if !defined(DART_PRECOMPILED_RUNTIME)
+        field->ptr()->target_offset_ = field->ptr()->host_offset_or_field_id_;
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
       }
     }
   }
@@ -2722,23 +2795,34 @@
   explicit InstanceSerializationCluster(intptr_t cid)
       : SerializationCluster("Instance"), cid_(cid) {
     RawClass* cls = Isolate::Current()->class_table()->At(cid);
-    next_field_offset_in_words_ = cls->ptr()->next_field_offset_in_words_;
-    instance_size_in_words_ = cls->ptr()->instance_size_in_words_;
-    ASSERT(next_field_offset_in_words_ > 0);
-    ASSERT(instance_size_in_words_ > 0);
+    host_next_field_offset_in_words_ =
+        cls->ptr()->host_next_field_offset_in_words_;
+    ASSERT(host_next_field_offset_in_words_ > 0);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    target_next_field_offset_in_words_ =
+        cls->ptr()->target_next_field_offset_in_words_;
+    target_instance_size_in_words_ = cls->ptr()->target_instance_size_in_words_;
+    ASSERT(target_next_field_offset_in_words_ > 0);
+    ASSERT(target_instance_size_in_words_ > 0);
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
   }
   ~InstanceSerializationCluster() {}
 
   void Trace(Serializer* s, RawObject* object) {
     RawInstance* instance = Instance::RawCast(object);
     objects_.Add(instance);
-
-    intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2;
+    const intptr_t next_field_offset = host_next_field_offset_in_words_
+                                       << kWordSizeLog2;
+    const auto unboxed_fields_bitmap =
+        s->isolate()->shared_class_table()->GetUnboxedFieldsMapAt(cid_);
     intptr_t offset = Instance::NextFieldOffset();
     while (offset < next_field_offset) {
-      RawObject* raw_obj = *reinterpret_cast<RawObject**>(
-          reinterpret_cast<uword>(instance->ptr()) + offset);
-      s->Push(raw_obj);
+      // Skips unboxed fields
+      if (!unboxed_fields_bitmap.Get(offset / kWordSize)) {
+        RawObject* raw_obj = *reinterpret_cast<RawObject**>(
+            reinterpret_cast<uword>(instance->ptr()) + offset);
+        s->Push(raw_obj);
+      }
       offset += kWordSize;
     }
   }
@@ -2748,8 +2832,12 @@
     const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
 
-    s->Write<int32_t>(next_field_offset_in_words_);
-    s->Write<int32_t>(instance_size_in_words_);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    s->Write<int32_t>(target_next_field_offset_in_words_);
+    s->Write<int32_t>(target_instance_size_in_words_);
+#else
+    s->Write<int32_t>(host_next_field_offset_in_words_);
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
 
     for (intptr_t i = 0; i < count; i++) {
       RawInstance* instance = objects_[i];
@@ -2758,17 +2846,28 @@
   }
 
   void WriteFill(Serializer* s) {
-    intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2;
+    intptr_t next_field_offset = host_next_field_offset_in_words_
+                                 << kWordSizeLog2;
     const intptr_t count = objects_.length();
+    const auto shared_class_table = s->isolate()->shared_class_table();
     for (intptr_t i = 0; i < count; i++) {
       RawInstance* instance = objects_[i];
       AutoTraceObject(instance);
       s->Write<bool>(instance->IsCanonical());
+      const auto unboxed_fields_bitmap =
+          shared_class_table->GetUnboxedFieldsMapAt(cid_);
       intptr_t offset = Instance::NextFieldOffset();
       while (offset < next_field_offset) {
-        RawObject* raw_obj = *reinterpret_cast<RawObject**>(
-            reinterpret_cast<uword>(instance->ptr()) + offset);
-        s->WriteElementRef(raw_obj, offset);
+        if (unboxed_fields_bitmap.Get(offset / kWordSize)) {
+          // Writes 32 bits of the unboxed value at a time
+          const uword value = *reinterpret_cast<uword*>(
+              reinterpret_cast<uword>(instance->ptr()) + offset);
+          s->WriteWordWith32BitWrites(value);
+        } else {
+          RawObject* raw_obj = *reinterpret_cast<RawObject**>(
+              reinterpret_cast<uword>(instance->ptr()) + offset);
+          s->WriteElementRef(raw_obj, offset);
+        }
         offset += kWordSize;
       }
     }
@@ -2776,8 +2875,11 @@
 
  private:
   const intptr_t cid_;
-  intptr_t next_field_offset_in_words_;
-  intptr_t instance_size_in_words_;
+  intptr_t host_next_field_offset_in_words_;
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  intptr_t target_next_field_offset_in_words_;
+  intptr_t target_instance_size_in_words_;
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
   GrowableArray<RawInstance*> objects_;
 };
 #endif  // !DART_PRECOMPILED_RUNTIME
@@ -2806,16 +2908,26 @@
     intptr_t instance_size =
         Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize);
 
+    const auto shared_class_table = d->isolate()->shared_class_table();
     for (intptr_t id = start_index_; id < stop_index_; id++) {
       RawInstance* instance = reinterpret_cast<RawInstance*>(d->Ref(id));
       bool is_canonical = d->Read<bool>();
       Deserializer::InitializeHeader(instance, cid_, instance_size,
                                      is_canonical);
+      const auto unboxed_fields_bitmap =
+          shared_class_table->GetUnboxedFieldsMapAt(cid_);
       intptr_t offset = Instance::NextFieldOffset();
       while (offset < next_field_offset) {
-        RawObject** p = reinterpret_cast<RawObject**>(
-            reinterpret_cast<uword>(instance->ptr()) + offset);
-        *p = d->ReadRef();
+        if (unboxed_fields_bitmap.Get(offset / kWordSize)) {
+          uword* p = reinterpret_cast<uword*>(
+              reinterpret_cast<uword>(instance->ptr()) + offset);
+          // Reads 32 bits of the unboxed value at a time
+          *p = d->ReadWordWith32BitReads();
+        } else {
+          RawObject** p = reinterpret_cast<RawObject**>(
+              reinterpret_cast<uword>(instance->ptr()) + offset);
+          *p = d->ReadRef();
+        }
         offset += kWordSize;
       }
       if (offset < instance_size) {
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index 7be84ef..ed8555f 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -234,6 +234,12 @@
     WriteStream::Raw<sizeof(T), T>::Write(&stream_, value);
   }
   void WriteUnsigned(intptr_t value) { stream_.WriteUnsigned(value); }
+  void WriteUnsigned64(uint64_t value) { stream_.WriteUnsigned(value); }
+
+  void WriteWordWith32BitWrites(uword value) {
+    stream_.WriteWordWith32BitWrites(value);
+  }
+
   void WriteBytes(const uint8_t* addr, intptr_t len) {
     stream_.WriteBytes(addr, len);
   }
@@ -496,8 +502,11 @@
     return ReadStream::Raw<sizeof(T), T>::Read(&stream_);
   }
   intptr_t ReadUnsigned() { return stream_.ReadUnsigned(); }
+  uint64_t ReadUnsigned64() { return stream_.ReadUnsigned<uint64_t>(); }
   void ReadBytes(uint8_t* addr, intptr_t len) { stream_.ReadBytes(addr, len); }
 
+  uword ReadWordWith32BitReads() { return stream_.ReadWordWith32BitReads(); }
+
   const uint8_t* CurrentBufferAddress() const {
     return stream_.AddressOfCurrentPosition();
   }
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 377874f..4c6bd4e 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -511,6 +511,7 @@
 #undef FORWARD_DECLARATION
 
 #define DEFINE_INSTRUCTION_TYPE_CHECK(type)                                    \
+  virtual type##Instr* As##type() { return this; }                             \
   virtual const type##Instr* As##type() const { return this; }                 \
   virtual const char* DebugName() const { return #type; }
 
@@ -5497,7 +5498,7 @@
   }
 
   static bool WillAllocateNewOrRemembered(const Class& cls) {
-    return Heap::IsAllocatableInNewSpace(cls.instance_size());
+    return Heap::IsAllocatableInNewSpace(cls.target_instance_size());
   }
 
   PRINT_OPERANDS_TO_SUPPORT
@@ -6238,6 +6239,8 @@
 
   virtual void InferRange(RangeAnalysis* analysis, Range* range);
 
+  virtual SpeculativeMode speculative_mode() const { return kNotSpeculative; }
+
   virtual CompileType ComputeType() const;
   virtual bool RecomputeType();
 
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 6c43554..235b683 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -2557,7 +2557,8 @@
                                                               bool opt) const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps =
-      ((IsUnboxedStore() && opt) ? 2 : ((IsPotentialUnboxedStore()) ? 3 : 0));
+      ((IsUnboxedStore() && opt) ? (FLAG_precompiled_mode ? 0 : 2)
+                                 : (IsPotentialUnboxedStore() ? 3 : 0));
   LocationSummary* summary = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps,
                       ((IsUnboxedStore() && opt && is_initialization()) ||
@@ -2568,8 +2569,10 @@
   summary->set_in(0, Location::RequiresRegister());
   if (IsUnboxedStore() && opt) {
     summary->set_in(1, Location::RequiresFpuRegister());
-    summary->set_temp(0, Location::RequiresRegister());
-    summary->set_temp(1, Location::RequiresRegister());
+    if (!FLAG_precompiled_mode) {
+      summary->set_temp(0, Location::RequiresRegister());
+      summary->set_temp(1, Location::RequiresRegister());
+    }
   } else if (IsPotentialUnboxedStore()) {
     summary->set_in(1, ShouldEmitStoreBarrier() ? Location::WritableRegister()
                                                 : Location::RequiresRegister());
@@ -2615,10 +2618,33 @@
   ASSERT(offset_in_bytes > 0);  // Field is finalized and points after header.
 
   if (IsUnboxedStore() && compiler->is_optimizing()) {
+    const intptr_t cid = slot().field().UnboxedFieldCid();
     const DRegister value = EvenDRegisterOf(locs()->in(1).fpu_reg());
+
+    if (FLAG_precompiled_mode) {
+      switch (cid) {
+        case kDoubleCid:
+          __ Comment("UnboxedDoubleStoreInstanceFieldInstr");
+          __ StoreDToOffset(value, instance_reg,
+                            offset_in_bytes - kHeapObjectTag);
+          return;
+        case kFloat32x4Cid:
+          __ Comment("UnboxedFloat32x4StoreInstanceFieldInstr");
+          __ StoreMultipleDToOffset(value, 2, instance_reg,
+                                    offset_in_bytes - kHeapObjectTag);
+          return;
+        case kFloat64x2Cid:
+          __ Comment("UnboxedFloat64x2StoreInstanceFieldInstr");
+          __ StoreMultipleDToOffset(value, 2, instance_reg,
+                                    offset_in_bytes - kHeapObjectTag);
+          return;
+        default:
+          UNREACHABLE();
+      }
+    }
+
     const Register temp = locs()->temp(0).reg();
     const Register temp2 = locs()->temp(1).reg();
-    const intptr_t cid = slot().field().UnboxedFieldCid();
 
     if (is_initialization()) {
       const Class* cls = NULL;
@@ -2963,8 +2989,9 @@
 LocationSummary* LoadFieldInstr::MakeLocationSummary(Zone* zone,
                                                      bool opt) const {
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps =
-      (IsUnboxedLoad() && opt) ? 1 : ((IsPotentialUnboxedLoad()) ? 3 : 0);
+  const intptr_t kNumTemps = (IsUnboxedLoad() && opt)
+                                 ? (FLAG_precompiled_mode ? 0 : 1)
+                                 : (IsPotentialUnboxedLoad() ? 3 : 0);
 
   LocationSummary* locs = new (zone) LocationSummary(
       zone, kNumInputs, kNumTemps,
@@ -2974,7 +3001,9 @@
   locs->set_in(0, Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
-    locs->set_temp(0, Location::RequiresRegister());
+    if (!FLAG_precompiled_mode) {
+      locs->set_temp(0, Location::RequiresRegister());
+    }
   } else if (IsPotentialUnboxedLoad()) {
     locs->set_temp(0, opt ? Location::RequiresFpuRegister()
                           : Location::FpuRegisterLocation(Q1));
@@ -2990,10 +3019,33 @@
 
   const Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
+    const intptr_t cid = slot().field().UnboxedFieldCid();
     const DRegister result = EvenDRegisterOf(locs()->out(0).fpu_reg());
+
+    if (FLAG_precompiled_mode) {
+      switch (cid) {
+        case kDoubleCid:
+          __ Comment("UnboxedDoubleLoadFieldInstr");
+          __ LoadDFromOffset(result, instance_reg,
+                             OffsetInBytes() - kHeapObjectTag);
+          return;
+        case kFloat32x4Cid:
+          __ Comment("UnboxedFloat32x4LoadFieldInstr");
+          __ LoadMultipleDFromOffset(result, 2, instance_reg,
+                                     OffsetInBytes() - kHeapObjectTag);
+          return;
+        case kFloat64x2Cid:
+          __ Comment("UnboxedFloat64x2LoadFieldInstr");
+          __ LoadMultipleDFromOffset(result, 2, instance_reg,
+                                     OffsetInBytes() - kHeapObjectTag);
+          return;
+        default:
+          UNREACHABLE();
+      }
+    }
+
     const Register temp = locs()->temp(0).reg();
     __ LoadFieldFromOffset(kWord, temp, instance_reg, OffsetInBytes());
-    const intptr_t cid = slot().field().UnboxedFieldCid();
     switch (cid) {
       case kDoubleCid:
         __ Comment("UnboxedDoubleLoadFieldInstr");
@@ -3320,7 +3372,7 @@
   Register temp = locs()->temp(0).reg();
   compiler::Label no_call;
 
-  __ ldr(temp, compiler::FieldAddress(instance, field().Offset()));
+  __ ldr(temp, compiler::FieldAddress(instance, field().TargetOffset()));
   __ CompareObject(temp, Object::sentinel());
   __ b(&no_call, NE);
 
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 405bc32..9894048 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -2158,8 +2158,9 @@
 LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary(Zone* zone,
                                                               bool opt) const {
   const intptr_t kNumInputs = 2;
-  const intptr_t kNumTemps =
-      (IsUnboxedStore() && opt) ? 2 : ((IsPotentialUnboxedStore()) ? 2 : 0);
+  const intptr_t kNumTemps = (IsUnboxedStore() && opt)
+                                 ? (FLAG_precompiled_mode ? 0 : 2)
+                                 : (IsPotentialUnboxedStore() ? 2 : 0);
   LocationSummary* summary = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps,
                       ((IsUnboxedStore() && opt && is_initialization()) ||
@@ -2170,8 +2171,10 @@
   summary->set_in(0, Location::RequiresRegister());
   if (IsUnboxedStore() && opt) {
     summary->set_in(1, Location::RequiresFpuRegister());
-    summary->set_temp(0, Location::RequiresRegister());
-    summary->set_temp(1, Location::RequiresRegister());
+    if (!FLAG_precompiled_mode) {
+      summary->set_temp(0, Location::RequiresRegister());
+      summary->set_temp(1, Location::RequiresRegister());
+    }
   } else if (IsPotentialUnboxedStore()) {
     summary->set_in(1, ShouldEmitStoreBarrier() ? Location::WritableRegister()
                                                 : Location::RequiresRegister());
@@ -2195,9 +2198,29 @@
 
   if (IsUnboxedStore() && compiler->is_optimizing()) {
     const VRegister value = locs()->in(1).fpu_reg();
+    const intptr_t cid = slot().field().UnboxedFieldCid();
+
+    if (FLAG_precompiled_mode) {
+      switch (cid) {
+        case kDoubleCid:
+          __ Comment("UnboxedDoubleStoreInstanceFieldInstr");
+          __ StoreDFieldToOffset(value, instance_reg, offset_in_bytes);
+          return;
+        case kFloat32x4Cid:
+          __ Comment("UnboxedFloat32x4StoreInstanceFieldInstr");
+          __ StoreQFieldToOffset(value, instance_reg, offset_in_bytes);
+          return;
+        case kFloat64x2Cid:
+          __ Comment("UnboxedFloat64x2StoreInstanceFieldInstr");
+          __ StoreQFieldToOffset(value, instance_reg, offset_in_bytes);
+          return;
+        default:
+          UNREACHABLE();
+      }
+    }
+
     const Register temp = locs()->temp(0).reg();
     const Register temp2 = locs()->temp(1).reg();
-    const intptr_t cid = slot().field().UnboxedFieldCid();
 
     if (is_initialization()) {
       const Class* cls = NULL;
@@ -2534,8 +2557,9 @@
 LocationSummary* LoadFieldInstr::MakeLocationSummary(Zone* zone,
                                                      bool opt) const {
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps =
-      (IsUnboxedLoad() && opt) ? 1 : ((IsPotentialUnboxedLoad()) ? 1 : 0);
+  const intptr_t kNumTemps = (IsUnboxedLoad() && opt)
+                                 ? (FLAG_precompiled_mode ? 0 : 1)
+                                 : (IsPotentialUnboxedLoad() ? 1 : 0);
   LocationSummary* locs = new (zone) LocationSummary(
       zone, kNumInputs, kNumTemps,
       (opt && !IsPotentialUnboxedLoad()) ? LocationSummary::kNoCall
@@ -2544,7 +2568,9 @@
   locs->set_in(0, Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
-    locs->set_temp(0, Location::RequiresRegister());
+    if (!FLAG_precompiled_mode) {
+      locs->set_temp(0, Location::RequiresRegister());
+    }
   } else if (IsPotentialUnboxedLoad()) {
     locs->set_temp(0, Location::RequiresRegister());
   }
@@ -2557,9 +2583,30 @@
   const Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
     const VRegister result = locs()->out(0).fpu_reg();
-    const Register temp = locs()->temp(0).reg();
-    __ LoadFieldFromOffset(temp, instance_reg, OffsetInBytes());
     const intptr_t cid = slot().field().UnboxedFieldCid();
+
+    if (FLAG_precompiled_mode) {
+      switch (cid) {
+        case kDoubleCid:
+          __ Comment("UnboxedDoubleLoadFieldInstr");
+          __ LoadDFieldFromOffset(result, instance_reg, OffsetInBytes());
+          return;
+        case kFloat32x4Cid:
+          __ Comment("UnboxedFloat32x4LoadFieldInstr");
+          __ LoadQFieldFromOffset(result, instance_reg, OffsetInBytes());
+          return;
+        case kFloat64x2Cid:
+          __ Comment("UnboxedFloat64x2LoadFieldInstr");
+          __ LoadQFieldFromOffset(result, instance_reg, OffsetInBytes());
+          return;
+        default:
+          UNREACHABLE();
+      }
+    }
+
+    const Register temp = locs()->temp(0).reg();
+
+    __ LoadFieldFromOffset(temp, instance_reg, OffsetInBytes());
     switch (cid) {
       case kDoubleCid:
         __ Comment("UnboxedDoubleLoadFieldInstr");
@@ -2875,7 +2922,7 @@
   Register temp = locs()->temp(0).reg();
   compiler::Label no_call;
 
-  __ ldr(temp, compiler::FieldAddress(instance, field().Offset()));
+  __ ldr(temp, compiler::FieldAddress(instance, field().TargetOffset()));
   __ CompareObject(temp, Object::sentinel());
   __ b(&no_call, NE);
 
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index c02b5e7..28a4d59 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -2753,7 +2753,7 @@
 
   compiler::Label no_call;
 
-  __ movl(temp, compiler::FieldAddress(instance, field().Offset()));
+  __ movl(temp, compiler::FieldAddress(instance, field().TargetOffset()));
   __ CompareObject(temp, Object::sentinel());
   __ j(NOT_EQUAL, &no_call, compiler::Assembler::kNearJump);
 
diff --git a/runtime/vm/compiler/backend/il_serializer.cc b/runtime/vm/compiler/backend/il_serializer.cc
index 2ec431ae..b873992 100644
--- a/runtime/vm/compiler/backend/il_serializer.cc
+++ b/runtime/vm/compiler/backend/il_serializer.cc
@@ -1308,7 +1308,7 @@
     SExpList* sexp,
     FlowGraphSerializer* s) const {
   Instruction::AddExtraInfoToSExpression(sexp, s);
-  s->AddExtraInteger(sexp, "size", cls().instance_size());
+  s->AddExtraInteger(sexp, "size", cls().target_instance_size());
   if (auto const closure = s->DartValueToSExp(closure_function())) {
     sexp->AddExtra("closure_function", closure);
   }
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 4b9cfcd..9af1adc 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -2128,8 +2128,9 @@
 LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary(Zone* zone,
                                                               bool opt) const {
   const intptr_t kNumInputs = 2;
-  const intptr_t kNumTemps =
-      (IsUnboxedStore() && opt) ? 2 : ((IsPotentialUnboxedStore()) ? 3 : 0);
+  const intptr_t kNumTemps = (IsUnboxedStore() && opt)
+                                 ? (FLAG_precompiled_mode ? 0 : 2)
+                                 : (IsPotentialUnboxedStore() ? 3 : 0);
   LocationSummary* summary = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps,
                       ((IsUnboxedStore() && opt && is_initialization()) ||
@@ -2140,8 +2141,10 @@
   summary->set_in(0, Location::RequiresRegister());
   if (IsUnboxedStore() && opt) {
     summary->set_in(1, Location::RequiresFpuRegister());
-    summary->set_temp(0, Location::RequiresRegister());
-    summary->set_temp(1, Location::RequiresRegister());
+    if (!FLAG_precompiled_mode) {
+      summary->set_temp(0, Location::RequiresRegister());
+      summary->set_temp(1, Location::RequiresRegister());
+    }
   } else if (IsPotentialUnboxedStore()) {
     summary->set_in(1, ShouldEmitStoreBarrier() ? Location::WritableRegister()
                                                 : Location::RequiresRegister());
@@ -2186,9 +2189,33 @@
 
   if (IsUnboxedStore() && compiler->is_optimizing()) {
     XmmRegister value = locs()->in(1).fpu_reg();
+    const intptr_t cid = slot().field().UnboxedFieldCid();
+
+    // Real unboxed field
+    if (FLAG_precompiled_mode) {
+      switch (cid) {
+        case kDoubleCid:
+          __ Comment("UnboxedDoubleStoreInstanceFieldInstr");
+          __ movsd(compiler::FieldAddress(instance_reg, offset_in_bytes),
+                   value);
+          return;
+        case kFloat32x4Cid:
+          __ Comment("UnboxedFloat32x4StoreInstanceFieldInstr");
+          __ movups(compiler::FieldAddress(instance_reg, offset_in_bytes),
+                    value);
+          return;
+        case kFloat64x2Cid:
+          __ Comment("UnboxedFloat64x2StoreInstanceFieldInstr");
+          __ movups(compiler::FieldAddress(instance_reg, offset_in_bytes),
+                    value);
+          return;
+        default:
+          UNREACHABLE();
+      }
+    }
+
     Register temp = locs()->temp(0).reg();
     Register temp2 = locs()->temp(1).reg();
-    const intptr_t cid = slot().field().UnboxedFieldCid();
 
     if (is_initialization()) {
       const Class* cls = NULL;
@@ -2533,8 +2560,9 @@
 LocationSummary* LoadFieldInstr::MakeLocationSummary(Zone* zone,
                                                      bool opt) const {
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps =
-      (IsUnboxedLoad() && opt) ? 1 : ((IsPotentialUnboxedLoad()) ? 2 : 0);
+  const intptr_t kNumTemps = (IsUnboxedLoad() && opt)
+                                 ? (FLAG_precompiled_mode ? 0 : 1)
+                                 : (IsPotentialUnboxedLoad() ? 2 : 0);
   LocationSummary* locs = new (zone) LocationSummary(
       zone, kNumInputs, kNumTemps,
       (opt && !IsPotentialUnboxedLoad()) ? LocationSummary::kNoCall
@@ -2543,7 +2571,9 @@
   locs->set_in(0, Location::RequiresRegister());
 
   if (IsUnboxedLoad() && opt) {
-    locs->set_temp(0, Location::RequiresRegister());
+    if (!FLAG_precompiled_mode) {
+      locs->set_temp(0, Location::RequiresRegister());
+    }
   } else if (IsPotentialUnboxedLoad()) {
     locs->set_temp(0, opt ? Location::RequiresFpuRegister()
                           : Location::FpuRegisterLocation(XMM1));
@@ -2558,9 +2588,34 @@
   Register instance_reg = locs()->in(0).reg();
   if (IsUnboxedLoad() && compiler->is_optimizing()) {
     XmmRegister result = locs()->out(0).fpu_reg();
+    const intptr_t cid = slot().field().UnboxedFieldCid();
+
+    // Real unboxed field
+    if (FLAG_precompiled_mode) {
+      switch (cid) {
+        case kDoubleCid:
+          __ Comment("UnboxedDoubleLoadFieldInstr");
+          __ movsd(result,
+                   compiler::FieldAddress(instance_reg, OffsetInBytes()));
+          break;
+        case kFloat32x4Cid:
+          __ Comment("UnboxedFloat32x4LoadFieldInstr");
+          __ movups(result,
+                    compiler::FieldAddress(instance_reg, OffsetInBytes()));
+          break;
+        case kFloat64x2Cid:
+          __ Comment("UnboxedFloat64x2LoadFieldInstr");
+          __ movups(result,
+                    compiler::FieldAddress(instance_reg, OffsetInBytes()));
+          break;
+        default:
+          UNREACHABLE();
+      }
+      return;
+    }
+
     Register temp = locs()->temp(0).reg();
     __ movq(temp, compiler::FieldAddress(instance_reg, OffsetInBytes()));
-    intptr_t cid = slot().field().UnboxedFieldCid();
     switch (cid) {
       case kDoubleCid:
         __ Comment("UnboxedDoubleLoadFieldInstr");
@@ -2890,7 +2945,7 @@
 
   compiler::Label no_call;
 
-  __ movq(temp, compiler::FieldAddress(instance, field().Offset()));
+  __ movq(temp, compiler::FieldAddress(instance, field().TargetOffset()));
   __ CompareObject(temp, Object::sentinel());
   __ j(NOT_EQUAL, &no_call, compiler::Assembler::kNearJump);
 
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 91c1896..1baea96 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -3474,6 +3474,27 @@
   if (!ShouldInlineSimd()) {
     return false;
   }
+  bool is_dynamic_call = false;
+  if (auto instance_call = call->AsInstanceCallBase()) {
+    is_dynamic_call = Function::IsDynamicInvocationForwarderName(
+        instance_call->function_name());
+  } else if (auto static_call = call->AsStaticCall()) {
+    is_dynamic_call = static_call->function().IsDynamicInvocationForwarder();
+  }
+  if (is_dynamic_call && call->ArgumentCount() > 1) {
+    // Issue(dartbug.com/37737): Dynamic invocation forwarders have the
+    // same recognized kind as the method they are forwarding to.
+    // That causes us to inline the recognized method and not the
+    // dyn: forwarder itself.
+    // This is only safe if all arguments are checked in the flow graph we
+    // build.
+    // For double/int arguments speculative unboxing instructions should ensure
+    // to bailout in AOT (or deoptimize in JIT) if the incoming values are not
+    // correct. Though for user-implementable types, like
+    // operator+(Float32x4 other), this is not safe and we therefore bailout.
+    return false;
+  }
+
   *entry =
       new (Z) FunctionEntryInstr(graph_entry, flow_graph->allocate_block_id(),
                                  call->GetBlock()->try_index(), DeoptId::kNone);
@@ -3572,6 +3593,13 @@
   if (!CanUnboxDouble()) {
     return false;
   }
+
+  for (intptr_t i = 0; i < call->ArgumentCount(); i++) {
+    if (call->ArgumentAt(i)->Type()->ToCid() != kDoubleCid) {
+      return false;
+    }
+  }
+
   *entry =
       new (Z) FunctionEntryInstr(graph_entry, flow_graph->allocate_block_id(),
                                  call->GetBlock()->try_index(), DeoptId::kNone);
diff --git a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
index 42006a5..58641e6 100644
--- a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
@@ -1151,7 +1151,7 @@
 }
 
 const Slot& ClosureSlotByField(const Field& field) {
-  const intptr_t offset = field.Offset();
+  const intptr_t offset = field.HostOffset();
   if (offset == Closure::instantiator_type_arguments_offset()) {
     return Slot::Closure_instantiator_type_arguments();
   } else if (offset == Closure::function_type_arguments_offset()) {
@@ -1178,7 +1178,7 @@
 
   const Field& field = Field::Cast(ConstantAt(cp_index, 1).value());
   ASSERT(Smi::Cast(ConstantAt(cp_index).value()).Value() * kWordSize ==
-         field.Offset());
+         field.HostOffset());
 
   if (field.Owner() == isolate()->object_store()->closure_class()) {
     // Stores to _Closure fields are lower-level.
@@ -1204,7 +1204,7 @@
 
   const Field& field = Field::Cast(ConstantAt(cp_index, 1).value());
   ASSERT(Smi::Cast(ConstantAt(cp_index).value()).Value() * kWordSize ==
-         field.Offset());
+         field.HostOffset());
 
   if (field.Owner() == isolate()->object_store()->closure_class()) {
     // Loads from _Closure fields are lower-level.
@@ -1292,7 +1292,7 @@
 
   const Field& field = Field::Cast(ConstantAt(cp_index, 1).value());
   ASSERT(Smi::Cast(ConstantAt(cp_index).value()).Value() * kWordSize ==
-         field.Offset());
+         field.HostOffset());
 
   code_ += B->Constant(Object::sentinel());
   code_ += B->StoreInstanceField(
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.cc b/runtime/vm/compiler/frontend/bytecode_reader.cc
index f14cd8b..616e9f3 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.cc
+++ b/runtime/vm/compiler/frontend/bytecode_reader.cc
@@ -748,7 +748,7 @@
         field ^= ReadObject();
         // InstanceField constant occupies 2 entries.
         // The first entry is used for field offset.
-        obj = Smi::New(field.Offset() / kWordSize);
+        obj = Smi::New(field.HostOffset() / kWordSize);
         pool.SetTypeAt(i, ObjectPool::EntryType::kTaggedObject,
                        ObjectPool::Patchability::kNotPatchable);
         pool.SetObjectAt(i, obj);
@@ -763,7 +763,7 @@
         break;
       case ConstantPoolTag::kTypeArgumentsField:
         cls ^= ReadObject();
-        obj = Smi::New(cls.type_arguments_field_offset() / kWordSize);
+        obj = Smi::New(cls.host_type_arguments_field_offset() / kWordSize);
         break;
       case ConstantPoolTag::kType:
         obj = ReadObject();
diff --git a/runtime/vm/compiler/frontend/bytecode_scope_builder.cc b/runtime/vm/compiler/frontend/bytecode_scope_builder.cc
index fbc39dd..bd0b3ec 100644
--- a/runtime/vm/compiler/frontend/bytecode_scope_builder.cc
+++ b/runtime/vm/compiler/frontend/bytecode_scope_builder.cc
@@ -82,6 +82,7 @@
     case RawFunction::kImplicitSetter: {
       const bool is_setter = function.IsImplicitSetterFunction();
       const bool is_method = !function.IsStaticFunction();
+      const Field& field = Field::Handle(Z, function.accessor_field());
       intptr_t pos = 0;
       if (is_method) {
         MakeReceiverVariable(/* is_parameter = */ true);
@@ -94,7 +95,6 @@
         scope_->InsertParameterAt(pos++, setter_value);
 
         if (is_method) {
-          const Field& field = Field::Handle(Z, function.accessor_field());
           if (field.is_covariant()) {
             setter_value->set_is_explicit_covariant_parameter();
           } else {
@@ -107,12 +107,24 @@
             }
           }
         }
+      } else {
+        if (field.is_late()) {
+          // LoadLateField uses expression_temp_var.
+          needs_expr_temp = true;
+        }
       }
       break;
     }
-    case RawFunction::kImplicitStaticGetter:
+    case RawFunction::kImplicitStaticGetter: {
       ASSERT(!IsStaticFieldGetterGeneratedAsInitializer(function, Z));
+      const Field& field = Field::Handle(Z, function.accessor_field());
+      const bool lib_is_nnbd = function.nnbd_mode() == NNBDMode::kOptedInLib;
+      if (field.is_late() || lib_is_nnbd) {
+        // LoadLateField uses expression_temp_var.
+        needs_expr_temp = true;
+      }
       break;
+    }
     case RawFunction::kDynamicInvocationForwarder: {
       // Create [this] variable.
       MakeReceiverVariable(/* is_parameter = */ true);
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index 9646b59..69a1e73 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -220,6 +220,7 @@
       }
       const auto& obj = Object::Handle(Z, klass.EnsureIsFinalized(H.thread()));
       ASSERT(obj.IsNull());
+      ASSERT(klass.is_const());
       instance = Instance::New(klass, Heap::kOld);
       // Build type from the raw bytes (needs temporary translator).
       TypeTranslator type_translator(&reader, active_class_, true);
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 6441249..3db08e1 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -200,6 +200,10 @@
     }
     return Fragment();
   }
+  // Late fields are initialized to Object::sentinel, which is a flavor of null.
+  // So we need to record that store so that the field guard doesn't prematurely
+  // optimise out the late field's sentinel checking logic.
+  field.RecordStore(Object::null_object());
 
   Fragment instructions;
   instructions += LoadLocal(parsed_function()->receiver_var());
@@ -3568,6 +3572,11 @@
   TokenPosition position = ReadPosition();  // read position.
   if (p != NULL) *p = position;
 
+  if (translation_helper_.info().kernel_binary_version() >= 38) {
+    // TODO(alexmarkov): Handle flags.
+    ReadFlags();  // read flags.
+  }
+
   Fragment instructions = BuildExpression();  // read operand.
 
   const AbstractType& type = T.BuildType();  // read type.
@@ -3619,6 +3628,7 @@
   TokenPosition position = ReadPosition();  // read position.
   if (p != NULL) *p = position;
 
+  // TODO(alexmarkov): Handle new flags.
   const uint8_t flags = ReadFlags();  // read flags.
   const bool is_type_error = (flags & (1 << 0)) != 0;
 
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index cf6f13d..4247dae 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -464,6 +464,9 @@
       return;
     case kIsExpression:
       ReadPosition();                    // read position.
+      if (translation_helper_.info().kernel_binary_version() >= 38) {
+        BuildHash(ReadFlags());  // read flags.
+      }
       CalculateExpressionFingerprint();  // read operand.
       CalculateDartTypeFingerprint();    // read type.
       return;
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index c857a50..2a4574d 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -453,8 +453,9 @@
     instructions += LoadLocal(instance);
     instructions += LoadField(field);
   }
-  LocalVariable* temp = MakeTemporary();
-  instructions += LoadLocal(temp);
+
+  LocalVariable* temp = parsed_function_->expression_temp_var();
+  instructions += StoreLocal(position, temp);
   instructions += Constant(Object::sentinel());
   instructions += BranchIfStrictEqual(&is_uninitialized, &is_initialized);
 
@@ -496,7 +497,9 @@
   }
 
   // Now that the field has been initialized, load it.
-  return Fragment(instructions.entry, join);
+  instructions = Fragment(instructions.entry, join);
+  instructions += LoadLocal(temp);
+  return instructions;
 }
 
 Fragment FlowGraphBuilder::ThrowLateInitializationError(TokenPosition position,
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 30f762e..9c916a1 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2257,6 +2257,9 @@
       return;
     case kIsExpression:
       ReadPosition();    // read position.
+      if (translation_helper_.info().kernel_binary_version() >= 38) {
+        SkipFlags();  // read flags.
+      }
       SkipExpression();  // read operand.
       SkipDartType();    // read type.
       return;
@@ -2962,9 +2965,11 @@
   if (parameter_index < class_types.Length()) {
     // The index of the type parameter in [parameters] is
     // the same index into the `klass->type_parameters()` array.
-    result_ = class_types.TypeAt(parameter_index);
-    result_ =
-        TypeParameter::Cast(result_).ToNullability(nullability, Heap::kOld);
+    const auto& type_param =
+        TypeParameter::CheckedHandle(Z, class_types.TypeAt(parameter_index));
+    result_ = type_param.ToNullability(nullability, Heap::kOld);
+    active_class_->RecordDerivedTypeParameter(Z, type_param,
+                                              TypeParameter::Cast(result_));
     return;
   }
   parameter_index -= class_types.Length();
@@ -2989,9 +2994,11 @@
       //   }
       //
       if (class_types.Length() > parameter_index) {
-        result_ = class_types.TypeAt(parameter_index);
-        result_ =
-            TypeParameter::Cast(result_).ToNullability(nullability, Heap::kOld);
+        const auto& type_param = TypeParameter::CheckedHandle(
+            Z, class_types.TypeAt(parameter_index));
+        result_ = type_param.ToNullability(nullability, Heap::kOld);
+        active_class_->RecordDerivedTypeParameter(Z, type_param,
+                                                  TypeParameter::Cast(result_));
         return;
       }
       parameter_index -= class_types.Length();
@@ -3004,11 +3011,13 @@
             : 0;
     if (procedure_type_parameter_count > 0) {
       if (procedure_type_parameter_count > parameter_index) {
-        result_ =
+        const auto& type_param = TypeParameter::CheckedHandle(
+            Z,
             TypeArguments::Handle(Z, active_class_->member->type_parameters())
-                .TypeAt(parameter_index);
-        result_ =
-            TypeParameter::Cast(result_).ToNullability(nullability, Heap::kOld);
+                .TypeAt(parameter_index));
+        result_ = type_param.ToNullability(nullability, Heap::kOld);
+        active_class_->RecordDerivedTypeParameter(Z, type_param,
+                                                  TypeParameter::Cast(result_));
         if (finalize_) {
           result_ =
               ClassFinalizer::FinalizeType(*active_class_->klass, result_);
@@ -3021,9 +3030,11 @@
 
   if (active_class_->local_type_parameters != NULL) {
     if (parameter_index < active_class_->local_type_parameters->Length()) {
-      result_ = active_class_->local_type_parameters->TypeAt(parameter_index);
-      result_ =
-          TypeParameter::Cast(result_).ToNullability(nullability, Heap::kOld);
+      const auto& type_param = TypeParameter::CheckedHandle(
+          Z, active_class_->local_type_parameters->TypeAt(parameter_index));
+      result_ = type_param.ToNullability(nullability, Heap::kOld);
+      active_class_->RecordDerivedTypeParameter(Z, type_param,
+                                                TypeParameter::Cast(result_));
       if (finalize_) {
         result_ = ClassFinalizer::FinalizeType(*active_class_->klass, result_);
       }
@@ -3134,10 +3145,13 @@
     }
   }
 
+  NNBDMode nnbd_mode;
   if (set_on.IsClass()) {
     Class::Cast(set_on).set_type_parameters(type_parameters);
+    nnbd_mode = Class::Cast(set_on).nnbd_mode();
   } else {
     Function::Cast(set_on).set_type_parameters(type_parameters);
+    nnbd_mode = Function::Cast(set_on).nnbd_mode();
   }
 
   const Function* enclosing = NULL;
@@ -3158,13 +3172,39 @@
     if (tag == kDynamicType) {
       helper_->SkipDartType();  // read ith bound.
       parameter.set_bound(Type::Handle(Z, I->object_store()->object_type()));
+      if (nnbd_mode == NNBDMode::kOptedInLib) {
+        parameter.set_nullability(Nullability::kUndetermined);
+      }
     } else {
       AbstractType& bound = BuildTypeWithoutFinalization();  // read ith bound.
       parameter.set_bound(bound);
+      if (nnbd_mode == NNBDMode::kOptedInLib) {
+        parameter.set_nullability(bound.IsNullable()
+                                      ? Nullability::kUndetermined
+                                      : Nullability::kNonNullable);
+      }
     }
 
     helper.Finish();
   }
+
+  // Fix bounds in all derived type parameters (with different nullabilities).
+  if (active_class->derived_type_parameters != nullptr) {
+    auto& derived = TypeParameter::Handle(Z);
+    auto& bound = AbstractType::Handle(Z);
+    for (intptr_t i = 0, n = active_class->derived_type_parameters->Length();
+         i < n; ++i) {
+      derived ^= active_class->derived_type_parameters->At(i);
+      if (derived.bound() == AbstractType::null() &&
+          (derived.parameterized_class() == set_on.raw() ||
+           derived.parameterized_function() == set_on.raw())) {
+        ASSERT(!derived.IsFinalized());
+        parameter ^= type_parameters.TypeAt(derived.index());
+        bound = parameter.bound();
+        derived.set_bound(bound);
+      }
+    }
+  }
 }
 
 const Type& TypeTranslator::ReceiverType(const Class& klass) {
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 375c171..3a717c7 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -1198,6 +1198,19 @@
     return klass->NumTypeArguments();
   }
 
+  void RecordDerivedTypeParameter(Zone* zone,
+                                  const TypeParameter& original,
+                                  const TypeParameter& derived) {
+    if (original.raw() != derived.raw() &&
+        original.bound() == AbstractType::null()) {
+      if (derived_type_parameters == nullptr) {
+        derived_type_parameters = &GrowableObjectArray::Handle(
+            zone, GrowableObjectArray::New(Heap::kOld));
+      }
+      derived_type_parameters->Add(derived);
+    }
+  }
+
   const char* ToCString() {
     return member != NULL ? member->ToCString() : klass->ToCString();
   }
@@ -1212,6 +1225,8 @@
   const Function* enclosing;
 
   const TypeArguments* local_type_parameters;
+
+  GrowableObjectArray* derived_type_parameters = nullptr;
 };
 
 class ActiveClassScope {
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 2697f58..23885c3 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -277,6 +277,7 @@
       ASSERT(helper_.PeekTag() == kField);
       const bool is_setter = function.IsImplicitSetterFunction();
       const bool is_method = !function.IsStaticFunction();
+      const auto& field = Field::Handle(Z, function.accessor_field());
       intptr_t pos = 0;
       if (is_method) {
         Class& klass = Class::Handle(Z, function.Owner());
@@ -288,7 +289,6 @@
         parsed_function_->set_receiver_var(variable);
       }
       if (is_setter) {
-        const auto& field = Field::Handle(Z, function.accessor_field());
         if (FLAG_precompiled_mode) {
           const intptr_t kernel_offset = field.kernel_offset();
           const InferredTypeMetadata parameter_type =
@@ -316,18 +316,29 @@
                 LocalVariable::kTypeCheckedByCaller);
           }
         }
+      } else {
+        if (field.is_late()) {
+          // LoadLateField uses expression_temp_var.
+          needs_expr_temp_ = true;
+        }
       }
       break;
     }
     case RawFunction::kImplicitStaticGetter: {
       ASSERT(helper_.PeekTag() == kField);
       ASSERT(function.IsStaticFunction());
+      const auto& field = Field::Handle(Z, function.accessor_field());
       // In addition to static field initializers, scopes/local variables
       // are needed for implicit getters of static const fields, in order to
       // be able to evaluate their initializers in constant evaluator.
       if (Field::Handle(Z, function.accessor_field()).is_const()) {
         VisitNode();
       }
+      const bool lib_is_nnbd = function.nnbd_mode() == NNBDMode::kOptedInLib;
+      if (field.is_late() || lib_is_nnbd) {
+        // LoadLateField uses expression_temp_var.
+        needs_expr_temp_ = true;
+      }
       break;
     }
     case RawFunction::kFieldInitializer: {
@@ -803,6 +814,9 @@
     }
     case kIsExpression:
       helper_.ReadPosition();  // read position.
+      if (translation_helper_.info().kernel_binary_version() >= 38) {
+        helper_.ReadFlags();  // read flags.
+      }
       VisitExpression();       // read operand.
       VisitDartType();         // read type.
       return;
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 54ef994..4d90982 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -63,14 +63,14 @@
   V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x9bfbd6d5)     \
   V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x1a383408) \
   V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x59765a4a)                 \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xe5a934d2)              \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0xc0a650e4)              \
   V(_IntegerImplementation, toDouble, IntegerToDouble, 0x22a26db3)             \
   V(_Double, _add, DoubleAdd, 0x2f5c036a)                                      \
   V(_Double, _sub, DoubleSub, 0x6d3cec71)                                      \
   V(_Double, _mul, DoubleMul, 0x648e67af)                                      \
   V(_Double, _div, DoubleDiv, 0x6d72d7d4)                                      \
-  V(::, min, MathMin, 0x07b1ad15)                                              \
-  V(::, max, MathMax, 0xa40283bc)                                              \
+  V(::, min, MathMin, 0x935b799b)                                              \
+  V(::, max, MathMax, 0xe188dec2)                                              \
   V(::, _doublePow, MathDoublePow, 0x5ae04e61)                                 \
   V(::, _intPow, MathIntPow, 0x569ffd3f)                                       \
   V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0xbe902b89)        \
@@ -191,7 +191,7 @@
   V(_Double, >=, Double_greaterEqualThan, 0x2961f8ee)                          \
   V(_Double, <, Double_lessThan, 0xcbff42e5)                                   \
   V(_Double, <=, Double_lessEqualThan, 0xd2253d90)                             \
-  V(_Double, ==, Double_equal, 0xa7dfa02b)                                     \
+  V(_Double, ==, Double_equal, 0x6a306911)                                     \
   V(_Double, +, Double_add, 0xf7d8da94)                                        \
   V(_Double, -, Double_sub, 0xc8dda725)                                        \
   V(_Double, *, Double_mul, 0x2dac85a2)                                        \
@@ -239,7 +239,7 @@
   V(_IntegerImplementation, *, Integer_mul, 0xefe7fbce)                        \
   V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
     0xbc75fece)                                                                \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 0xfb066107)               \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 0x42d9b723)               \
   V(_IntegerImplementation, unary-, Integer_negate, 0xdb5f0d70)                \
   V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger,     \
     0xb7e724d2)                                                                \
@@ -253,7 +253,7 @@
   V(_IntegerImplementation, _greaterThanFromInteger,                           \
     Integer_greaterThanFromInt, 0x3366ff66)                                    \
   V(_IntegerImplementation, >, Integer_greaterThan, 0xe74b678c)                \
-  V(_IntegerImplementation, ==, Integer_equal, 0xb6faea0e)                     \
+  V(_IntegerImplementation, ==, Integer_equal, 0xdf47652c)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
     0x39d3cd05)                                                                \
   V(_IntegerImplementation, <, Integer_lessThan, 0xcbff42e5)                   \
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index d628ac8..d24699f 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "vm/compiler/runtime_api.h"
-#include "platform/utils.h"
 
 namespace dart {
 namespace compiler {
@@ -199,7 +198,7 @@
 }
 
 word LookupFieldOffsetInBytes(const Field& field) {
-  return field.Offset();
+  return field.TargetOffset();
 }
 
 #if defined(TARGET_ARCH_IA32)
@@ -337,10 +336,10 @@
   case kExternalTypedData##clazz##Cid:
       CLASS_LIST_TYPED_DATA(HANDLE_CASE)
 #undef HANDLE_CASE
-      return TranslateOffsetInWords(handle.instance_size());
+      return handle.target_instance_size();
     default:
       if (handle.id() >= kNumPredefinedCids) {
-        return TranslateOffsetInWords(handle.instance_size());
+        return handle.target_instance_size();
       }
   }
   FATAL3("Unsupported class for size translation: %s (id=%" Pd
@@ -359,11 +358,12 @@
 }
 
 bool Class::HasTypeArgumentsField(const dart::Class& klass) {
-  return klass.type_arguments_field_offset() != dart::Class::kNoTypeArguments;
+  return klass.host_type_arguments_field_offset() !=
+         dart::Class::kNoTypeArguments;
 }
 
 intptr_t Class::TypeArgumentsFieldOffset(const dart::Class& klass) {
-  return TranslateOffsetInWords(klass.type_arguments_field_offset());
+  return klass.target_type_arguments_field_offset();
 }
 
 bool Class::TraceAllocation(const dart::Class& klass) {
@@ -643,7 +643,7 @@
 }
 
 word Field::OffsetOf(const dart::Field& field) {
-  return TranslateOffsetInWords(field.Offset());
+  return field.TargetOffset();
 }
 
 word FieldTable::OffsetOf(const dart::Field& field) {
@@ -651,6 +651,314 @@
       dart::FieldTable::FieldOffsetFor(field.field_id()));
 }
 
+word FreeListElement::FakeInstance::InstanceSize() {
+  return 0;
+}
+
+word ForwardingCorpse::FakeInstance::InstanceSize() {
+  return 0;
+}
+
+word Instance::NextFieldOffset() {
+  return TranslateOffsetInWords(dart::Instance::NextFieldOffset());
+}
+
+word Pointer::NextFieldOffset() {
+  return TranslateOffsetInWords(dart::Pointer::NextFieldOffset());
+}
+
+word ObjectPool::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Class::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Function::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ICData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word MegamorphicCache::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word SingleTargetCache::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Array::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word GrowableObjectArray::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TypedDataBase::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TypedData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ExternalTypedData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TypedDataView::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word LinkedHashMap::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Type::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TypeRef::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Double::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Mint::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word String::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word OneByteString::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TwoByteString::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ExternalOneByteString::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ExternalTwoByteString::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Int32x4::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Float32x4::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Float64x2::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word DynamicLibrary::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word PatchClass::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word SignatureData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word RedirectionData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word FfiTrampolineData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Script::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Library::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Namespace::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word KernelProgramInfo::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Bytecode::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word PcDescriptors::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word CodeSourceMap::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word CompressedStackMaps::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word LocalVarDescriptors::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ExceptionHandlers::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ContextScope::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ParameterTypeCheck::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word UnlinkedCall::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ApiError::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word LanguageError::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word UnhandledException::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word UnwindError::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Bool::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TypeParameter::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word LibraryPrefix::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Capability::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ReceivePort::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word SendPort::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TransferableTypedData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word StackTrace::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Integer::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Smi::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word WeakProperty::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word MirrorReference::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Number::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word MonomorphicSmiableCall::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Instructions::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Code::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word SubtypeTestCache::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Context::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Closure::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ClosureData::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word RegExp::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word UserTag::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word Field::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word TypeArguments::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word FreeListElement::FakeInstance::NextFieldOffset() {
+  return -kWordSize;
+}
+
+word ForwardingCorpse::FakeInstance::NextFieldOffset() {
+  return -kWordSize;
+}
+
 }  // namespace target
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index c7d5b96..4c14afd 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -19,6 +19,7 @@
 // in compiler::target namespace.
 
 #include "platform/globals.h"
+#include "platform/utils.h"
 #include "vm/allocation.h"
 #include "vm/bitfield.h"
 #include "vm/bss_relocs.h"
@@ -285,6 +286,11 @@
 extern const word kPageSizeInWords;
 extern const word kPageMask;
 
+static constexpr intptr_t kObjectAlignment = ObjectAlignment::kObjectAlignment;
+
+inline intptr_t RoundedAllocationSize(intptr_t size) {
+  return Utils::RoundUp(size, kObjectAlignment);
+}
 // Information about frame_layout that compiler should be targeting.
 extern FrameLayout frame_layout;
 
@@ -376,11 +382,15 @@
  public:
   // Return offset to the element with the given [index] in the object pool.
   static word element_offset(intptr_t index);
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Class : public AllStatic {
  public:
-  static word type_arguments_field_offset_in_words_offset();
+  static word host_type_arguments_field_offset_in_words_offset();
+
+  static word target_type_arguments_field_offset_in_words_offset();
 
   static word declaration_type_offset();
 
@@ -392,6 +402,10 @@
   // The value used if no type arguments vector is present.
   static const word kNoTypeArguments;
 
+  static word InstanceSize();
+
+  static word NextFieldOffset();
+
   // Return class id of the given class on the target.
   static classid_t GetId(const dart::Class& handle);
 
@@ -418,6 +432,7 @@
   static word DataOffsetFor(intptr_t cid);
   static word ElementSizeFor(intptr_t cid);
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Function : public AllStatic {
@@ -425,6 +440,8 @@
   static word code_offset();
   static word entry_point_offset(CodeEntryKind kind = CodeEntryKind::kNormal);
   static word usage_counter_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class ICData : public AllStatic {
@@ -443,6 +460,8 @@
   static word EntryPointIndexFor(word num_args);
   static word NumArgsTestedShift();
   static word NumArgsTestedMask();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class MegamorphicCache : public AllStatic {
@@ -451,6 +470,8 @@
   static word mask_offset();
   static word buckets_offset();
   static word arguments_descriptor_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class SingleTargetCache : public AllStatic {
@@ -459,6 +480,8 @@
   static word upper_limit_offset();
   static word entry_point_offset();
   static word target_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Array : public AllStatic {
@@ -469,6 +492,8 @@
   static word type_arguments_offset();
   static word length_offset();
   static word element_offset(intptr_t index);
+  static word InstanceSize();
+  static word NextFieldOffset();
 
   static const word kMaxElements;
   static const word kMaxNewSpaceElements;
@@ -480,6 +505,7 @@
   static word type_arguments_offset();
   static word length_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TypedDataBase : public AllStatic {
@@ -487,23 +513,29 @@
   static word data_field_offset();
   static word length_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TypedData : public AllStatic {
  public:
   static word data_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class ExternalTypedData : public AllStatic {
  public:
   static word data_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TypedDataView : public AllStatic {
  public:
   static word offset_in_bytes_offset();
   static word data_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class LinkedHashMap : public AllStatic {
@@ -513,7 +545,9 @@
   static word hash_mask_offset();
   static word used_data_offset();
   static word deleted_keys_offset();
+  static word type_arguments_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class ArgumentsDescriptor : public AllStatic {
@@ -530,6 +564,9 @@
 class Pointer : public AllStatic {
  public:
   static word c_memory_address_offset();
+  static word type_arguments_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class AbstractType : public AllStatic {
@@ -545,11 +582,15 @@
   static word signature_offset();
   static word type_class_id_offset();
   static word nullability_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TypeRef : public AllStatic {
  public:
   static word type_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Nullability : public AllStatic {
@@ -564,12 +605,14 @@
  public:
   static word value_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Mint : public AllStatic {
  public:
   static word value_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class String : public AllStatic {
@@ -579,43 +622,265 @@
   static word hash_offset();
   static word length_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class OneByteString : public AllStatic {
  public:
   static word data_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TwoByteString : public AllStatic {
  public:
   static word data_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class ExternalOneByteString : public AllStatic {
  public:
   static word external_data_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class ExternalTwoByteString : public AllStatic {
  public:
   static word external_data_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Int32x4 : public AllStatic {
  public:
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Float32x4 : public AllStatic {
  public:
   static word value_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Float64x2 : public AllStatic {
  public:
   static word value_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class DynamicLibrary : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class PatchClass : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class SignatureData : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class RedirectionData : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class FfiTrampolineData : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Script : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Library : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Namespace : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class KernelProgramInfo : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Bytecode : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class PcDescriptors : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class CodeSourceMap : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class CompressedStackMaps : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class LocalVarDescriptors : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class ExceptionHandlers : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class ContextScope : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class ParameterTypeCheck : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class UnlinkedCall : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class ApiError : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class LanguageError : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class UnhandledException : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class UnwindError : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Bool : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class TypeParameter : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class LibraryPrefix : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Capability : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class ReceivePort : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class SendPort : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class TransferableTypedData : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class StackTrace : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Integer : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Smi : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class WeakProperty : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class MirrorReference : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class Number : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TimelineStream : public AllStatic {
@@ -633,6 +898,8 @@
   static word expected_cid_offset();
   static word entrypoint_offset();
   static word target_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Thread : public AllStatic {
@@ -803,6 +1070,8 @@
   static const word kPolymorphicEntryOffsetAOT;
   static word HeaderSize();
   static word UnalignedHeaderSize();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Code : public AllStatic {
@@ -815,6 +1084,8 @@
   static word entry_point_offset(CodeEntryKind kind = CodeEntryKind::kNormal);
   static word saved_instructions_offset();
   static word owner_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class SubtypeTestCache : public AllStatic {
@@ -829,6 +1100,8 @@
   static const word kInstanceParentFunctionTypeArguments;
   static const word kInstanceDelayedFunctionTypeArguments;
   static const word kTestResult;
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Context : public AllStatic {
@@ -838,6 +1111,8 @@
   static word num_variables_offset();
   static word variable_offset(word i);
   static word InstanceSize(word n);
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Closure : public AllStatic {
@@ -849,6 +1124,13 @@
   static word instantiator_type_arguments_offset();
   static word hash_offset();
   static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class ClosureData : public AllStatic {
+ public:
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class HeapPage : public AllStatic {
@@ -883,11 +1165,15 @@
 class RegExp : public AllStatic {
  public:
   static word function_offset(classid_t cid, bool sticky);
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class UserTag : public AllStatic {
  public:
   static word tag_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class Symbols : public AllStatic {
@@ -906,12 +1192,34 @@
   static word is_nullable_offset();
   static word static_value_offset();
   static word kind_bits_offset();
+  static word InstanceSize();
+  static word NextFieldOffset();
 };
 
 class TypeArguments : public AllStatic {
  public:
   static word instantiations_offset();
   static word type_at_offset(intptr_t i);
+  static word InstanceSize();
+  static word NextFieldOffset();
+};
+
+class FreeListElement : public AllStatic {
+ public:
+  class FakeInstance : public AllStatic {
+   public:
+    static word InstanceSize();
+    static word NextFieldOffset();
+  };
+};
+
+class ForwardingCorpse : public AllStatic {
+ public:
+  class FakeInstance : public AllStatic {
+   public:
+    static word InstanceSize();
+    static word NextFieldOffset();
+  };
 };
 
 class FieldTable : public AllStatic {
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 5617457..8774638 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -74,10 +74,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     56;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    102;
+    90;
 static constexpr dart::compiler::target::word Class_super_type_offset = 44;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 92;
+    Class_host_type_arguments_field_offset_in_words_offset = 104;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 8;
@@ -111,7 +111,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     24;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 46;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 60;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 54;
 static constexpr dart::compiler::target::word Function_code_offset = 44;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     4, 8};
@@ -146,6 +146,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     12;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 8;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     20;
 static constexpr dart::compiler::target::word
@@ -171,6 +173,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     8;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -371,25 +374,100 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         628, 632, 636, 640, 644, -1, 648, 652,
         656, 660, -1,  -1,  -1,  -1, -1,  -1};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
+static constexpr dart::compiler::target::word Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word Array_header_size = 12;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 8;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 48;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 128;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 20;
+static constexpr dart::compiler::target::word Code_InstanceSize = 96;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 8;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word Context_InstanceSize = 12;
 static constexpr dart::compiler::target::word Context_header_size = 12;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 12;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 8;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Field_InstanceSize = 64;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 88;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 32;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 8;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     8;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
-static constexpr dart::compiler::target::word String_InstanceSize = 12;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
-static constexpr dart::compiler::target::word Object_InstanceSize = 4;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    16;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 4;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 28;
+static constexpr dart::compiler::target::word Library_InstanceSize = 76;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 20;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 28;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 20;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
+static constexpr dart::compiler::target::word Number_InstanceSize = 4;
+static constexpr dart::compiler::target::word Object_InstanceSize = 4;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 8;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 24;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 8;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 12;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 12;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 16;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 60;
+static constexpr dart::compiler::target::word Script_InstanceSize = 56;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 12;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 4;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word String_InstanceSize = 12;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 4;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word Type_InstanceSize = 36;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 20;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 12;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_ARM)
 
 #if defined(TARGET_ARCH_X64)
@@ -451,10 +529,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     112;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    182;
+    170;
 static constexpr dart::compiler::target::word Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 172;
+    Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 16;
@@ -488,7 +566,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     48;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 82;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 104;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 90;
 static constexpr dart::compiler::target::word Function_code_offset = 88;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     8, 16};
@@ -523,6 +601,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     24;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 16;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     40;
 static constexpr dart::compiler::target::word
@@ -548,6 +628,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     16;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
@@ -750,25 +831,101 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         1248, 1256, 1264, 1272, -1,   -1,   1280, 1288,
         1296, 1304, 1312, -1,   1320, 1328, -1,   -1};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 88;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 208;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word Code_InstanceSize = 176;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 16;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Field_InstanceSize = 112;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 144;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 56;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 12;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     12;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
-static constexpr dart::compiler::target::word String_InstanceSize = 16;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    32;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 8;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    128;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 48;
+static constexpr dart::compiler::target::word Library_InstanceSize = 144;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 40;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 56;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
+static constexpr dart::compiler::target::word Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 48;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 32;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 24;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word String_InstanceSize = 16;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 40;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
 #endif  // defined(TARGET_ARCH_X64)
 
 #if defined(TARGET_ARCH_IA32)
@@ -828,10 +985,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     56;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    102;
+    90;
 static constexpr dart::compiler::target::word Class_super_type_offset = 44;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 92;
+    Class_host_type_arguments_field_offset_in_words_offset = 104;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 8;
@@ -865,7 +1022,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     24;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 46;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 60;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 54;
 static constexpr dart::compiler::target::word Function_code_offset = 44;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     4, 8};
@@ -900,6 +1057,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     12;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 8;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     20;
 static constexpr dart::compiler::target::word
@@ -925,6 +1084,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     8;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -1121,25 +1281,100 @@
 static constexpr dart::compiler::target::word ClassTable_element_size = 1;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
+static constexpr dart::compiler::target::word Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word Array_header_size = 12;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 8;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 48;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 128;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 20;
+static constexpr dart::compiler::target::word Code_InstanceSize = 96;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 8;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word Context_InstanceSize = 12;
 static constexpr dart::compiler::target::word Context_header_size = 12;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 12;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 8;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Field_InstanceSize = 64;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 88;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 32;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 8;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     8;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
-static constexpr dart::compiler::target::word String_InstanceSize = 12;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
-static constexpr dart::compiler::target::word Object_InstanceSize = 4;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    16;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 4;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 28;
+static constexpr dart::compiler::target::word Library_InstanceSize = 76;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 20;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 28;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 20;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
+static constexpr dart::compiler::target::word Number_InstanceSize = 4;
+static constexpr dart::compiler::target::word Object_InstanceSize = 4;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 8;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 24;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 8;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 12;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 12;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 16;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 60;
+static constexpr dart::compiler::target::word Script_InstanceSize = 56;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 12;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 4;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word String_InstanceSize = 12;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 4;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word Type_InstanceSize = 36;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 20;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 12;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_IA32)
 
 #if defined(TARGET_ARCH_ARM64)
@@ -1201,10 +1436,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     112;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    182;
+    170;
 static constexpr dart::compiler::target::word Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 172;
+    Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 16;
@@ -1238,7 +1473,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     48;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 82;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 104;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 90;
 static constexpr dart::compiler::target::word Function_code_offset = 88;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     8, 16};
@@ -1273,6 +1508,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     24;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 16;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     40;
 static constexpr dart::compiler::target::word
@@ -1298,6 +1535,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     16;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
@@ -1501,25 +1739,101 @@
         1248, 1256, 1264, 1272, 1280, 1288, 1296, 1304, 1312, 1320, 1328,
         1336, 1344, 1352, 1360, -1,   -1,   -1,   -1,   1368, 1376, 1384,
         -1,   1392, 1400, 1408, -1,   -1,   -1,   -1,   -1,   -1};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 88;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 208;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word Code_InstanceSize = 176;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 16;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Field_InstanceSize = 112;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 144;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 56;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 12;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     12;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
-static constexpr dart::compiler::target::word String_InstanceSize = 16;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    32;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 8;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    128;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 48;
+static constexpr dart::compiler::target::word Library_InstanceSize = 144;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 40;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 56;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
+static constexpr dart::compiler::target::word Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 48;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 32;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 24;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word String_InstanceSize = 16;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 40;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
 #endif  // defined(TARGET_ARCH_ARM64)
 
 #else  // !defined(PRODUCT)
@@ -1581,10 +1895,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     56;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    102;
+    90;
 static constexpr dart::compiler::target::word Class_super_type_offset = 44;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 92;
+    Class_host_type_arguments_field_offset_in_words_offset = 104;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 8;
@@ -1616,7 +1930,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     24;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 46;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 60;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 54;
 static constexpr dart::compiler::target::word Function_code_offset = 44;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     4, 8};
@@ -1650,6 +1964,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     12;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 8;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     20;
 static constexpr dart::compiler::target::word
@@ -1675,6 +1991,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     8;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -1872,25 +2189,100 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         628, 632, 636, 640, 644, -1, 648, 652,
         656, 660, -1,  -1,  -1,  -1, -1,  -1};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
+static constexpr dart::compiler::target::word Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word Array_header_size = 12;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 8;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 44;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 128;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 20;
+static constexpr dart::compiler::target::word Code_InstanceSize = 76;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 8;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word Context_InstanceSize = 12;
 static constexpr dart::compiler::target::word Context_header_size = 12;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 12;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 8;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Field_InstanceSize = 64;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 88;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 32;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 8;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     8;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
-static constexpr dart::compiler::target::word String_InstanceSize = 12;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
-static constexpr dart::compiler::target::word Object_InstanceSize = 4;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    16;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 4;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 28;
+static constexpr dart::compiler::target::word Library_InstanceSize = 76;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 20;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 28;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 20;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
+static constexpr dart::compiler::target::word Number_InstanceSize = 4;
+static constexpr dart::compiler::target::word Object_InstanceSize = 4;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 8;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 24;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 8;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 12;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 12;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 16;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 60;
+static constexpr dart::compiler::target::word Script_InstanceSize = 56;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 12;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 4;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word String_InstanceSize = 12;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 4;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word Type_InstanceSize = 36;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 20;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 12;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_ARM)
 
 #if defined(TARGET_ARCH_X64)
@@ -1952,10 +2344,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     112;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    182;
+    170;
 static constexpr dart::compiler::target::word Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 172;
+    Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 16;
@@ -1987,7 +2379,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     48;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 82;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 104;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 90;
 static constexpr dart::compiler::target::word Function_code_offset = 88;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     8, 16};
@@ -2021,6 +2413,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     24;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 16;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     40;
 static constexpr dart::compiler::target::word
@@ -2046,6 +2440,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     16;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
@@ -2245,25 +2640,101 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         1248, 1256, 1264, 1272, -1,   -1,   1280, 1288,
         1296, 1304, 1312, -1,   1320, 1328, -1,   -1};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 80;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 208;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word Code_InstanceSize = 144;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 16;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Field_InstanceSize = 112;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 144;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 56;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 12;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     12;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
-static constexpr dart::compiler::target::word String_InstanceSize = 16;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    32;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 8;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    128;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 48;
+static constexpr dart::compiler::target::word Library_InstanceSize = 144;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 40;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 56;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
+static constexpr dart::compiler::target::word Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 48;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 32;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 24;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word String_InstanceSize = 16;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 40;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
 #endif  // defined(TARGET_ARCH_X64)
 
 #if defined(TARGET_ARCH_IA32)
@@ -2323,10 +2794,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     56;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    102;
+    90;
 static constexpr dart::compiler::target::word Class_super_type_offset = 44;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 92;
+    Class_host_type_arguments_field_offset_in_words_offset = 104;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 8;
@@ -2358,7 +2829,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     24;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 46;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 60;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 54;
 static constexpr dart::compiler::target::word Function_code_offset = 44;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     4, 8};
@@ -2392,6 +2863,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     12;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 8;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     20;
 static constexpr dart::compiler::target::word
@@ -2417,6 +2890,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     8;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -2610,25 +3084,100 @@
 static constexpr dart::compiler::target::word TypeArguments_element_size = 4;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
+static constexpr dart::compiler::target::word Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word Array_header_size = 12;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 8;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 44;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 128;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 20;
+static constexpr dart::compiler::target::word Code_InstanceSize = 76;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 8;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word Context_InstanceSize = 12;
 static constexpr dart::compiler::target::word Context_header_size = 12;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 12;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 8;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Field_InstanceSize = 64;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 88;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 32;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 8;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     8;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
-static constexpr dart::compiler::target::word String_InstanceSize = 12;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
-static constexpr dart::compiler::target::word Object_InstanceSize = 4;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 28;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    16;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 4;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 28;
+static constexpr dart::compiler::target::word Library_InstanceSize = 76;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 20;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 28;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 20;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 16;
+static constexpr dart::compiler::target::word Number_InstanceSize = 4;
+static constexpr dart::compiler::target::word Object_InstanceSize = 4;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 8;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 24;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 8;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 12;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 12;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 16;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 60;
+static constexpr dart::compiler::target::word Script_InstanceSize = 56;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 12;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 4;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word String_InstanceSize = 12;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 4;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 12;
+static constexpr dart::compiler::target::word Type_InstanceSize = 36;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 12;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 20;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 12;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_IA32)
 
 #if defined(TARGET_ARCH_ARM64)
@@ -2690,10 +3239,10 @@
 static constexpr dart::compiler::target::word Class_declaration_type_offset =
     112;
 static constexpr dart::compiler::target::word Class_num_type_arguments_offset =
-    182;
+    170;
 static constexpr dart::compiler::target::word Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    Class_type_arguments_field_offset_in_words_offset = 172;
+    Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word ClassTable_table_offset = 16;
@@ -2725,7 +3274,7 @@
 static constexpr dart::compiler::target::word Field_guarded_list_length_offset =
     48;
 static constexpr dart::compiler::target::word Field_is_nullable_offset = 82;
-static constexpr dart::compiler::target::word Field_kind_bits_offset = 104;
+static constexpr dart::compiler::target::word Field_kind_bits_offset = 90;
 static constexpr dart::compiler::target::word Function_code_offset = 88;
 static constexpr dart::compiler::target::word Function_entry_point_offset[] = {
     8, 16};
@@ -2759,6 +3308,8 @@
 static constexpr dart::compiler::target::word LinkedHashMap_hash_mask_offset =
     24;
 static constexpr dart::compiler::target::word LinkedHashMap_index_offset = 16;
+static constexpr dart::compiler::target::word
+    LinkedHashMap_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word LinkedHashMap_used_data_offset =
     40;
 static constexpr dart::compiler::target::word
@@ -2784,6 +3335,7 @@
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word Pointer_c_memory_address_offset =
     16;
+static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
@@ -2984,25 +3536,101 @@
         1248, 1256, 1264, 1272, 1280, 1288, 1296, 1304, 1312, 1320, 1328,
         1336, 1344, 1352, 1360, -1,   -1,   -1,   -1,   1368, 1376, 1384,
         -1,   1392, 1400, 1408, -1,   -1,   -1,   -1,   -1,   -1};
+static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
+static constexpr dart::compiler::target::word Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word Bytecode_InstanceSize = 80;
+static constexpr dart::compiler::target::word Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word Class_InstanceSize = 208;
+static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word Code_InstanceSize = 144;
+static constexpr dart::compiler::target::word CodeSourceMap_InstanceSize = 16;
+static constexpr dart::compiler::target::word CompressedStackMaps_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word ContextScope_InstanceSize = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
+static constexpr dart::compiler::target::word ExceptionHandlers_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word ExternalTypedData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Field_InstanceSize = 112;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word Function_InstanceSize = 144;
+static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word ICData_InstanceSize = 56;
+static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Instructions_InstanceSize = 12;
 static constexpr dart::compiler::target::word Instructions_UnalignedHeaderSize =
     12;
 static constexpr dart::compiler::target::word Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
-static constexpr dart::compiler::target::word String_InstanceSize = 16;
-static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
-static constexpr dart::compiler::target::word Closure_InstanceSize = 56;
-static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
-    32;
-static constexpr dart::compiler::target::word Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word Integer_InstanceSize = 8;
+static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
+    128;
+static constexpr dart::compiler::target::word LanguageError_InstanceSize = 48;
+static constexpr dart::compiler::target::word Library_InstanceSize = 144;
+static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 40;
 static constexpr dart::compiler::target::word LinkedHashMap_InstanceSize = 56;
+static constexpr dart::compiler::target::word LocalVarDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word MegamorphicCache_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word MirrorReference_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeArguments_StructSize = 32;
+static constexpr dart::compiler::target::word Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word OneByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word ParameterTypeCheck_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word PatchClass_InstanceSize = 48;
+static constexpr dart::compiler::target::word PcDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word RedirectionData_InstanceSize = 32;
+static constexpr dart::compiler::target::word RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word SignatureData_InstanceSize = 24;
+static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word String_InstanceSize = 16;
+static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word TwoByteString_InstanceSize = 16;
+static constexpr dart::compiler::target::word Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word TypeArguments_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 72;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 40;
+static constexpr dart::compiler::target::word UnhandledException_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word UnlinkedCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
 #endif  // defined(TARGET_ARCH_ARM64)
 
 #endif  // !defined(PRODUCT)
@@ -3071,10 +3699,10 @@
 static constexpr dart::compiler::target::word
     AOT_Class_declaration_type_offset = 56;
 static constexpr dart::compiler::target::word
-    AOT_Class_num_type_arguments_offset = 102;
+    AOT_Class_num_type_arguments_offset = 90;
 static constexpr dart::compiler::target::word AOT_Class_super_type_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Class_type_arguments_field_offset_in_words_offset = 92;
+    AOT_Class_host_type_arguments_field_offset_in_words_offset = 104;
 static constexpr dart::compiler::target::word
     AOT_ClassTable_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word AOT_ClassTable_table_offset = 8;
@@ -3141,6 +3769,8 @@
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_index_offset =
     8;
 static constexpr dart::compiler::target::word
+    AOT_LinkedHashMap_type_arguments_offset = 4;
+static constexpr dart::compiler::target::word
     AOT_LinkedHashMap_used_data_offset = 20;
 static constexpr dart::compiler::target::word
     AOT_MarkingStackBlock_pointers_offset = 8;
@@ -3172,6 +3802,8 @@
 static constexpr dart::compiler::target::word
     AOT_Pointer_c_memory_address_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_Pointer_type_arguments_offset = 4;
+static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_lower_limit_offset = 12;
@@ -3387,28 +4019,120 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         628, 632, 636, 640, 644, -1, 648, 652,
         656, 660, -1,  -1,  -1,  -1, -1,  -1};
+static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 12;
+static constexpr dart::compiler::target::word AOT_Bool_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Bytecode_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Class_InstanceSize = 112;
+static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_ClosureData_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_Code_InstanceSize = 88;
+static constexpr dart::compiler::target::word AOT_CodeSourceMap_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_CompressedStackMaps_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Context_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_Context_header_size = 12;
+static constexpr dart::compiler::target::word AOT_ContextScope_InstanceSize =
+    12;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_ExceptionHandlers_InstanceSize = 12;
+static constexpr dart::compiler::target::word
+    AOT_ExternalOneByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTwoByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word
+    AOT_FfiTrampolineData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
+static constexpr dart::compiler::target::word
+    AOT_GrowableObjectArray_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_ICData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_Instructions_InstanceSize = 8;
 static constexpr dart::compiler::target::word
     AOT_Instructions_UnalignedHeaderSize = 8;
 static constexpr dart::compiler::target::word AOT_Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
-    16;
-static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
-static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 12;
-static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 4;
-static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
-    12;
-static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_Integer_InstanceSize = 4;
 static constexpr dart::compiler::target::word
-    AOT_GrowableObjectArray_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 4;
+    AOT_KernelProgramInfo_InstanceSize = 64;
+static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
+    28;
+static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 72;
+static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
+    20;
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_InstanceSize =
     28;
+static constexpr dart::compiler::target::word
+    AOT_LocalVarDescriptors_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    AOT_MegamorphicCache_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_MirrorReference_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_MonomorphicSmiableCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Namespace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_ObjectPool_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_OneByteString_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_ParameterTypeCheck_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_PcDescriptors_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_ReceivePort_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_RedirectionData_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_RegExp_InstanceSize = 60;
+static constexpr dart::compiler::target::word AOT_Script_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SignatureData_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_SingleTargetCache_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Smi_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    AOT_TransferableTypedData_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_TwoByteString_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 36;
+static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word AOT_TypedDataView_InstanceSize =
+    20;
+static constexpr dart::compiler::target::word
+    AOT_UnhandledException_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_UnlinkedCall_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_UnwindError_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
+    16;
 #endif  // defined(TARGET_ARCH_ARM)
 
 #if defined(TARGET_ARCH_X64)
@@ -3473,10 +4197,10 @@
 static constexpr dart::compiler::target::word
     AOT_Class_declaration_type_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Class_num_type_arguments_offset = 182;
+    AOT_Class_num_type_arguments_offset = 170;
 static constexpr dart::compiler::target::word AOT_Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Class_type_arguments_field_offset_in_words_offset = 172;
+    AOT_Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     AOT_ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_ClassTable_table_offset = 16;
@@ -3543,6 +4267,8 @@
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_index_offset =
     16;
 static constexpr dart::compiler::target::word
+    AOT_LinkedHashMap_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_LinkedHashMap_used_data_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_MarkingStackBlock_pointers_offset = 16;
@@ -3574,6 +4300,8 @@
 static constexpr dart::compiler::target::word
     AOT_Pointer_c_memory_address_offset = 16;
 static constexpr dart::compiler::target::word
+    AOT_Pointer_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_lower_limit_offset = 24;
@@ -3790,28 +4518,121 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         1248, 1256, 1264, 1272, -1,   -1,   1280, 1288,
         1296, 1304, 1312, -1,   1320, 1328, -1,   -1};
+static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Bytecode_InstanceSize = 88;
+static constexpr dart::compiler::target::word AOT_Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Class_InstanceSize = 192;
+static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_Code_InstanceSize = 152;
+static constexpr dart::compiler::target::word AOT_CodeSourceMap_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_CompressedStackMaps_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_ContextScope_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ExceptionHandlers_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_FfiTrampolineData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 104;
+static constexpr dart::compiler::target::word
+    AOT_GrowableObjectArray_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_ICData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Instructions_InstanceSize =
+    12;
 static constexpr dart::compiler::target::word
     AOT_Instructions_UnalignedHeaderSize = 12;
 static constexpr dart::compiler::target::word AOT_Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
-    32;
-static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
-    24;
-static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Integer_InstanceSize = 8;
 static constexpr dart::compiler::target::word
-    AOT_GrowableObjectArray_InstanceSize = 32;
-static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+    AOT_KernelProgramInfo_InstanceSize = 128;
+static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 136;
+static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_InstanceSize =
     56;
+static constexpr dart::compiler::target::word
+    AOT_LocalVarDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_MegamorphicCache_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_MirrorReference_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
+    32;
+static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_OneByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ParameterTypeCheck_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_PcDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_RedirectionData_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word AOT_Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word AOT_SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SignatureData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    AOT_SingleTargetCache_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_TwoByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
+    72;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word AOT_TypedDataView_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_UnhandledException_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UnlinkedCall_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
+    32;
 #endif  // defined(TARGET_ARCH_X64)
 
 #if defined(TARGET_ARCH_IA32)
@@ -3879,10 +4700,10 @@
 static constexpr dart::compiler::target::word
     AOT_Class_declaration_type_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Class_num_type_arguments_offset = 182;
+    AOT_Class_num_type_arguments_offset = 170;
 static constexpr dart::compiler::target::word AOT_Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Class_type_arguments_field_offset_in_words_offset = 172;
+    AOT_Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     AOT_ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_ClassTable_table_offset = 16;
@@ -3949,6 +4770,8 @@
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_index_offset =
     16;
 static constexpr dart::compiler::target::word
+    AOT_LinkedHashMap_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_LinkedHashMap_used_data_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_MarkingStackBlock_pointers_offset = 16;
@@ -3980,6 +4803,8 @@
 static constexpr dart::compiler::target::word
     AOT_Pointer_c_memory_address_offset = 16;
 static constexpr dart::compiler::target::word
+    AOT_Pointer_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_lower_limit_offset = 24;
@@ -4197,28 +5022,121 @@
         1248, 1256, 1264, 1272, 1280, 1288, 1296, 1304, 1312, 1320, 1328,
         1336, 1344, 1352, 1360, -1,   -1,   -1,   -1,   1368, 1376, 1384,
         -1,   1392, 1400, 1408, -1,   -1,   -1,   -1,   -1,   -1};
+static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Bytecode_InstanceSize = 88;
+static constexpr dart::compiler::target::word AOT_Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Class_InstanceSize = 192;
+static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_Code_InstanceSize = 152;
+static constexpr dart::compiler::target::word AOT_CodeSourceMap_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_CompressedStackMaps_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_ContextScope_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ExceptionHandlers_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_FfiTrampolineData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 104;
+static constexpr dart::compiler::target::word
+    AOT_GrowableObjectArray_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_ICData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Instructions_InstanceSize =
+    12;
 static constexpr dart::compiler::target::word
     AOT_Instructions_UnalignedHeaderSize = 12;
 static constexpr dart::compiler::target::word AOT_Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
-    32;
-static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
-    24;
-static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Integer_InstanceSize = 8;
 static constexpr dart::compiler::target::word
-    AOT_GrowableObjectArray_InstanceSize = 32;
-static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+    AOT_KernelProgramInfo_InstanceSize = 128;
+static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 136;
+static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_InstanceSize =
     56;
+static constexpr dart::compiler::target::word
+    AOT_LocalVarDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_MegamorphicCache_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_MirrorReference_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
+    32;
+static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_OneByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ParameterTypeCheck_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_PcDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_RedirectionData_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word AOT_Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word AOT_SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SignatureData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    AOT_SingleTargetCache_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_TwoByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
+    72;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word AOT_TypedDataView_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_UnhandledException_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UnlinkedCall_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
+    32;
 #endif  // defined(TARGET_ARCH_ARM64)
 
 #else  // !defined(PRODUCT)
@@ -4285,10 +5203,10 @@
 static constexpr dart::compiler::target::word
     AOT_Class_declaration_type_offset = 56;
 static constexpr dart::compiler::target::word
-    AOT_Class_num_type_arguments_offset = 102;
+    AOT_Class_num_type_arguments_offset = 90;
 static constexpr dart::compiler::target::word AOT_Class_super_type_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Class_type_arguments_field_offset_in_words_offset = 92;
+    AOT_Class_host_type_arguments_field_offset_in_words_offset = 104;
 static constexpr dart::compiler::target::word
     AOT_ClassTable_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word AOT_ClassTable_table_offset = 8;
@@ -4351,6 +5269,8 @@
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_index_offset =
     8;
 static constexpr dart::compiler::target::word
+    AOT_LinkedHashMap_type_arguments_offset = 4;
+static constexpr dart::compiler::target::word
     AOT_LinkedHashMap_used_data_offset = 20;
 static constexpr dart::compiler::target::word
     AOT_MarkingStackBlock_pointers_offset = 8;
@@ -4382,6 +5302,8 @@
 static constexpr dart::compiler::target::word
     AOT_Pointer_c_memory_address_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_Pointer_type_arguments_offset = 4;
+static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_lower_limit_offset = 12;
@@ -4594,28 +5516,120 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         628, 632, 636, 640, 644, -1, 648, 652,
         656, 660, -1,  -1,  -1,  -1, -1,  -1};
+static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 12;
+static constexpr dart::compiler::target::word AOT_Bool_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Bytecode_InstanceSize = 44;
+static constexpr dart::compiler::target::word AOT_Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Class_InstanceSize = 112;
+static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_ClosureData_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_Code_InstanceSize = 60;
+static constexpr dart::compiler::target::word AOT_CodeSourceMap_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_CompressedStackMaps_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Context_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_Context_header_size = 12;
+static constexpr dart::compiler::target::word AOT_ContextScope_InstanceSize =
+    12;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_ExceptionHandlers_InstanceSize = 12;
+static constexpr dart::compiler::target::word
+    AOT_ExternalOneByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTwoByteString_InstanceSize = 20;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word
+    AOT_FfiTrampolineData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
+static constexpr dart::compiler::target::word
+    AOT_GrowableObjectArray_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_ICData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_Instructions_InstanceSize = 8;
 static constexpr dart::compiler::target::word
     AOT_Instructions_UnalignedHeaderSize = 8;
 static constexpr dart::compiler::target::word AOT_Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
-    16;
-static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
-static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 12;
-static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 4;
-static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
-    12;
-static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_Integer_InstanceSize = 4;
 static constexpr dart::compiler::target::word
-    AOT_GrowableObjectArray_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 4;
+    AOT_KernelProgramInfo_InstanceSize = 64;
+static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
+    28;
+static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 72;
+static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
+    20;
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_InstanceSize =
     28;
+static constexpr dart::compiler::target::word
+    AOT_LocalVarDescriptors_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    AOT_MegamorphicCache_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_MirrorReference_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_MonomorphicSmiableCall_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Namespace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_ObjectPool_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_OneByteString_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_ParameterTypeCheck_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_PcDescriptors_InstanceSize =
+    8;
+static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_ReceivePort_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_RedirectionData_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_RegExp_InstanceSize = 60;
+static constexpr dart::compiler::target::word AOT_Script_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SignatureData_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_SingleTargetCache_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Smi_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_InstanceSize = 8;
+static constexpr dart::compiler::target::word
+    AOT_TransferableTypedData_InstanceSize = 4;
+static constexpr dart::compiler::target::word AOT_TwoByteString_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 36;
+static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
+    12;
+static constexpr dart::compiler::target::word AOT_TypedDataView_InstanceSize =
+    20;
+static constexpr dart::compiler::target::word
+    AOT_UnhandledException_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_UnlinkedCall_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_UnwindError_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
+    16;
 #endif  // defined(TARGET_ARCH_ARM)
 
 #if defined(TARGET_ARCH_X64)
@@ -4680,10 +5694,10 @@
 static constexpr dart::compiler::target::word
     AOT_Class_declaration_type_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Class_num_type_arguments_offset = 182;
+    AOT_Class_num_type_arguments_offset = 170;
 static constexpr dart::compiler::target::word AOT_Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Class_type_arguments_field_offset_in_words_offset = 172;
+    AOT_Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     AOT_ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_ClassTable_table_offset = 16;
@@ -4746,6 +5760,8 @@
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_index_offset =
     16;
 static constexpr dart::compiler::target::word
+    AOT_LinkedHashMap_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_LinkedHashMap_used_data_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_MarkingStackBlock_pointers_offset = 16;
@@ -4777,6 +5793,8 @@
 static constexpr dart::compiler::target::word
     AOT_Pointer_c_memory_address_offset = 16;
 static constexpr dart::compiler::target::word
+    AOT_Pointer_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_lower_limit_offset = 24;
@@ -4990,28 +6008,121 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         1248, 1256, 1264, 1272, -1,   -1,   1280, 1288,
         1296, 1304, 1312, -1,   1320, 1328, -1,   -1};
+static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Bytecode_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Class_InstanceSize = 192;
+static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_Code_InstanceSize = 120;
+static constexpr dart::compiler::target::word AOT_CodeSourceMap_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_CompressedStackMaps_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_ContextScope_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ExceptionHandlers_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_FfiTrampolineData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 104;
+static constexpr dart::compiler::target::word
+    AOT_GrowableObjectArray_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_ICData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Instructions_InstanceSize =
+    12;
 static constexpr dart::compiler::target::word
     AOT_Instructions_UnalignedHeaderSize = 12;
 static constexpr dart::compiler::target::word AOT_Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
-    32;
-static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
-    24;
-static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Integer_InstanceSize = 8;
 static constexpr dart::compiler::target::word
-    AOT_GrowableObjectArray_InstanceSize = 32;
-static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+    AOT_KernelProgramInfo_InstanceSize = 128;
+static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 136;
+static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_InstanceSize =
     56;
+static constexpr dart::compiler::target::word
+    AOT_LocalVarDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_MegamorphicCache_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_MirrorReference_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
+    32;
+static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_OneByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ParameterTypeCheck_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_PcDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_RedirectionData_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word AOT_Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word AOT_SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SignatureData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    AOT_SingleTargetCache_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_TwoByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
+    72;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word AOT_TypedDataView_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_UnhandledException_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UnlinkedCall_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
+    32;
 #endif  // defined(TARGET_ARCH_X64)
 
 #if defined(TARGET_ARCH_IA32)
@@ -5079,10 +6190,10 @@
 static constexpr dart::compiler::target::word
     AOT_Class_declaration_type_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Class_num_type_arguments_offset = 182;
+    AOT_Class_num_type_arguments_offset = 170;
 static constexpr dart::compiler::target::word AOT_Class_super_type_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Class_type_arguments_field_offset_in_words_offset = 172;
+    AOT_Class_host_type_arguments_field_offset_in_words_offset = 184;
 static constexpr dart::compiler::target::word
     AOT_ClassTable_shared_class_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_ClassTable_table_offset = 16;
@@ -5145,6 +6256,8 @@
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_index_offset =
     16;
 static constexpr dart::compiler::target::word
+    AOT_LinkedHashMap_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_LinkedHashMap_used_data_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_MarkingStackBlock_pointers_offset = 16;
@@ -5176,6 +6289,8 @@
 static constexpr dart::compiler::target::word
     AOT_Pointer_c_memory_address_offset = 16;
 static constexpr dart::compiler::target::word
+    AOT_Pointer_type_arguments_offset = 8;
+static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_entry_point_offset = 16;
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_lower_limit_offset = 24;
@@ -5390,28 +6505,121 @@
         1248, 1256, 1264, 1272, 1280, 1288, 1296, 1304, 1312, 1320, 1328,
         1336, 1344, 1352, 1360, -1,   -1,   -1,   -1,   1368, 1376, 1384,
         -1,   1392, 1400, 1408, -1,   -1,   -1,   -1,   -1,   -1};
+static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Bool_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Bytecode_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Capability_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_Class_InstanceSize = 192;
+static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_ClosureData_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_Code_InstanceSize = 120;
+static constexpr dart::compiler::target::word AOT_CodeSourceMap_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_CompressedStackMaps_InstanceSize = 12;
+static constexpr dart::compiler::target::word AOT_Context_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_ContextScope_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ExceptionHandlers_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_ExternalOneByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTwoByteString_InstanceSize = 32;
+static constexpr dart::compiler::target::word
+    AOT_ExternalTypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word
+    AOT_FfiTrampolineData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 104;
+static constexpr dart::compiler::target::word
+    AOT_GrowableObjectArray_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_ICData_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Instructions_InstanceSize =
+    12;
 static constexpr dart::compiler::target::word
     AOT_Instructions_UnalignedHeaderSize = 12;
 static constexpr dart::compiler::target::word AOT_Int32x4_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
-    32;
-static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
-static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
-    24;
-static constexpr dart::compiler::target::word AOT_Closure_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Integer_InstanceSize = 8;
 static constexpr dart::compiler::target::word
-    AOT_GrowableObjectArray_InstanceSize = 32;
-static constexpr dart::compiler::target::word AOT_Instance_InstanceSize = 8;
+    AOT_KernelProgramInfo_InstanceSize = 128;
+static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
+    48;
+static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 136;
+static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_LinkedHashMap_InstanceSize =
     56;
+static constexpr dart::compiler::target::word
+    AOT_LocalVarDescriptors_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_MegamorphicCache_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Mint_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_MirrorReference_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_MonomorphicSmiableCall_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Namespace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
+    32;
+static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_ObjectPool_InstanceSize = 16;
+static constexpr dart::compiler::target::word AOT_OneByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_ParameterTypeCheck_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_PcDescriptors_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_ReceivePort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_RedirectionData_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_RegExp_InstanceSize = 120;
+static constexpr dart::compiler::target::word AOT_Script_InstanceSize = 96;
+static constexpr dart::compiler::target::word AOT_SendPort_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SignatureData_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word
+    AOT_SingleTargetCache_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_Smi_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_InstanceSize = 16;
+static constexpr dart::compiler::target::word
+    AOT_TransferableTypedData_InstanceSize = 8;
+static constexpr dart::compiler::target::word AOT_TwoByteString_InstanceSize =
+    16;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 64;
+static constexpr dart::compiler::target::word AOT_TypeArguments_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
+    72;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
+static constexpr dart::compiler::target::word AOT_TypedData_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
+    24;
+static constexpr dart::compiler::target::word AOT_TypedDataView_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_UnhandledException_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UnlinkedCall_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_UnwindError_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
+    32;
 #endif  // defined(TARGET_ARCH_ARM64)
 
 #endif  // !defined(PRODUCT)
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index 3c243bb..296daf4 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -64,7 +64,7 @@
   FIELD(Class, declaration_type_offset)                                        \
   FIELD(Class, num_type_arguments_offset)                                      \
   FIELD(Class, super_type_offset)                                              \
-  FIELD(Class, type_arguments_field_offset_in_words_offset)                    \
+  FIELD(Class, host_type_arguments_field_offset_in_words_offset)               \
   FIELD(ClassTable, shared_class_table_offset)                                 \
   FIELD(ClassTable, table_offset)                                              \
   NOT_IN_PRODUCT(FIELD(SharedClassTable, class_heap_stats_table_offset))       \
@@ -115,6 +115,7 @@
   FIELD(LinkedHashMap, deleted_keys_offset)                                    \
   FIELD(LinkedHashMap, hash_mask_offset)                                       \
   FIELD(LinkedHashMap, index_offset)                                           \
+  FIELD(LinkedHashMap, type_arguments_offset)                                  \
   FIELD(LinkedHashMap, used_data_offset)                                       \
   FIELD(MarkingStackBlock, pointers_offset)                                    \
   FIELD(MarkingStackBlock, top_offset)                                         \
@@ -131,6 +132,7 @@
   FIELD(ObjectStore, string_type_offset)                                       \
   FIELD(OneByteString, data_offset)                                            \
   FIELD(Pointer, c_memory_address_offset)                                      \
+  FIELD(Pointer, type_arguments_offset)                                        \
   FIELD(SingleTargetCache, entry_point_offset)                                 \
   FIELD(SingleTargetCache, lower_limit_offset)                                 \
   FIELD(SingleTargetCache, target_offset)                                      \
@@ -251,22 +253,84 @@
       Thread, write_barrier_wrappers_thread_offset, Register, 0,               \
       kNumberOfCpuRegisters - 1,                                               \
       [](Register reg) { return (kDartAvailableCpuRegs & (1 << reg)) != 0; })) \
+                                                                               \
+  SIZEOF(ApiError, InstanceSize, RawApiError)                                  \
+  SIZEOF(Array, InstanceSize, RawArray)                                        \
   SIZEOF(Array, header_size, RawArray)                                         \
+  SIZEOF(Bool, InstanceSize, RawBool)                                          \
+  SIZEOF(Bytecode, InstanceSize, RawBytecode)                                  \
+  SIZEOF(Capability, InstanceSize, RawCapability)                              \
+  SIZEOF(Class, InstanceSize, RawClass)                                        \
+  SIZEOF(Closure, InstanceSize, RawClosure)                                    \
+  SIZEOF(ClosureData, InstanceSize, RawClosureData)                            \
+  SIZEOF(Code, InstanceSize, RawCode)                                          \
+  SIZEOF(CodeSourceMap, InstanceSize, RawCodeSourceMap)                        \
+  SIZEOF(CompressedStackMaps, InstanceSize, RawCompressedStackMaps)            \
+  SIZEOF(Context, InstanceSize, RawContext)                                    \
   SIZEOF(Context, header_size, RawContext)                                     \
+  SIZEOF(ContextScope, InstanceSize, RawContextScope)                          \
   SIZEOF(Double, InstanceSize, RawDouble)                                      \
+  SIZEOF(DynamicLibrary, InstanceSize, RawDynamicLibrary)                      \
+  SIZEOF(ExceptionHandlers, InstanceSize, RawExceptionHandlers)                \
+  SIZEOF(ExternalOneByteString, InstanceSize, RawExternalOneByteString)        \
+  SIZEOF(ExternalTwoByteString, InstanceSize, RawExternalTwoByteString)        \
+  SIZEOF(ExternalTypedData, InstanceSize, RawExternalTypedData)                \
+  SIZEOF(FfiTrampolineData, InstanceSize, RawFfiTrampolineData)                \
+  SIZEOF(Field, InstanceSize, RawField)                                        \
   SIZEOF(Float32x4, InstanceSize, RawFloat32x4)                                \
   SIZEOF(Float64x2, InstanceSize, RawFloat64x2)                                \
+  SIZEOF(Function, InstanceSize, RawFunction)                                  \
+  SIZEOF(GrowableObjectArray, InstanceSize, RawGrowableObjectArray)            \
+  SIZEOF(ICData, InstanceSize, RawICData)                                      \
+  SIZEOF(Instance, InstanceSize, RawInstance)                                  \
+  SIZEOF(Instructions, InstanceSize, RawInstructions)                          \
   SIZEOF(Instructions, UnalignedHeaderSize, RawInstructions)                   \
   SIZEOF(Int32x4, InstanceSize, RawInt32x4)                                    \
+  SIZEOF(Integer, InstanceSize, RawInteger)                                    \
+  SIZEOF(KernelProgramInfo, InstanceSize, RawKernelProgramInfo)                \
+  SIZEOF(LanguageError, InstanceSize, RawLanguageError)                        \
+  SIZEOF(Library, InstanceSize, RawLibrary)                                    \
+  SIZEOF(LibraryPrefix, InstanceSize, RawLibraryPrefix)                        \
+  SIZEOF(LinkedHashMap, InstanceSize, RawLinkedHashMap)                        \
+  SIZEOF(LocalVarDescriptors, InstanceSize, RawLocalVarDescriptors)            \
+  SIZEOF(MegamorphicCache, InstanceSize, RawMegamorphicCache)                  \
   SIZEOF(Mint, InstanceSize, RawMint)                                          \
+  SIZEOF(MirrorReference, InstanceSize, RawMirrorReference)                    \
+  SIZEOF(MonomorphicSmiableCall, InstanceSize, RawMonomorphicSmiableCall)      \
+  SIZEOF(Namespace, InstanceSize, RawNamespace)                                \
   SIZEOF(NativeArguments, StructSize, NativeArguments)                         \
-  SIZEOF(String, InstanceSize, RawString)                                      \
-  SIZEOF(TypedData, InstanceSize, RawTypedData)                                \
+  SIZEOF(Number, InstanceSize, RawNumber)                                      \
   SIZEOF(Object, InstanceSize, RawObject)                                      \
+  SIZEOF(ObjectPool, InstanceSize, RawObjectPool)                              \
+  SIZEOF(OneByteString, InstanceSize, RawOneByteString)                        \
+  SIZEOF(ParameterTypeCheck, InstanceSize, RawParameterTypeCheck)              \
+  SIZEOF(PatchClass, InstanceSize, RawPatchClass)                              \
+  SIZEOF(PcDescriptors, InstanceSize, RawPcDescriptors)                        \
+  SIZEOF(Pointer, InstanceSize, RawPointer)                                    \
+  SIZEOF(ReceivePort, InstanceSize, RawReceivePort)                            \
+  SIZEOF(RedirectionData, InstanceSize, RawRedirectionData)                    \
+  SIZEOF(RegExp, InstanceSize, RawRegExp)                                      \
+  SIZEOF(Script, InstanceSize, RawScript)                                      \
+  SIZEOF(SendPort, InstanceSize, RawSendPort)                                  \
+  SIZEOF(SignatureData, InstanceSize, RawSignatureData)                        \
+  SIZEOF(SingleTargetCache, InstanceSize, RawSingleTargetCache)                \
+  SIZEOF(Smi, InstanceSize, RawSmi)                                            \
+  SIZEOF(StackTrace, InstanceSize, RawStackTrace)                              \
+  SIZEOF(String, InstanceSize, RawString)                                      \
+  SIZEOF(SubtypeTestCache, InstanceSize, RawSubtypeTestCache)                  \
+  SIZEOF(TransferableTypedData, InstanceSize, RawTransferableTypedData)        \
+  SIZEOF(TwoByteString, InstanceSize, RawTwoByteString)                        \
+  SIZEOF(Type, InstanceSize, RawType)                                          \
+  SIZEOF(TypeArguments, InstanceSize, RawTypeArguments)                        \
+  SIZEOF(TypeParameter, InstanceSize, RawTypeParameter)                        \
+  SIZEOF(TypeRef, InstanceSize, RawTypeRef)                                    \
+  SIZEOF(TypedData, InstanceSize, RawTypedData)                                \
   SIZEOF(TypedDataBase, InstanceSize, RawTypedDataBase)                        \
-  SIZEOF(Closure, InstanceSize, RawClosure)                                    \
-  SIZEOF(GrowableObjectArray, InstanceSize, RawGrowableObjectArray)            \
-  SIZEOF(Instance, InstanceSize, RawInstance)                                  \
-  SIZEOF(LinkedHashMap, InstanceSize, RawLinkedHashMap)
+  SIZEOF(TypedDataView, InstanceSize, RawTypedDataView)                        \
+  SIZEOF(UnhandledException, InstanceSize, RawUnhandledException)              \
+  SIZEOF(UnlinkedCall, InstanceSize, RawUnlinkedCall)                          \
+  SIZEOF(UnwindError, InstanceSize, RawUnwindError)                            \
+  SIZEOF(UserTag, InstanceSize, RawUserTag)                                    \
+  SIZEOF(WeakProperty, InstanceSize, RawWeakProperty)
 
 #endif  // RUNTIME_VM_COMPILER_RUNTIME_OFFSETS_LIST_H_
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index b6f3c2b..0fdf071 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -2726,8 +2726,8 @@
       __ mov(kInstanceInstantiatorTypeArgumentsReg, Operand(kNullReg));
       __ ldr(R9,
              FieldAddress(
-                 R9,
-                 target::Class::type_arguments_field_offset_in_words_offset()));
+                 R9, target::Class::
+                         host_type_arguments_field_offset_in_words_offset()));
       __ CompareImmediate(R9, target::Class::kNoTypeArguments);
       __ b(&has_no_type_arguments, EQ);
       __ add(R9, kInstanceReg, Operand(R9, LSL, 2));
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index cab25a1..34d927a 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -2851,7 +2851,8 @@
       __ LoadClassById(R5, kInstanceCidOrFunction);
       __ mov(kInstanceInstantiatorTypeArgumentsReg, kNullReg);
       __ LoadFieldFromOffset(
-          R5, R5, target::Class::type_arguments_field_offset_in_words_offset(),
+          R5, R5,
+          target::Class::host_type_arguments_field_offset_in_words_offset(),
           kWord);
       __ CompareImmediate(R5, target::Class::kNoTypeArguments);
       __ b(&has_no_type_arguments, EQ);
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 6556b7d..6510cb5 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -2349,11 +2349,10 @@
       Label has_no_type_arguments;
       __ LoadClassById(EDI, kInstanceCidOrFunction);
       __ movl(kInstanceInstantiatorTypeArgumentsReg, raw_null);
-      __ movl(
-          EDI,
-          FieldAddress(
-              EDI,
-              target::Class::type_arguments_field_offset_in_words_offset()));
+      __ movl(EDI,
+              FieldAddress(
+                  EDI, target::Class::
+                           host_type_arguments_field_offset_in_words_offset()));
       __ cmpl(EDI, Immediate(target::Class::kNoTypeArguments));
       __ j(EQUAL, &has_no_type_arguments, Assembler::kNearJump);
       __ movl(kInstanceInstantiatorTypeArgumentsReg,
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 3920de2..a8cf49d 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -2807,11 +2807,10 @@
       Label has_no_type_arguments;
       __ LoadClassById(RDI, kInstanceCidOrFunction);
       __ movq(kInstanceInstantiatorTypeArgumentsReg, kNullReg);
-      __ movl(
-          RDI,
-          FieldAddress(
-              RDI,
-              target::Class::type_arguments_field_offset_in_words_offset()));
+      __ movl(RDI,
+              FieldAddress(
+                  RDI, target::Class::
+                           host_type_arguments_field_offset_in_words_offset()));
       __ cmpl(RDI, Immediate(target::Class::kNoTypeArguments));
       __ j(EQUAL, &has_no_type_arguments, Assembler::kNearJump);
       __ movq(kInstanceInstantiatorTypeArgumentsReg,
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 3399ca5..c44b0cc 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -123,8 +123,16 @@
   static Dart_EntropySource entropy_source_callback() {
     return entropy_source_callback_;
   }
+
+  // TODO(dartbug.com/40342): Delete these functions.
   static void set_non_nullable_flag(bool value) { non_nullable_flag_ = value; }
-  static bool non_nullable_flag() { return non_nullable_flag_; }
+  static bool non_nullable_flag() {
+#ifdef DART_BUILT_WITH_NNBD_FLAG
+    return true;
+#else
+    return non_nullable_flag_;
+#endif
+  }
 
  private:
   static void WaitForIsolateShutdown();
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index bc23cea..23a083a 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -4393,7 +4393,7 @@
   intptr_t header_size = sizeof(RawObject);
   EXPECT_EQ(
       Utils::RoundUp(((1 + 2) * kWordSize) + header_size, kObjectAlignment),
-      cls.instance_size());
+      cls.host_instance_size());
   EXPECT_EQ(kNumNativeFields, cls.num_native_fields());
 }
 
diff --git a/runtime/vm/datastream.h b/runtime/vm/datastream.h
index da4c450..77c74bc 100644
--- a/runtime/vm/datastream.h
+++ b/runtime/vm/datastream.h
@@ -72,7 +72,10 @@
     current_ += len;
   }
 
-  intptr_t ReadUnsigned() { return Read<intptr_t>(kEndUnsignedByteMarker); }
+  template <typename T = intptr_t>
+  T ReadUnsigned() {
+    return Read<T>(kEndUnsignedByteMarker);
+  }
 
   intptr_t Position() const { return current_ - buffer_; }
   void SetPosition(intptr_t value) {
@@ -103,6 +106,19 @@
     return Read<T>(kEndByteMarker);
   }
 
+  uword ReadWordWith32BitReads() {
+    constexpr intptr_t kNumBytesPerRead32 = sizeof(uint32_t);
+    constexpr intptr_t kNumRead32PerWord = sizeof(uword) / kNumBytesPerRead32;
+    constexpr intptr_t kNumBitsPerRead32 = kNumBytesPerRead32 * kBitsPerByte;
+
+    uword value = 0;
+    for (intptr_t j = 0; j < kNumRead32PerWord; j++) {
+      const auto partial_value = Raw<kNumBytesPerRead32, uint32_t>::Read(this);
+      value |= (static_cast<uword>(partial_value) << (j * kNumBitsPerRead32));
+    }
+    return value;
+  }
+
  private:
   int16_t Read16() { return Read16(kEndByteMarker); }
 
@@ -363,8 +379,21 @@
     }
   };
 
-  void WriteUnsigned(intptr_t value) {
-    ASSERT((value >= 0) && (value <= kIntptrMax));
+  void WriteWordWith32BitWrites(uword value) {
+    constexpr intptr_t kNumBytesPerWrite32 = sizeof(uint32_t);
+    constexpr intptr_t kNumWrite32PerWord = sizeof(uword) / kNumBytesPerWrite32;
+    constexpr intptr_t kNumBitsPerWrite32 = kNumBytesPerWrite32 * kBitsPerByte;
+
+    const uint32_t mask = Utils::NBitMask(kNumBitsPerWrite32);
+    for (intptr_t j = 0; j < kNumWrite32PerWord; j++) {
+      const uint32_t shifted_value = (value >> (j * kNumBitsPerWrite32));
+      Raw<kNumBytesPerWrite32, uint32_t>::Write(this, shifted_value & mask);
+    }
+  }
+
+  template <typename T>
+  void WriteUnsigned(T value) {
+    ASSERT(value >= 0);
     while (value > kMaxUnsignedDataPerByte) {
       WriteByte(static_cast<uint8_t>(value & kByteMask));
       value = value >> kDataBitsPerByte;
diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc
index 7238899..2072c77 100644
--- a/runtime/vm/deferred_objects.cc
+++ b/runtime/vm/deferred_objects.cc
@@ -307,7 +307,7 @@
         // materialization of e.g. _ByteDataView objects which don't have
         // explicit fields in Dart (all accesses to the fields are done via
         // recognized native methods).
-        ASSERT(offset.Value() < cls.instance_size());
+        ASSERT(offset.Value() < cls.host_instance_size());
         obj.SetFieldAtOffset(offset.Value(), value);
         if (FLAG_trace_deoptimization_verbose) {
           OS::PrintErr("    null Field @ offset(%" Pd ") <- %s\n",
diff --git a/runtime/vm/fixed_cache.h b/runtime/vm/fixed_cache.h
index 1af3a93..0b2a5825 100644
--- a/runtime/vm/fixed_cache.h
+++ b/runtime/vm/fixed_cache.h
@@ -8,6 +8,8 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include "vm/lockers.h"
+
 namespace dart {
 
 // A simple sorted fixed size Key-Value storage.
@@ -31,12 +33,16 @@
   ~FixedCache() { Clear(); }
 
   V* Lookup(K key) {
+    MutexLocker ml(&mutex_);
+
     intptr_t i = LowerBound(key);
     if (i != length_ && pairs_[i].key == key) return &pairs_[i].value;
     return NULL;
   }
 
   void Insert(K key, V value) {
+    MutexLocker ml(&mutex_);
+
     intptr_t i = LowerBound(key);
 
     if (length_ == kCapacity) {
@@ -53,7 +59,10 @@
     pairs_[i].value = value;
   }
 
-  void Clear() { length_ = 0; }
+  void Clear() {
+    MutexLocker ml(&mutex_);
+    length_ = 0;
+  }
 
  private:
   intptr_t LowerBound(K key) {
@@ -71,6 +80,10 @@
     return low;
   }
 
+  // We protect any operation on the [FixedCache] because multiple isolates from
+  // the same [IsolateGroup] can access this cache concurrently (as can the GC
+  // when it clears it).
+  Mutex mutex_;
   Entry pairs_[kCapacity];  // Sorted array of pairs.
   intptr_t length_;
 };
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index 0fc0a87..0f3be2e 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -1387,7 +1387,7 @@
 #else
   intptr_t headroom = heap_->new_space()->CapacityInWords();
 #endif
-  return after.CombinedCapacityInWords() > (gc_threshold_in_words_ + headroom);
+  return after.CombinedUsedInWords() > (gc_threshold_in_words_ + headroom);
 }
 
 bool PageSpaceController::AlmostNeedsGarbageCollection(SpaceUsage after) const {
@@ -1397,7 +1397,7 @@
   if (heap_growth_ratio_ == 100) {
     return false;
   }
-  return after.CombinedCapacityInWords() > gc_threshold_in_words_;
+  return after.CombinedUsedInWords() > gc_threshold_in_words_;
 }
 
 bool PageSpaceController::NeedsIdleGarbageCollection(SpaceUsage current) const {
@@ -1407,7 +1407,7 @@
   if (heap_growth_ratio_ == 100) {
     return false;
   }
-  return current.CombinedCapacityInWords() > idle_gc_threshold_in_words_;
+  return current.CombinedUsedInWords() > idle_gc_threshold_in_words_;
 }
 
 void PageSpaceController::EvaluateGarbageCollection(SpaceUsage before,
@@ -1446,9 +1446,9 @@
     // Number of pages we can allocate and still be within the desired growth
     // ratio.
     const intptr_t grow_pages =
-        (static_cast<intptr_t>(after.CombinedCapacityInWords() /
+        (static_cast<intptr_t>(after.CombinedUsedInWords() /
                                desired_utilization_) -
-         (after.CombinedCapacityInWords())) /
+         (after.CombinedUsedInWords())) /
         kPageSizeInWords;
     if (garbage_ratio == 0) {
       // No garbage in the previous cycle so it would be hard to compute a
@@ -1464,8 +1464,8 @@
       intptr_t local_grow_heap = 0;
       while (min < max) {
         local_grow_heap = (max + min) / 2;
-        const intptr_t limit = after.CombinedCapacityInWords() +
-                               (local_grow_heap * kPageSizeInWords);
+        const intptr_t limit =
+            after.CombinedUsedInWords() + (local_grow_heap * kPageSizeInWords);
         const intptr_t allocated_before_next_gc =
             limit - (after.CombinedUsedInWords());
         const double estimated_garbage = k * allocated_before_next_gc;
@@ -1492,7 +1492,7 @@
 
   // Limit shrinkage: allow growth by at least half the pages freed by GC.
   const intptr_t freed_pages =
-      (before.CombinedCapacityInWords() - after.CombinedCapacityInWords()) /
+      (before.CombinedUsedInWords() - after.CombinedUsedInWords()) /
       kPageSizeInWords;
   grow_heap = Utils::Maximum(grow_heap, freed_pages / 2);
   heap_->RecordData(PageSpace::kAllowedGrowth, grow_heap);
@@ -1500,11 +1500,11 @@
 
   // Save final threshold compared before growing.
   gc_threshold_in_words_ =
-      after.CombinedCapacityInWords() + (kPageSizeInWords * grow_heap);
+      after.CombinedUsedInWords() + (kPageSizeInWords * grow_heap);
 
   // Set a tight idle threshold.
   idle_gc_threshold_in_words_ =
-      after.CombinedCapacityInWords() + 2 * kPageSizeInWords;
+      after.CombinedUsedInWords() + (2 * kPageSizeInWords);
 
   RecordUpdate(before, after, "gc");
 }
@@ -1513,9 +1513,9 @@
   // Number of pages we can allocate and still be within the desired growth
   // ratio.
   intptr_t growth_in_pages =
-      (static_cast<intptr_t>(after.CombinedCapacityInWords() /
+      (static_cast<intptr_t>(after.CombinedUsedInWords() /
                              desired_utilization_) -
-       (after.CombinedCapacityInWords())) /
+       (after.CombinedUsedInWords())) /
       kPageSizeInWords;
 
   // Apply growth cap.
@@ -1524,11 +1524,11 @@
 
   // Save final threshold compared before growing.
   gc_threshold_in_words_ =
-      after.CombinedCapacityInWords() + (kPageSizeInWords * growth_in_pages);
+      after.CombinedUsedInWords() + (kPageSizeInWords * growth_in_pages);
 
   // Set a tight idle threshold.
   idle_gc_threshold_in_words_ =
-      after.CombinedCapacityInWords() + 2 * kPageSizeInWords;
+      after.CombinedUsedInWords() + (2 * kPageSizeInWords);
 
   RecordUpdate(after, after, "loaded");
 }
@@ -1540,10 +1540,10 @@
   TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "UpdateGrowthLimit");
   tbes.SetNumArguments(5);
   tbes.CopyArgument(0, "Reason", reason);
-  tbes.FormatArgument(1, "Before.CombinedCapacity (kB)", "%" Pd "",
-                      RoundWordsToKB(before.CombinedCapacityInWords()));
-  tbes.FormatArgument(2, "After.CombinedCapacity (kB)", "%" Pd "",
-                      RoundWordsToKB(after.CombinedCapacityInWords()));
+  tbes.FormatArgument(1, "Before.CombinedUsed (kB)", "%" Pd "",
+                      RoundWordsToKB(before.CombinedUsedInWords()));
+  tbes.FormatArgument(2, "After.CombinedUsed (kB)", "%" Pd "",
+                      RoundWordsToKB(after.CombinedUsedInWords()));
   tbes.FormatArgument(3, "Threshold (kB)", "%" Pd "",
                       RoundWordsToKB(gc_threshold_in_words_));
   tbes.FormatArgument(4, "Idle Threshold (kB)", "%" Pd "",
diff --git a/runtime/vm/heap/safepoint.h b/runtime/vm/heap/safepoint.h
index 4e677e7..8615b53 100644
--- a/runtime/vm/heap/safepoint.h
+++ b/runtime/vm/heap/safepoint.h
@@ -6,6 +6,7 @@
 #define RUNTIME_VM_HEAP_SAFEPOINT_H_
 
 #include "vm/globals.h"
+#include "vm/isolate.h"
 #include "vm/lockers.h"
 #include "vm/thread.h"
 #include "vm/thread_stack_resource.h"
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index 484821c..0c15bb8 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -137,7 +137,7 @@
     view->RecomputeDataFieldForInternalTypedData();
   }
 
-  void VisitPointers(RawObject** first, RawObject** last) {
+  virtual void VisitPointers(RawObject** first, RawObject** last) {
     ASSERT(Utils::IsAligned(first, sizeof(*first)));
     ASSERT(Utils::IsAligned(last, sizeof(*last)));
     for (RawObject** current = first; current <= last; current++) {
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index 7f2b3fb..d59dbfe 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -126,10 +126,9 @@
     RawClass* instance_class =
         thread->isolate()->class_table()->At(GetClassId(instance));
     return instance_class->ptr()->num_type_arguments_ > 0
-               ? reinterpret_cast<RawTypeArguments**>(
-                     instance
-                         ->ptr())[instance_class->ptr()
-                                      ->type_arguments_field_offset_in_words_]
+               ? reinterpret_cast<RawTypeArguments**>(instance->ptr())
+                     [instance_class->ptr()
+                          ->host_type_arguments_field_offset_in_words_]
                : TypeArguments::null();
   }
 
@@ -1205,7 +1204,7 @@
       } else if (instance_class->ptr()->num_type_arguments_ > 0) {
         instance_type_arguments = reinterpret_cast<RawTypeArguments**>(
             instance->ptr())[instance_class->ptr()
-                                 ->type_arguments_field_offset_in_words_];
+                                 ->host_type_arguments_field_offset_in_words_];
       }
       parent_function_type_arguments =
           static_cast<RawTypeArguments*>(null_value);
@@ -2333,7 +2332,7 @@
     BYTECODE(InitLateField, D);
     RawField* field = RAW_CAST(Field, LOAD_CONSTANT(rD + 1));
     RawInstance* instance = reinterpret_cast<RawInstance*>(SP[0]);
-    intptr_t offset_in_words = field->ptr()->offset_or_field_id_;
+    intptr_t offset_in_words = field->ptr()->host_offset_or_field_id_;
 
     instance->StorePointer(
         reinterpret_cast<RawObject**>(instance->ptr()) + offset_in_words,
@@ -2362,7 +2361,7 @@
     BYTECODE(StoreStaticTOS, D);
     RawField* field = reinterpret_cast<RawField*>(LOAD_CONSTANT(rD));
     RawInstance* value = static_cast<RawInstance*>(*SP--);
-    intptr_t field_id = field->ptr()->offset_or_field_id_;
+    intptr_t field_id = field->ptr()->host_offset_or_field_id_;
     thread->field_table_values()[field_id] = value;
     DISPATCH();
   }
@@ -2370,7 +2369,7 @@
   {
     BYTECODE(LoadStatic, D);
     RawField* field = reinterpret_cast<RawField*>(LOAD_CONSTANT(rD));
-    intptr_t field_id = field->ptr()->offset_or_field_id_;
+    intptr_t field_id = field->ptr()->host_offset_or_field_id_;
     RawInstance* value = thread->field_table_values()[field_id];
     ASSERT((value != Object::sentinel().raw()) &&
            (value != Object::transition_sentinel().raw()));
@@ -2383,7 +2382,7 @@
     RawField* field = RAW_CAST(Field, LOAD_CONSTANT(rD + 1));
     RawInstance* instance = reinterpret_cast<RawInstance*>(SP[-1]);
     RawObject* value = reinterpret_cast<RawObject*>(SP[0]);
-    intptr_t offset_in_words = field->ptr()->offset_or_field_id_;
+    intptr_t offset_in_words = field->ptr()->host_offset_or_field_id_;
 
     if (InterpreterHelpers::FieldNeedsGuardUpdate(field, value)) {
       SP[1] = 0;  // Unused result of runtime call.
@@ -2558,7 +2557,7 @@
     RawClass* cls = Class::RawCast(LOAD_CONSTANT(rD));
     if (LIKELY(InterpreterHelpers::IsFinalized(cls))) {
       const intptr_t class_id = cls->ptr()->id_;
-      const intptr_t instance_size = cls->ptr()->instance_size_in_words_
+      const intptr_t instance_size = cls->ptr()->host_instance_size_in_words_
                                      << kWordSizeLog2;
       RawObject* result;
       if (TryAllocate(thread, class_id, instance_size, &result)) {
@@ -2588,7 +2587,7 @@
     RawTypeArguments* type_args = TypeArguments::RawCast(SP[-1]);
     if (LIKELY(InterpreterHelpers::IsFinalized(cls))) {
       const intptr_t class_id = cls->ptr()->id_;
-      const intptr_t instance_size = cls->ptr()->instance_size_in_words_
+      const intptr_t instance_size = cls->ptr()->host_instance_size_in_words_
                                      << kWordSizeLog2;
       RawObject* result;
       if (TryAllocate(thread, class_id, instance_size, &result)) {
@@ -2598,7 +2597,8 @@
           *reinterpret_cast<RawObject**>(start + offset) = null_value;
         }
         const intptr_t type_args_offset =
-            cls->ptr()->type_arguments_field_offset_in_words_ << kWordSizeLog2;
+            cls->ptr()->host_type_arguments_field_offset_in_words_
+            << kWordSizeLog2;
         *reinterpret_cast<RawObject**>(start + type_args_offset) = type_args;
         *--SP = result;
         DISPATCH();
@@ -3168,7 +3168,7 @@
 
     // Field object is cached in function's data_.
     RawField* field = reinterpret_cast<RawField*>(function->ptr()->data_);
-    intptr_t offset_in_words = field->ptr()->offset_or_field_id_;
+    intptr_t offset_in_words = field->ptr()->host_offset_or_field_id_;
 
     const intptr_t kArgc = 1;
     RawInstance* instance =
@@ -3188,7 +3188,7 @@
       function = FrameFunction(FP);
       instance = reinterpret_cast<RawInstance*>(SP[2]);
       field = reinterpret_cast<RawField*>(SP[3]);
-      offset_in_words = field->ptr()->offset_or_field_id_;
+      offset_in_words = field->ptr()->host_offset_or_field_id_;
       value = reinterpret_cast<RawInstance**>(instance->ptr())[offset_in_words];
     }
 
@@ -3249,7 +3249,7 @@
 
     // Field object is cached in function's data_.
     RawField* field = reinterpret_cast<RawField*>(function->ptr()->data_);
-    intptr_t offset_in_words = field->ptr()->offset_or_field_id_;
+    intptr_t offset_in_words = field->ptr()->host_offset_or_field_id_;
     const intptr_t kArgc = 2;
     RawInstance* instance =
         reinterpret_cast<RawInstance*>(FrameArguments(FP, kArgc)[0]);
@@ -3329,7 +3329,7 @@
 
     // Field object is cached in function's data_.
     RawField* field = reinterpret_cast<RawField*>(function->ptr()->data_);
-    intptr_t field_id = field->ptr()->offset_or_field_id_;
+    intptr_t field_id = field->ptr()->host_offset_or_field_id_;
     RawInstance* value = thread->field_table_values()[field_id];
     if (value == Object::sentinel().raw() ||
         value == Object::transition_sentinel().raw()) {
@@ -3343,7 +3343,7 @@
       function = FrameFunction(FP);
       field = reinterpret_cast<RawField*>(function->ptr()->data_);
       // The field is initialized by the runtime call, but not returned.
-      intptr_t field_id = field->ptr()->offset_or_field_id_;
+      intptr_t field_id = field->ptr()->host_offset_or_field_id_;
       value = thread->field_table_values()[field_id];
     }
 
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 6b7d268..4616efa 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -110,9 +110,9 @@
 
   if (from.NumTypeArguments() > 0) {
     // Add copying of the optional type argument field.
-    intptr_t from_offset = from.type_arguments_field_offset();
+    intptr_t from_offset = from.host_type_arguments_field_offset();
     ASSERT(from_offset != Class::kNoTypeArguments);
-    intptr_t to_offset = to.type_arguments_field_offset();
+    intptr_t to_offset = to.host_type_arguments_field_offset();
     ASSERT(to_offset != Class::kNoTypeArguments);
     mapping->Add(from_offset);
     mapping->Add(to_offset);
@@ -152,8 +152,8 @@
       from_name = from_field.name();
       if (from_name.Equals(to_name)) {
         // Success
-        mapping->Add(from_field.Offset());
-        mapping->Add(to_field.Offset());
+        mapping->Add(from_field.HostOffset());
+        mapping->Add(to_field.HostOffset());
         // Field did exist in old class deifnition.
         new_field = false;
       }
@@ -163,7 +163,7 @@
       const Field& field = Field::Handle(to_field.raw());
       field.set_needs_load_guard(true);
       field.set_is_unboxing_candidate(false);
-      new_fields_offsets->Add(field.Offset());
+      new_fields_offsets->Add(field.HostOffset());
     }
   }
 
@@ -193,9 +193,34 @@
 }
 
 RawInstance* InstanceMorpher::Morph(const Instance& instance) const {
+  // Code can reference constants / canonical objects either directly in the
+  // instruction stream (ia32) or via an object pool.
+  //
+  // We have the following invariants:
+  //
+  //    a) Those canonical objects don't change state (i.e. are not mutable):
+  //       our optimizer can e.g. execute loads of such constants at
+  //       compile-time.
+  //
+  //       => We ensure that const-classes with live constants cannot be
+  //          reloaded to become non-const classes (see Class::CheckReload).
+  //
+  //    b) Those canonical objects live in old space: e.g. on ia32 the scavenger
+  //       does not make the RX pages writable and therefore cannot update
+  //       pointers embedded in the instruction stream.
+  //
+  // In order to maintain these invariants we ensure to always morph canonical
+  // objects to old space.
+  const bool is_canonical = instance.IsCanonical();
+  const Heap::Space space = is_canonical ? Heap::kOld : Heap::kNew;
   const auto& result = Instance::Handle(
-      Z, Instance::NewFromCidAndSize(shared_class_table_, cid_));
+      Z, Instance::NewFromCidAndSize(shared_class_table_, cid_, space));
 
+  // We preserve the canonical bit of the object, since this object is present
+  // in the class's constants.
+  if (is_canonical) {
+    result.SetCanonical();
+  }
 #if defined(HASH_IN_OBJECT_HEADER)
   const uint32_t hash = Object::GetCachedHash(instance.raw());
   Object::SetCachedHash(result.raw(), hash);
@@ -1247,8 +1272,9 @@
       uri = script.url();
       const bool dart_scheme = uri.StartsWith(Symbols::DartScheme());
       if (dart_scheme) {
-        // If a user-defined class mixes in a mixin from dart:*, it's list of scripts will have
-        // a dart:* script as well. We don't consider those during reload.
+        // If a user-defined class mixes in a mixin from dart:*, it's list of
+        // scripts will have a dart:* script as well. We don't consider those
+        // during reload.
         continue;
       }
       if (ContainsScriptUri(modified_sources_uris, uri.ToCString())) {
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index b69cee3..ac5ae44 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -2973,6 +2973,92 @@
   EXPECT_STREQ("true", SimpleInvokeStr(lib, "main"));
 }
 
+TEST_CASE(IsolateReload_ShapeChangeConstReferencedByInstructions) {
+  // On IA32, instructions can contain direct pointers to const objects. We need
+  // to be careful that if the const objects are reallocated because of a shape
+  // change, they are allocated old. Because instructions normally contain
+  // pointers only to old objects, the scavenger does not bother to ensure code
+  // pages are writable when visiting the remembered set. Visiting the
+  // remembered involes writing to update the pointer for any target that gets
+  // promoted.
+  const char* kScript = R"(
+    import 'file:///test:isolate_reload_helper';
+    class A {
+      final x;
+      const A(this.x);
+    }
+    var a;
+    main() {
+      a = const A(1);
+      collectNewSpace();
+      return 'okay';
+    }
+  )";
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+  EXPECT_STREQ("okay", SimpleInvokeStr(lib, "main"));
+
+  // Flip the size back and forth a few times.
+  for (intptr_t i = 0; i < 3; i++) {
+    const char* kReloadScript = R"(
+      import 'file:///test:isolate_reload_helper';
+      class A {
+        final x, y, z;
+        const A(this.x, this.y, this.z);
+      }
+      var a;
+      main() {
+        a = const A(1, null, null);
+        collectNewSpace();
+        return 'okay';
+      }
+    )";
+
+    lib = TestCase::ReloadTestScript(kReloadScript);
+    EXPECT_VALID(lib);
+    EXPECT_STREQ("okay", SimpleInvokeStr(lib, "main"));
+
+    lib = TestCase::ReloadTestScript(kScript);
+    EXPECT_VALID(lib);
+    EXPECT_STREQ("okay", SimpleInvokeStr(lib, "main"));
+  }
+}
+
+TEST_CASE(IsolateReload_ConstToNonConstClass) {
+  const char* kScript = R"(
+    class A {
+      final dynamic x;
+      const A(this.x);
+    }
+    dynamic a;
+    main() {
+      a = const A(1);
+      return 'okay';
+    }
+  )";
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+  EXPECT_STREQ("okay", SimpleInvokeStr(lib, "main"));
+
+  const char* kReloadScript = R"(
+    class A {
+      dynamic x;
+      A(this.x);
+    }
+    dynamic a;
+    main() {
+      a.x = 10;
+    }
+  )";
+
+  lib = TestCase::ReloadTestScript(kReloadScript);
+  EXPECT_ERROR(lib,
+               "Const class cannot become non-const: "
+               "Library:'file:///test-lib' Class: A");
+}
+
 TEST_CASE(IsolateReload_StaticTearOffRetainsHash) {
   const char* kScript =
       "foo() {}\n"
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 2061521..2a68fe5 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,7 +20,7 @@
 
 // Both version numbers are inclusive.
 static const uint32_t kMinSupportedKernelFormatVersion = 29;
-static const uint32_t kMaxSupportedKernelFormatVersion = 37;
+static const uint32_t kMaxSupportedKernelFormatVersion = 38;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 49ef53b..bd81e37 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -8,6 +8,7 @@
 
 #include <memory>
 
+#include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/frontend/constant_reader.h"
 #include "vm/compiler/frontend/kernel_translation_helper.h"
 #include "vm/dart_api_impl.h"
@@ -948,6 +949,17 @@
   field.set_guarded_cid(type.cid);
   field.set_is_nullable(type.IsNullable());
   field.set_guarded_list_length(Field::kNoFixedLength);
+  if (FLAG_precompiled_mode) {
+    field.set_is_unboxing_candidate(
+        !field.is_late() && !field.is_static() &&
+        ((field.guarded_cid() == kDoubleCid &&
+          FlowGraphCompiler::SupportsUnboxedDoubles()) ||
+         (field.guarded_cid() == kFloat32x4Cid &&
+          FlowGraphCompiler::SupportsUnboxedSimd128()) ||
+         (field.guarded_cid() == kFloat64x2Cid &&
+          FlowGraphCompiler::SupportsUnboxedSimd128())) &&
+        !field.is_nullable());
+  }
 }
 
 void KernelLoader::CheckForInitializer(const Field& field) {
diff --git a/runtime/vm/lockers.h b/runtime/vm/lockers.h
index 3e81788..31ea517 100644
--- a/runtime/vm/lockers.h
+++ b/runtime/vm/lockers.h
@@ -8,8 +8,8 @@
 #include "platform/assert.h"
 #include "vm/allocation.h"
 #include "vm/globals.h"
-#include "vm/isolate.h"
 #include "vm/os_thread.h"
+#include "vm/thread.h"
 
 namespace dart {
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 1fb811b..f4e7894 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -693,14 +693,19 @@
     // to lookup class class in the class table where it is not registered yet.
     cls.raw_ = class_class_;
     ASSERT(builtin_vtables_[kClassCid] == fake.vtable());
-    cls.set_instance_size(Class::InstanceSize());
-    cls.set_next_field_offset(Class::NextFieldOffset());
+    cls.set_instance_size(
+        Class::InstanceSize(),
+        compiler::target::RoundedAllocationSize(RTN::Class::InstanceSize()));
+    const intptr_t host_next_field_offset = Class::NextFieldOffset();
+    const intptr_t target_next_field_offset = RTN::Class::NextFieldOffset();
+    cls.set_next_field_offset(host_next_field_offset, target_next_field_offset);
     cls.set_id(Class::kClassId);
     cls.set_state_bits(0);
     cls.set_is_finalized();
     cls.set_is_declaration_loaded();
     cls.set_is_type_finalized();
-    cls.set_type_arguments_field_offset_in_words(Class::kNoTypeArguments);
+    cls.set_type_arguments_field_offset_in_words(Class::kNoTypeArguments,
+                                                 RTN::Class::kNoTypeArguments);
     cls.set_num_type_arguments(0);
     cls.set_num_native_fields(0);
     cls.InitEmptyFields();
@@ -708,19 +713,23 @@
   }
 
   // Allocate and initialize the null class.
-  cls = Class::New<Instance>(kNullCid, isolate);
+  cls = Class::New<Instance, RTN::Instance>(kNullCid, isolate);
   cls.set_num_type_arguments(0);
   isolate->object_store()->set_null_class(cls);
 
   // Allocate and initialize the free list element class.
-  cls = Class::New<FreeListElement::FakeInstance>(kFreeListElement, isolate);
+  cls =
+      Class::New<FreeListElement::FakeInstance,
+                 RTN::FreeListElement::FakeInstance>(kFreeListElement, isolate);
   cls.set_num_type_arguments(0);
   cls.set_is_finalized();
   cls.set_is_declaration_loaded();
   cls.set_is_type_finalized();
 
   // Allocate and initialize the forwarding corpse class.
-  cls = Class::New<ForwardingCorpse::FakeInstance>(kForwardingCorpse, isolate);
+  cls = Class::New<ForwardingCorpse::FakeInstance,
+                   RTN::ForwardingCorpse::FakeInstance>(kForwardingCorpse,
+                                                        isolate);
   cls.set_num_type_arguments(0);
   cls.set_is_finalized();
   cls.set_is_declaration_loaded();
@@ -744,132 +753,136 @@
   }
 
   // Allocate the remaining VM internal classes.
-  cls = Class::New<TypeArguments>(isolate);
+  cls = Class::New<TypeArguments, RTN::TypeArguments>(isolate);
   type_arguments_class_ = cls.raw();
 
-  cls = Class::New<PatchClass>(isolate);
+  cls = Class::New<PatchClass, RTN::PatchClass>(isolate);
   patch_class_class_ = cls.raw();
 
-  cls = Class::New<Function>(isolate);
+  cls = Class::New<Function, RTN::Function>(isolate);
   function_class_ = cls.raw();
 
-  cls = Class::New<ClosureData>(isolate);
+  cls = Class::New<ClosureData, RTN::ClosureData>(isolate);
   closure_data_class_ = cls.raw();
 
-  cls = Class::New<SignatureData>(isolate);
+  cls = Class::New<SignatureData, RTN::SignatureData>(isolate);
   signature_data_class_ = cls.raw();
 
-  cls = Class::New<RedirectionData>(isolate);
+  cls = Class::New<RedirectionData, RTN::RedirectionData>(isolate);
   redirection_data_class_ = cls.raw();
 
-  cls = Class::New<FfiTrampolineData>(isolate);
+  cls = Class::New<FfiTrampolineData, RTN::FfiTrampolineData>(isolate);
   ffi_trampoline_data_class_ = cls.raw();
 
-  cls = Class::New<Field>(isolate);
+  cls = Class::New<Field, RTN::Field>(isolate);
   field_class_ = cls.raw();
 
-  cls = Class::New<Script>(isolate);
+  cls = Class::New<Script, RTN::Script>(isolate);
   script_class_ = cls.raw();
 
-  cls = Class::New<Library>(isolate);
+  cls = Class::New<Library, RTN::Library>(isolate);
   library_class_ = cls.raw();
 
-  cls = Class::New<Namespace>(isolate);
+  cls = Class::New<Namespace, RTN::Namespace>(isolate);
   namespace_class_ = cls.raw();
 
-  cls = Class::New<KernelProgramInfo>(isolate);
+  cls = Class::New<KernelProgramInfo, RTN::KernelProgramInfo>(isolate);
   kernel_program_info_class_ = cls.raw();
 
-  cls = Class::New<Code>(isolate);
+  cls = Class::New<Code, RTN::Code>(isolate);
   code_class_ = cls.raw();
 
-  cls = Class::New<Bytecode>(isolate);
+  cls = Class::New<Bytecode, RTN::Bytecode>(isolate);
   bytecode_class_ = cls.raw();
 
-  cls = Class::New<Instructions>(isolate);
+  cls = Class::New<Instructions, RTN::Instructions>(isolate);
   instructions_class_ = cls.raw();
 
-  cls = Class::New<ObjectPool>(isolate);
+  cls = Class::New<ObjectPool, RTN::ObjectPool>(isolate);
   object_pool_class_ = cls.raw();
 
-  cls = Class::New<PcDescriptors>(isolate);
+  cls = Class::New<PcDescriptors, RTN::PcDescriptors>(isolate);
   pc_descriptors_class_ = cls.raw();
 
-  cls = Class::New<CodeSourceMap>(isolate);
+  cls = Class::New<CodeSourceMap, RTN::CodeSourceMap>(isolate);
   code_source_map_class_ = cls.raw();
 
-  cls = Class::New<CompressedStackMaps>(isolate);
+  cls = Class::New<CompressedStackMaps, RTN::CompressedStackMaps>(isolate);
   compressed_stackmaps_class_ = cls.raw();
 
-  cls = Class::New<LocalVarDescriptors>(isolate);
+  cls = Class::New<LocalVarDescriptors, RTN::LocalVarDescriptors>(isolate);
   var_descriptors_class_ = cls.raw();
 
-  cls = Class::New<ExceptionHandlers>(isolate);
+  cls = Class::New<ExceptionHandlers, RTN::ExceptionHandlers>(isolate);
   exception_handlers_class_ = cls.raw();
 
-  cls = Class::New<Context>(isolate);
+  cls = Class::New<Context, RTN::Context>(isolate);
   context_class_ = cls.raw();
 
-  cls = Class::New<ContextScope>(isolate);
+  cls = Class::New<ContextScope, RTN::ContextScope>(isolate);
   context_scope_class_ = cls.raw();
 
-  cls = Class::New<ParameterTypeCheck>(isolate);
+  cls = Class::New<ParameterTypeCheck, RTN::ParameterTypeCheck>(isolate);
   dyncalltypecheck_class_ = cls.raw();
 
-  cls = Class::New<SingleTargetCache>(isolate);
+  cls = Class::New<SingleTargetCache, RTN::SingleTargetCache>(isolate);
   singletargetcache_class_ = cls.raw();
 
-  cls = Class::New<UnlinkedCall>(isolate);
+  cls = Class::New<UnlinkedCall, RTN::UnlinkedCall>(isolate);
   unlinkedcall_class_ = cls.raw();
 
-  cls = Class::New<MonomorphicSmiableCall>(isolate);
+  cls =
+      Class::New<MonomorphicSmiableCall, RTN::MonomorphicSmiableCall>(isolate);
   monomorphicsmiablecall_class_ = cls.raw();
 
-  cls = Class::New<ICData>(isolate);
+  cls = Class::New<ICData, RTN::ICData>(isolate);
   icdata_class_ = cls.raw();
 
-  cls = Class::New<MegamorphicCache>(isolate);
+  cls = Class::New<MegamorphicCache, RTN::MegamorphicCache>(isolate);
   megamorphic_cache_class_ = cls.raw();
 
-  cls = Class::New<SubtypeTestCache>(isolate);
+  cls = Class::New<SubtypeTestCache, RTN::SubtypeTestCache>(isolate);
   subtypetestcache_class_ = cls.raw();
 
-  cls = Class::New<ApiError>(isolate);
+  cls = Class::New<ApiError, RTN::ApiError>(isolate);
   api_error_class_ = cls.raw();
 
-  cls = Class::New<LanguageError>(isolate);
+  cls = Class::New<LanguageError, RTN::LanguageError>(isolate);
   language_error_class_ = cls.raw();
 
-  cls = Class::New<UnhandledException>(isolate);
+  cls = Class::New<UnhandledException, RTN::UnhandledException>(isolate);
   unhandled_exception_class_ = cls.raw();
 
-  cls = Class::New<UnwindError>(isolate);
+  cls = Class::New<UnwindError, RTN::UnwindError>(isolate);
   unwind_error_class_ = cls.raw();
 
   ASSERT(class_class() != null_);
 
   // Pre-allocate classes in the vm isolate so that we can for example create a
   // symbol table and populate it with some frequently used strings as symbols.
-  cls = Class::New<Array>(isolate);
+  cls = Class::New<Array, RTN::Array>(isolate);
   isolate->object_store()->set_array_class(cls);
-  cls.set_type_arguments_field_offset(Array::type_arguments_offset());
+  cls.set_type_arguments_field_offset(Array::type_arguments_offset(),
+                                      RTN::Array::type_arguments_offset());
   cls.set_num_type_arguments(1);
-  cls = Class::New<Array>(kImmutableArrayCid, isolate);
+  cls = Class::New<Array, RTN::Array>(kImmutableArrayCid, isolate);
   isolate->object_store()->set_immutable_array_class(cls);
-  cls.set_type_arguments_field_offset(Array::type_arguments_offset());
+  cls.set_type_arguments_field_offset(Array::type_arguments_offset(),
+                                      RTN::Array::type_arguments_offset());
   cls.set_num_type_arguments(1);
-  cls = Class::New<GrowableObjectArray>(isolate);
+  cls = Class::New<GrowableObjectArray, RTN::GrowableObjectArray>(isolate);
   isolate->object_store()->set_growable_object_array_class(cls);
   cls.set_type_arguments_field_offset(
-      GrowableObjectArray::type_arguments_offset());
+      GrowableObjectArray::type_arguments_offset(),
+      RTN::GrowableObjectArray::type_arguments_offset());
   cls.set_num_type_arguments(1);
   cls = Class::NewStringClass(kOneByteStringCid, isolate);
   isolate->object_store()->set_one_byte_string_class(cls);
   cls = Class::NewStringClass(kTwoByteStringCid, isolate);
   isolate->object_store()->set_two_byte_string_class(cls);
-  cls = Class::New<Mint>(isolate);
+  cls = Class::New<Mint, RTN::Mint>(isolate);
   isolate->object_store()->set_mint_class(cls);
-  cls = Class::New<Double>(isolate);
+  cls = Class::New<Double, RTN::Double>(isolate);
   isolate->object_store()->set_double_class(cls);
 
   // Ensure that class kExternalTypedDataUint8ArrayCid is registered as we
@@ -991,7 +1004,7 @@
   // as we do not have any VM isolate snapshot at this time.
   *vm_isolate_snapshot_object_table_ = Object::empty_array().raw();
 
-  cls = Class::New<Instance>(kDynamicCid, isolate);
+  cls = Class::New<Instance, RTN::Instance>(kDynamicCid, isolate);
   cls.set_is_abstract();
   cls.set_num_type_arguments(0);
   cls.set_is_finalized();
@@ -999,21 +1012,21 @@
   cls.set_is_type_finalized();
   dynamic_class_ = cls.raw();
 
-  cls = Class::New<Instance>(kVoidCid, isolate);
+  cls = Class::New<Instance, RTN::Instance>(kVoidCid, isolate);
   cls.set_num_type_arguments(0);
   cls.set_is_finalized();
   cls.set_is_declaration_loaded();
   cls.set_is_type_finalized();
   void_class_ = cls.raw();
 
-  cls = Class::New<Instance>(kNeverCid, isolate);
+  cls = Class::New<Instance, RTN::Instance>(kNeverCid, isolate);
   cls.set_num_type_arguments(0);
   cls.set_is_finalized();
   cls.set_is_declaration_loaded();
   cls.set_is_type_finalized();
   never_class_ = cls.raw();
 
-  cls = Class::New<Type>(isolate);
+  cls = Class::New<Type, RTN::Type>(isolate);
   cls.set_is_finalized();
   cls.set_is_declaration_loaded();
   cls.set_is_type_finalized();
@@ -1045,7 +1058,7 @@
   cls.SetFunctions(Object::empty_array());
 
   // Allocate and initialize singleton true and false boolean objects.
-  cls = Class::New<Bool>(isolate);
+  cls = Class::New<Bool, RTN::Bool>(isolate);
   isolate->object_store()->set_bool_class(cls);
   *bool_true_ = Bool::New(true);
   *bool_false_ = Bool::New(false);
@@ -1571,7 +1584,7 @@
 
     // All RawArray fields will be initialized to an empty array, therefore
     // initialize array class first.
-    cls = Class::New<Array>(isolate);
+    cls = Class::New<Array, RTN::Array>(isolate);
     object_store->set_array_class(cls);
 
     // VM classes that are parameterized (Array, ImmutableArray,
@@ -1579,15 +1592,17 @@
     // CalculateFieldOffsets() is not called, so we need to set the offset of
     // their type_arguments_ field, which is explicitly declared in their
     // respective Raw* classes.
-    cls.set_type_arguments_field_offset(Array::type_arguments_offset());
+    cls.set_type_arguments_field_offset(Array::type_arguments_offset(),
+                                        RTN::Array::type_arguments_offset());
     cls.set_num_type_arguments(1);
 
     // Set up the growable object array class (Has to be done after the array
     // class is setup as one of its field is an array object).
-    cls = Class::New<GrowableObjectArray>(isolate);
+    cls = Class::New<GrowableObjectArray, RTN::GrowableObjectArray>(isolate);
     object_store->set_growable_object_array_class(cls);
     cls.set_type_arguments_field_offset(
-        GrowableObjectArray::type_arguments_offset());
+        GrowableObjectArray::type_arguments_offset(),
+        RTN::GrowableObjectArray::type_arguments_offset());
     cls.set_num_type_arguments(1);
 
     // Initialize hash set for canonical types.
@@ -1603,13 +1618,14 @@
     object_store->set_canonical_type_arguments(array);
 
     // Setup type class early in the process.
-    const Class& type_cls = Class::Handle(zone, Class::New<Type>(isolate));
+    const Class& type_cls =
+        Class::Handle(zone, Class::New<Type, RTN::Type>(isolate));
     const Class& type_ref_cls =
-        Class::Handle(zone, Class::New<TypeRef>(isolate));
-    const Class& type_parameter_cls =
-        Class::Handle(zone, Class::New<TypeParameter>(isolate));
-    const Class& library_prefix_cls =
-        Class::Handle(zone, Class::New<LibraryPrefix>(isolate));
+        Class::Handle(zone, Class::New<TypeRef, RTN::TypeRef>(isolate));
+    const Class& type_parameter_cls = Class::Handle(
+        zone, Class::New<TypeParameter, RTN::TypeParameter>(isolate));
+    const Class& library_prefix_cls = Class::Handle(
+        zone, Class::New<LibraryPrefix, RTN::LibraryPrefix>(isolate));
 
     // Pre-allocate the OneByteString class needed by the symbol table.
     cls = Class::NewStringClass(kOneByteStringCid, isolate);
@@ -1666,9 +1682,10 @@
     RegisterPrivateClass(cls, Symbols::_GrowableList(), core_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<Array>(kImmutableArrayCid, isolate);
+    cls = Class::New<Array, RTN::Array>(kImmutableArrayCid, isolate);
     object_store->set_immutable_array_class(cls);
-    cls.set_type_arguments_field_offset(Array::type_arguments_offset());
+    cls.set_type_arguments_field_offset(Array::type_arguments_offset(),
+                                        RTN::Array::type_arguments_offset());
     cls.set_num_type_arguments(1);
     ASSERT(object_store->immutable_array_class() !=
            object_store->array_class());
@@ -1707,30 +1724,31 @@
     ASSERT(!isolate_lib.IsNull());
     ASSERT(isolate_lib.raw() == Library::IsolateLibrary());
 
-    cls = Class::New<Capability>(isolate);
+    cls = Class::New<Capability, RTN::Capability>(isolate);
     RegisterPrivateClass(cls, Symbols::_CapabilityImpl(), isolate_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<ReceivePort>(isolate);
+    cls = Class::New<ReceivePort, RTN::ReceivePort>(isolate);
     RegisterPrivateClass(cls, Symbols::_RawReceivePortImpl(), isolate_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<SendPort>(isolate);
+    cls = Class::New<SendPort, RTN::SendPort>(isolate);
     RegisterPrivateClass(cls, Symbols::_SendPortImpl(), isolate_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<TransferableTypedData>(isolate);
+    cls =
+        Class::New<TransferableTypedData, RTN::TransferableTypedData>(isolate);
     RegisterPrivateClass(cls, Symbols::_TransferableTypedDataImpl(),
                          isolate_lib);
     pending_classes.Add(cls);
 
     const Class& stacktrace_cls =
-        Class::Handle(zone, Class::New<StackTrace>(isolate));
+        Class::Handle(zone, Class::New<StackTrace, RTN::StackTrace>(isolate));
     RegisterPrivateClass(stacktrace_cls, Symbols::_StackTrace(), core_lib);
     pending_classes.Add(stacktrace_cls);
     // Super type set below, after Object is allocated.
 
-    cls = Class::New<RegExp>(isolate);
+    cls = Class::New<RegExp, RTN::RegExp>(isolate);
     RegisterPrivateClass(cls, Symbols::_RegExp(), core_lib);
     pending_classes.Add(cls);
 
@@ -1740,11 +1758,12 @@
     // The script and token index of these pre-allocated classes is set up in
     // the parser when the corelib script is compiled (see
     // Parser::ParseClassDefinition).
-    cls = Class::New<Instance>(kInstanceCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kInstanceCid, isolate);
     object_store->set_object_class(cls);
     cls.set_name(Symbols::Object());
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
+    cls.set_is_const();
     core_lib.AddClass(cls);
     pending_classes.Add(cls);
     type = Type::NewNonParameterizedType(cls);
@@ -1754,12 +1773,12 @@
     type = type.ToNullability(Nullability::kNonNullable, Heap::kOld);
     object_store->set_non_nullable_object_type(type);
 
-    cls = Class::New<Bool>(isolate);
+    cls = Class::New<Bool, RTN::Bool>(isolate);
     object_store->set_bool_class(cls);
     RegisterClass(cls, Symbols::Bool(), core_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<Instance>(kNullCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kNullCid, isolate);
     object_store->set_null_class(cls);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
@@ -1781,33 +1800,33 @@
                          core_lib);
     pending_classes.Add(type_parameter_cls);
 
-    cls = Class::New<Integer>(isolate);
+    cls = Class::New<Integer, RTN::Integer>(isolate);
     object_store->set_integer_implementation_class(cls);
     RegisterPrivateClass(cls, Symbols::_IntegerImplementation(), core_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<Smi>(isolate);
+    cls = Class::New<Smi, RTN::Smi>(isolate);
     object_store->set_smi_class(cls);
     RegisterPrivateClass(cls, Symbols::_Smi(), core_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<Mint>(isolate);
+    cls = Class::New<Mint, RTN::Mint>(isolate);
     object_store->set_mint_class(cls);
     RegisterPrivateClass(cls, Symbols::_Mint(), core_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<Double>(isolate);
+    cls = Class::New<Double, RTN::Double>(isolate);
     object_store->set_double_class(cls);
     RegisterPrivateClass(cls, Symbols::_Double(), core_lib);
     pending_classes.Add(cls);
 
     // Class that represents the Dart class _Closure and C++ class Closure.
-    cls = Class::New<Closure>(isolate);
+    cls = Class::New<Closure, RTN::Closure>(isolate);
     object_store->set_closure_class(cls);
     RegisterPrivateClass(cls, Symbols::_Closure(), core_lib);
     pending_classes.Add(cls);
 
-    cls = Class::New<WeakProperty>(isolate);
+    cls = Class::New<WeakProperty, RTN::WeakProperty>(isolate);
     object_store->set_weak_property_class(cls);
     RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib);
 
@@ -1824,7 +1843,7 @@
     ASSERT(!lib.IsNull());
     ASSERT(lib.raw() == Library::MirrorsLibrary());
 
-    cls = Class::New<MirrorReference>(isolate);
+    cls = Class::New<MirrorReference, RTN::MirrorReference>(isolate);
     RegisterPrivateClass(cls, Symbols::_MirrorReference(), lib);
 #endif
 
@@ -1840,9 +1859,11 @@
     object_store->set_bootstrap_library(ObjectStore::kCollection, lib);
     ASSERT(!lib.IsNull());
     ASSERT(lib.raw() == Library::CollectionLibrary());
-    cls = Class::New<LinkedHashMap>(isolate);
+    cls = Class::New<LinkedHashMap, RTN::LinkedHashMap>(isolate);
     object_store->set_linked_hash_map_class(cls);
-    cls.set_type_arguments_field_offset(LinkedHashMap::type_arguments_offset());
+    cls.set_type_arguments_field_offset(
+        LinkedHashMap::type_arguments_offset(),
+        RTN::LinkedHashMap::type_arguments_offset());
     cls.set_num_type_arguments(2);
     RegisterPrivateClass(cls, Symbols::_LinkedHashMap(), lib);
     pending_classes.Add(cls);
@@ -1858,7 +1879,7 @@
     object_store->set_bootstrap_library(ObjectStore::kDeveloper, lib);
     ASSERT(!lib.IsNull());
     ASSERT(lib.raw() == Library::DeveloperLibrary());
-    cls = Class::New<UserTag>(isolate);
+    cls = Class::New<UserTag, RTN::UserTag>(isolate);
     RegisterPrivateClass(cls, Symbols::_UserTag(), lib);
     pending_classes.Add(cls);
 
@@ -1901,10 +1922,10 @@
                                          isolate);                             \
   RegisterPrivateClass(cls, Symbols::_External##clazz(), lib);
 
-    cls =
-        Class::New<Instance>(kByteBufferCid, isolate, /*register_class=*/false);
-    cls.set_instance_size(0);
-    cls.set_next_field_offset(-kWordSize);
+    cls = Class::New<Instance, RTN::Instance>(kByteBufferCid, isolate,
+                                              /*register_class=*/false);
+    cls.set_instance_size(0, 0);
+    cls.set_next_field_offset(-kWordSize, -compiler::target::kWordSize);
     isolate->RegisterClass(cls);
     RegisterPrivateClass(cls, Symbols::_ByteBuffer(), lib);
     pending_classes.Add(cls);
@@ -1912,39 +1933,42 @@
     CLASS_LIST_TYPED_DATA(REGISTER_EXT_TYPED_DATA_CLASS);
 #undef REGISTER_EXT_TYPED_DATA_CLASS
     // Register Float32x4, Int32x4, and Float64x2 in the object store.
-    cls = Class::New<Float32x4>(isolate);
+    cls = Class::New<Float32x4, RTN::Float32x4>(isolate);
     RegisterPrivateClass(cls, Symbols::_Float32x4(), lib);
     pending_classes.Add(cls);
     object_store->set_float32x4_class(cls);
 
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     RegisterClass(cls, Symbols::Float32x4(), lib);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
     type = Type::NewNonParameterizedType(cls);
     object_store->set_float32x4_type(type);
 
-    cls = Class::New<Int32x4>(isolate);
+    cls = Class::New<Int32x4, RTN::Int32x4>(isolate);
     RegisterPrivateClass(cls, Symbols::_Int32x4(), lib);
     pending_classes.Add(cls);
     object_store->set_int32x4_class(cls);
 
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     RegisterClass(cls, Symbols::Int32x4(), lib);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
     type = Type::NewNonParameterizedType(cls);
     object_store->set_int32x4_type(type);
 
-    cls = Class::New<Float64x2>(isolate);
+    cls = Class::New<Float64x2, RTN::Float64x2>(isolate);
     RegisterPrivateClass(cls, Symbols::_Float64x2(), lib);
     pending_classes.Add(cls);
     object_store->set_float64x2_class(cls);
 
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     RegisterClass(cls, Symbols::Float64x2(), lib);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
@@ -1958,8 +1982,9 @@
 
     // Abstract class that represents the Dart class Type.
     // Note that this class is implemented by Dart class _AbstractType.
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
     RegisterClass(cls, Symbols::Type(), core_lib);
@@ -1968,8 +1993,9 @@
     object_store->set_type_type(type);
 
     // Abstract class that represents the Dart class Function.
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
     RegisterClass(cls, Symbols::Function(), core_lib);
@@ -1981,7 +2007,7 @@
     type = type.ToNullability(Nullability::kNonNullable, Heap::kOld);
     object_store->set_non_nullable_function_type(type);
 
-    cls = Class::New<Number>(isolate);
+    cls = Class::New<Number, RTN::Number>(isolate);
     RegisterClass(cls, Symbols::Number(), core_lib);
     pending_classes.Add(cls);
     type = Type::NewNonParameterizedType(cls);
@@ -1991,8 +2017,9 @@
     type = type.ToNullability(Nullability::kNonNullable, Heap::kOld);
     object_store->set_non_nullable_number_type(type);
 
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     RegisterClass(cls, Symbols::Int(), core_lib);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
@@ -2004,8 +2031,9 @@
     type = type.ToNullability(Nullability::kNonNullable, Heap::kOld);
     object_store->set_non_nullable_int_type(type);
 
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     RegisterClass(cls, Symbols::Double(), core_lib);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
@@ -2018,8 +2046,9 @@
     object_store->set_non_nullable_double_type(type);
 
     name = Symbols::_String().raw();
-    cls = Class::New<Instance>(kIllegalCid, isolate, /*register_class=*/true,
-                               /*is_abstract=*/true);
+    cls = Class::New<Instance, RTN::Instance>(kIllegalCid, isolate,
+                                              /*register_class=*/true,
+                                              /*is_abstract=*/true);
     RegisterClass(cls, name, core_lib);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
@@ -2170,7 +2199,7 @@
     }
     object_store->set_bootstrap_library(ObjectStore::kFfi, lib);
 
-    cls = Class::New<Instance>(kFfiNativeTypeCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kFfiNativeTypeCid, isolate);
     cls.set_num_type_arguments(0);
     cls.set_is_prefinalized();
     pending_classes.Add(cls);
@@ -2178,7 +2207,7 @@
     RegisterClass(cls, Symbols::FfiNativeType(), lib);
 
 #define REGISTER_FFI_TYPE_MARKER(clazz)                                        \
-  cls = Class::New<Instance>(kFfi##clazz##Cid, isolate);                       \
+  cls = Class::New<Instance, RTN::Instance>(kFfi##clazz##Cid, isolate);        \
   cls.set_num_type_arguments(0);                                               \
   cls.set_is_prefinalized();                                                   \
   pending_classes.Add(cls);                                                    \
@@ -2186,8 +2215,9 @@
     CLASS_LIST_FFI_TYPE_MARKER(REGISTER_FFI_TYPE_MARKER);
 #undef REGISTER_FFI_TYPE_MARKER
 
-    cls = Class::New<Instance>(kFfiNativeFunctionCid, isolate);
-    cls.set_type_arguments_field_offset(Pointer::type_arguments_offset());
+    cls = Class::New<Instance, RTN::Instance>(kFfiNativeFunctionCid, isolate);
+    cls.set_type_arguments_field_offset(Pointer::type_arguments_offset(),
+                                        RTN::Pointer::type_arguments_offset());
     cls.set_num_type_arguments(1);
     cls.set_is_prefinalized();
     pending_classes.Add(cls);
@@ -2198,8 +2228,11 @@
     pending_classes.Add(cls);
     RegisterClass(cls, Symbols::FfiPointer(), lib);
 
-    cls = Class::New<DynamicLibrary>(kFfiDynamicLibraryCid, isolate);
-    cls.set_instance_size(DynamicLibrary::InstanceSize());
+    cls = Class::New<DynamicLibrary, RTN::DynamicLibrary>(kFfiDynamicLibraryCid,
+                                                          isolate);
+    cls.set_instance_size(DynamicLibrary::InstanceSize(),
+                          compiler::target::RoundedAllocationSize(
+                              RTN::DynamicLibrary::InstanceSize()));
     cls.set_is_prefinalized();
     pending_classes.Add(cls);
     RegisterClass(cls, Symbols::FfiDynamicLibrary(), lib);
@@ -2213,7 +2246,7 @@
     object_store->set_bootstrap_library(ObjectStore::kWasm, lib);
 
 #define REGISTER_WASM_TYPE(clazz)                                              \
-  cls = Class::New<Instance>(k##clazz##Cid, isolate);                          \
+  cls = Class::New<Instance, RTN::Instance>(k##clazz##Cid, isolate);           \
   cls.set_num_type_arguments(0);                                               \
   cls.set_is_prefinalized();                                                   \
   pending_classes.Add(cls);                                                    \
@@ -2263,33 +2296,33 @@
     // stored in the object store. Yet we still need to create their Class
     // object so that they get put into the class_table (as a side effect of
     // Class::New()).
-    cls = Class::New<Instance>(kInstanceCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kInstanceCid, isolate);
     object_store->set_object_class(cls);
 
-    cls = Class::New<LibraryPrefix>(isolate);
-    cls = Class::New<Type>(isolate);
-    cls = Class::New<TypeRef>(isolate);
-    cls = Class::New<TypeParameter>(isolate);
+    cls = Class::New<LibraryPrefix, RTN::LibraryPrefix>(isolate);
+    cls = Class::New<Type, RTN::Type>(isolate);
+    cls = Class::New<TypeRef, RTN::TypeRef>(isolate);
+    cls = Class::New<TypeParameter, RTN::TypeParameter>(isolate);
 
-    cls = Class::New<Array>(isolate);
+    cls = Class::New<Array, RTN::Array>(isolate);
     object_store->set_array_class(cls);
 
-    cls = Class::New<Array>(kImmutableArrayCid, isolate);
+    cls = Class::New<Array, RTN::Array>(kImmutableArrayCid, isolate);
     object_store->set_immutable_array_class(cls);
 
-    cls = Class::New<GrowableObjectArray>(isolate);
+    cls = Class::New<GrowableObjectArray, RTN::GrowableObjectArray>(isolate);
     object_store->set_growable_object_array_class(cls);
 
-    cls = Class::New<LinkedHashMap>(isolate);
+    cls = Class::New<LinkedHashMap, RTN::LinkedHashMap>(isolate);
     object_store->set_linked_hash_map_class(cls);
 
-    cls = Class::New<Float32x4>(isolate);
+    cls = Class::New<Float32x4, RTN::Float32x4>(isolate);
     object_store->set_float32x4_class(cls);
 
-    cls = Class::New<Int32x4>(isolate);
+    cls = Class::New<Int32x4, RTN::Int32x4>(isolate);
     object_store->set_int32x4_class(cls);
 
-    cls = Class::New<Float64x2>(isolate);
+    cls = Class::New<Float64x2, RTN::Float64x2>(isolate);
     object_store->set_float64x2_class(cls);
 
 #define REGISTER_TYPED_DATA_CLASS(clazz)                                       \
@@ -2307,44 +2340,45 @@
     CLASS_LIST_TYPED_DATA(REGISTER_EXT_TYPED_DATA_CLASS);
 #undef REGISTER_EXT_TYPED_DATA_CLASS
 
-    cls = Class::New<Instance>(kFfiNativeTypeCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kFfiNativeTypeCid, isolate);
     object_store->set_ffi_native_type_class(cls);
 
 #define REGISTER_FFI_CLASS(clazz)                                              \
-  cls = Class::New<Instance>(kFfi##clazz##Cid, isolate);
+  cls = Class::New<Instance, RTN::Instance>(kFfi##clazz##Cid, isolate);
     CLASS_LIST_FFI_TYPE_MARKER(REGISTER_FFI_CLASS);
 #undef REGISTER_FFI_CLASS
 
 #define REGISTER_WASM_CLASS(clazz)                                             \
-  cls = Class::New<Instance>(k##clazz##Cid, isolate);
+  cls = Class::New<Instance, RTN::Instance>(k##clazz##Cid, isolate);
     CLASS_LIST_WASM(REGISTER_WASM_CLASS);
 #undef REGISTER_WASM_CLASS
 
-    cls = Class::New<Instance>(kFfiNativeFunctionCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kFfiNativeFunctionCid, isolate);
 
     cls = Class::NewPointerClass(kFfiPointerCid, isolate);
     object_store->set_ffi_pointer_class(cls);
 
-    cls = Class::New<DynamicLibrary>(kFfiDynamicLibraryCid, isolate);
+    cls = Class::New<DynamicLibrary, RTN::DynamicLibrary>(kFfiDynamicLibraryCid,
+                                                          isolate);
 
-    cls = Class::New<Instance>(kByteBufferCid, isolate,
-                               /*register_isolate=*/false);
-    cls.set_instance_size_in_words(0);
+    cls = Class::New<Instance, RTN::Instance>(kByteBufferCid, isolate,
+                                              /*register_isolate=*/false);
+    cls.set_instance_size_in_words(0, 0);
     isolate->RegisterClass(cls);
 
-    cls = Class::New<Integer>(isolate);
+    cls = Class::New<Integer, RTN::Integer>(isolate);
     object_store->set_integer_implementation_class(cls);
 
-    cls = Class::New<Smi>(isolate);
+    cls = Class::New<Smi, RTN::Smi>(isolate);
     object_store->set_smi_class(cls);
 
-    cls = Class::New<Mint>(isolate);
+    cls = Class::New<Mint, RTN::Mint>(isolate);
     object_store->set_mint_class(cls);
 
-    cls = Class::New<Double>(isolate);
+    cls = Class::New<Double, RTN::Double>(isolate);
     object_store->set_double_class(cls);
 
-    cls = Class::New<Closure>(isolate);
+    cls = Class::New<Closure, RTN::Closure>(isolate);
     object_store->set_closure_class(cls);
 
     cls = Class::NewStringClass(kOneByteStringCid, isolate);
@@ -2359,26 +2393,27 @@
     cls = Class::NewStringClass(kExternalTwoByteStringCid, isolate);
     object_store->set_external_two_byte_string_class(cls);
 
-    cls = Class::New<Bool>(isolate);
+    cls = Class::New<Bool, RTN::Bool>(isolate);
     object_store->set_bool_class(cls);
 
-    cls = Class::New<Instance>(kNullCid, isolate);
+    cls = Class::New<Instance, RTN::Instance>(kNullCid, isolate);
     object_store->set_null_class(cls);
 
-    cls = Class::New<Capability>(isolate);
-    cls = Class::New<ReceivePort>(isolate);
-    cls = Class::New<SendPort>(isolate);
-    cls = Class::New<StackTrace>(isolate);
-    cls = Class::New<RegExp>(isolate);
-    cls = Class::New<Number>(isolate);
+    cls = Class::New<Capability, RTN::Capability>(isolate);
+    cls = Class::New<ReceivePort, RTN::ReceivePort>(isolate);
+    cls = Class::New<SendPort, RTN::SendPort>(isolate);
+    cls = Class::New<StackTrace, RTN::StackTrace>(isolate);
+    cls = Class::New<RegExp, RTN::RegExp>(isolate);
+    cls = Class::New<Number, RTN::Number>(isolate);
 
-    cls = Class::New<WeakProperty>(isolate);
+    cls = Class::New<WeakProperty, RTN::WeakProperty>(isolate);
     object_store->set_weak_property_class(cls);
 
-    cls = Class::New<MirrorReference>(isolate);
-    cls = Class::New<UserTag>(isolate);
+    cls = Class::New<MirrorReference, RTN::MirrorReference>(isolate);
+    cls = Class::New<UserTag, RTN::UserTag>(isolate);
 
-    cls = Class::New<TransferableTypedData>(isolate);
+    cls =
+        Class::New<TransferableTypedData, RTN::TransferableTypedData>(isolate);
   }
   return Error::null();
 }
@@ -2647,7 +2682,7 @@
   return ClassFinalizer::FinalizeType(*this, type);
 }
 
-template <class FakeObject>
+template <class FakeObject, class TargetFakeObject>
 RawClass* Class::New(Isolate* isolate, bool register_class) {
   ASSERT(Object::class_class() != Class::null());
   Class& result = Class::Handle();
@@ -2660,9 +2695,15 @@
   Object::VerifyBuiltinVtable<FakeObject>(FakeObject::kClassId);
   result.set_token_pos(TokenPosition::kNoSource);
   result.set_end_token_pos(TokenPosition::kNoSource);
-  result.set_instance_size(FakeObject::InstanceSize());
-  result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
-  result.set_next_field_offset(FakeObject::NextFieldOffset());
+  result.set_instance_size(FakeObject::InstanceSize(),
+                           compiler::target::RoundedAllocationSize(
+                               TargetFakeObject::InstanceSize()));
+  result.set_type_arguments_field_offset_in_words(kNoTypeArguments,
+                                                  RTN::Class::kNoTypeArguments);
+  const intptr_t host_next_field_offset = FakeObject::NextFieldOffset();
+  const intptr_t target_next_field_offset = TargetFakeObject::NextFieldOffset();
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   COMPILE_ASSERT((FakeObject::kClassId != kInstanceCid));
   result.set_id(FakeObject::kClassId);
   result.set_num_type_arguments(0);
@@ -2727,7 +2768,7 @@
   Array& array = Array::Handle(raw_ptr()->offset_in_words_to_field_);
   if (array.IsNull()) {
     ASSERT(is_finalized());
-    const intptr_t length = raw_ptr()->instance_size_in_words_;
+    const intptr_t length = raw_ptr()->host_instance_size_in_words_;
     array = Array::New(length, Heap::kOld);
     Class& cls = Class::Handle(this->raw());
     Array& fields = Array::Handle();
@@ -2737,7 +2778,7 @@
       for (intptr_t i = 0; i < fields.Length(); ++i) {
         f ^= fields.At(i);
         if (f.is_instance()) {
-          array.SetAt(f.Offset() >> kWordSizeLog2, f);
+          array.SetAt(f.HostOffset() >> kWordSizeLog2, f);
         }
       }
       cls = cls.SuperClass(original_classes);
@@ -3120,51 +3161,127 @@
   return TypeParameter::null();
 }
 
-void Class::CalculateFieldOffsets() const {
+UnboxedFieldBitmap Class::CalculateFieldOffsets() const {
   Array& flds = Array::Handle(fields());
   const Class& super = Class::Handle(SuperClass());
-  intptr_t offset = 0;
-  intptr_t type_args_field_offset = kNoTypeArguments;
+  intptr_t host_offset = 0;
+  UnboxedFieldBitmap host_bitmap{};
+  // Target offsets might differ if the word size are different
+  intptr_t target_offset = 0;
+  intptr_t host_type_args_field_offset = kNoTypeArguments;
+  intptr_t target_type_args_field_offset = RTN::Class::kNoTypeArguments;
   if (super.IsNull()) {
-    offset = Instance::NextFieldOffset();
-    ASSERT(offset > 0);
+    host_offset = Instance::NextFieldOffset();
+    target_offset = RTN::Instance::NextFieldOffset();
+    ASSERT(host_offset > 0);
+    ASSERT(target_offset > 0);
   } else {
     ASSERT(super.is_finalized() || super.is_prefinalized());
-    type_args_field_offset = super.type_arguments_field_offset();
-    offset = super.next_field_offset();
-    ASSERT(offset > 0);
+    host_type_args_field_offset = super.host_type_arguments_field_offset();
+    target_type_args_field_offset = super.target_type_arguments_field_offset();
+    host_offset = super.host_next_field_offset();
+    ASSERT(host_offset > 0);
+    target_offset = super.target_next_field_offset();
+    ASSERT(target_offset > 0);
     // We should never call CalculateFieldOffsets for native wrapper
     // classes, assert this.
     ASSERT(num_native_fields() == 0);
     set_num_native_fields(super.num_native_fields());
+
+    if (FLAG_precompiled_mode) {
+      host_bitmap =
+          Isolate::Current()->shared_class_table()->GetUnboxedFieldsMapAt(
+              super.id());
+    }
   }
   // If the super class is parameterized, use the same type_arguments field,
   // otherwise, if this class is the first in the super chain to be
   // parameterized, introduce a new type_arguments field.
-  if (type_args_field_offset == kNoTypeArguments) {
+  if (host_type_args_field_offset == kNoTypeArguments) {
+    ASSERT(target_type_args_field_offset == RTN::Class::kNoTypeArguments);
     const TypeArguments& type_params = TypeArguments::Handle(type_parameters());
     if (!type_params.IsNull()) {
       ASSERT(type_params.Length() > 0);
       // The instance needs a type_arguments field.
-      type_args_field_offset = offset;
-      offset += kWordSize;
+      host_type_args_field_offset = host_offset;
+      target_type_args_field_offset = target_offset;
+      host_offset += kWordSize;
+      target_offset += compiler::target::kWordSize;
     }
+  } else {
+    ASSERT(target_type_args_field_offset != RTN::Class::kNoTypeArguments);
   }
-  set_type_arguments_field_offset(type_args_field_offset);
-  ASSERT(offset > 0);
+
+  set_type_arguments_field_offset(host_type_args_field_offset,
+                                  target_type_args_field_offset);
+  ASSERT(host_offset > 0);
+  ASSERT(target_offset > 0);
   Field& field = Field::Handle();
-  intptr_t len = flds.Length();
+  const intptr_t len = flds.Length();
   for (intptr_t i = 0; i < len; i++) {
     field ^= flds.At(i);
     // Offset is computed only for instance fields.
     if (!field.is_static()) {
-      ASSERT(field.Offset() == 0);
-      field.SetOffset(offset);
-      offset += kWordSize;
+      ASSERT(field.HostOffset() == 0);
+      ASSERT(field.TargetOffset() == 0);
+      field.SetOffset(host_offset, target_offset);
+
+      if (FLAG_precompiled_mode && field.is_unboxing_candidate()) {
+        intptr_t field_size;
+        switch (field.guarded_cid()) {
+          case kDoubleCid:
+            field_size = sizeof(RawDouble::value_);
+            break;
+          case kFloat32x4Cid:
+            field_size = sizeof(RawFloat32x4::value_);
+            break;
+          case kFloat64x2Cid:
+            field_size = sizeof(RawFloat64x2::value_);
+            break;
+          default:
+            UNREACHABLE();
+            field_size = 0;
+            break;
+        }
+
+        const intptr_t host_num_words = field_size / kWordSize;
+        const intptr_t host_next_offset = host_offset + field_size;
+        const intptr_t host_next_position = host_next_offset / kWordSize;
+
+        const intptr_t target_next_offset = target_offset + field_size;
+        const intptr_t target_next_position =
+            target_next_offset / compiler::target::kWordSize;
+
+        // The bitmap has fixed length. Checks if the offset position is smaller
+        // than its length. If it is not, than the field should be boxed
+        if (host_next_position <= UnboxedFieldBitmap::Length() &&
+            target_next_position <= UnboxedFieldBitmap::Length()) {
+          for (intptr_t j = 0; j < host_num_words; j++) {
+            // Activate the respective bit in the bitmap, indicating that the
+            // content is not a pointer
+            host_bitmap.Set(host_offset / kWordSize);
+            host_offset += kWordSize;
+          }
+
+          ASSERT(host_offset == host_next_offset);
+          target_offset = target_next_offset;
+        } else {
+          // Make the field boxed
+          field.set_is_unboxing_candidate(false);
+          host_offset += kWordSize;
+          target_offset += compiler::target::kWordSize;
+        }
+      } else {
+        host_offset += kWordSize;
+        target_offset += compiler::target::kWordSize;
+      }
     }
   }
-  set_instance_size(RoundedAllocationSize(offset));
-  set_next_field_offset(offset);
+  set_instance_size(RoundedAllocationSize(host_offset),
+                    compiler::target::RoundedAllocationSize(target_offset));
+  set_next_field_offset(host_offset, target_offset);
+
+  return host_bitmap;
 }
 
 void Class::AddInvocationDispatcher(const String& target_name,
@@ -3519,20 +3636,44 @@
 }
 
 void Class::Finalize() const {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(Thread::Current()->IsMutatorThread());
+  auto thread = Thread::Current();
+  auto Z = thread->zone();
+  Isolate* isolate = thread->isolate();
+  ASSERT(thread->IsMutatorThread());
   ASSERT(!isolate->all_classes_finalized());
   ASSERT(!is_finalized());
   // Prefinalized classes have a VM internal representation and no Dart fields.
   // Their instance size  is precomputed and field offsets are known.
   if (!is_prefinalized()) {
-    // Compute offsets of instance fields and instance size.
-    CalculateFieldOffsets();
+    // Compute offsets of instance fields, instance size and bitmap for unboxed
+    // fields.
+    const auto host_bitmap = CalculateFieldOffsets();
     if (raw() == isolate->class_table()->At(id())) {
       // Sets the new size in the class table.
       isolate->class_table()->SetAt(id(), raw());
+      if (FLAG_precompiled_mode) {
+        isolate->shared_class_table()->SetUnboxedFieldsMapAt(id(), host_bitmap);
+      }
     }
   }
+
+  if (SuperClass() == Class::null() ||
+      Class::Handle(Z, SuperClass()).is_const()) {
+    const auto& fields = Array::Handle(Z, this->fields());
+    auto& field = Field::Handle(Z);
+    bool is_const = true;
+    for (intptr_t i = 0; i < fields.Length(); ++i) {
+      field ^= fields.At(i);
+      if (!field.is_static() && !field.is_final()) {
+        is_const = false;
+        break;
+      }
+    }
+    if (is_const) {
+      set_is_const();
+    }
+  }
+
   set_is_finalized();
 }
 
@@ -4040,7 +4181,7 @@
   return true;
 }
 
-template <class FakeInstance>
+template <class FakeInstance, class TargetFakeInstance>
 RawClass* Class::NewCommon(intptr_t index) {
   ASSERT(Object::class_class() != Class::null());
   Class& result = Class::Handle();
@@ -4055,9 +4196,17 @@
                                                                  : index);
   result.set_token_pos(TokenPosition::kNoSource);
   result.set_end_token_pos(TokenPosition::kNoSource);
-  result.set_instance_size(FakeInstance::InstanceSize());
-  result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
-  result.set_next_field_offset(FakeInstance::NextFieldOffset());
+  const intptr_t host_instance_size = FakeInstance::InstanceSize();
+  const intptr_t target_instance_size = compiler::target::RoundedAllocationSize(
+      TargetFakeInstance::InstanceSize());
+  result.set_instance_size(host_instance_size, target_instance_size);
+  result.set_type_arguments_field_offset_in_words(kNoTypeArguments,
+                                                  RTN::Class::kNoTypeArguments);
+  const intptr_t host_next_field_offset = FakeInstance::NextFieldOffset();
+  const intptr_t target_next_field_offset =
+      TargetFakeInstance::NextFieldOffset();
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   result.set_id(index);
   result.set_num_type_arguments(kUnknownNumTypeArguments);
   result.set_num_native_fields(0);
@@ -4068,12 +4217,13 @@
   return result.raw();
 }
 
-template <class FakeInstance>
+template <class FakeInstance, class TargetFakeInstance>
 RawClass* Class::New(intptr_t index,
                      Isolate* isolate,
                      bool register_class,
                      bool is_abstract) {
-  Class& result = Class::Handle(NewCommon<FakeInstance>(index));
+  Class& result =
+      Class::Handle(NewCommon<FakeInstance, TargetFakeInstance>(index));
   if (is_abstract) {
     result.set_is_abstract();
   }
@@ -4088,7 +4238,8 @@
                      const Script& script,
                      TokenPosition token_pos,
                      bool register_class) {
-  Class& result = Class::Handle(NewCommon<Instance>(kIllegalCid));
+  Class& result =
+      Class::Handle(NewCommon<Instance, RTN::Instance>(kIllegalCid));
   result.set_library(lib);
   result.set_name(name);
   result.set_script(script);
@@ -4097,7 +4248,7 @@
   // The size gets initialized to 0. Once the class gets finalized the class
   // finalizer will set the correct size.
   ASSERT(!result.is_finalized() && !result.is_prefinalized());
-  result.set_instance_size_in_words(0);
+  result.set_instance_size_in_words(0, 0);
 
   if (register_class) {
     Isolate::Current()->RegisterClass(result);
@@ -4106,7 +4257,7 @@
 }
 
 RawClass* Class::NewInstanceClass() {
-  return Class::New<Instance>(kIllegalCid, Isolate::Current());
+  return Class::New<Instance, RTN::Instance>(kIllegalCid, Isolate::Current());
 }
 
 RawClass* Class::NewNativeWrapper(const Library& library,
@@ -4121,9 +4272,13 @@
     cls.set_super_type(Type::Handle(Type::ObjectType()));
     // Compute instance size. First word contains a pointer to a properly
     // sized typed array once the first native field has been set.
-    intptr_t instance_size = sizeof(RawInstance) + kWordSize;
-    cls.set_instance_size(RoundedAllocationSize(instance_size));
-    cls.set_next_field_offset(instance_size);
+    const intptr_t host_instance_size = sizeof(RawInstance) + kWordSize;
+    const intptr_t target_instance_size =
+        sizeof(RawInstance) + compiler::target::kWordSize;
+    cls.set_instance_size(
+        RoundedAllocationSize(host_instance_size),
+        compiler::target::RoundedAllocationSize(target_instance_size));
+    cls.set_next_field_offset(host_instance_size, target_instance_size);
     cls.set_num_native_fields(field_count);
     cls.set_is_finalized();
     cls.set_is_declaration_loaded();
@@ -4137,21 +4292,33 @@
 }
 
 RawClass* Class::NewStringClass(intptr_t class_id, Isolate* isolate) {
-  intptr_t instance_size;
+  intptr_t host_instance_size, target_instance_size;
   if (class_id == kOneByteStringCid) {
-    instance_size = OneByteString::InstanceSize();
+    host_instance_size = OneByteString::InstanceSize();
+    target_instance_size = compiler::target::RoundedAllocationSize(
+        RTN::OneByteString::InstanceSize());
   } else if (class_id == kTwoByteStringCid) {
-    instance_size = TwoByteString::InstanceSize();
+    host_instance_size = TwoByteString::InstanceSize();
+    target_instance_size = compiler::target::RoundedAllocationSize(
+        RTN::TwoByteString::InstanceSize());
   } else if (class_id == kExternalOneByteStringCid) {
-    instance_size = ExternalOneByteString::InstanceSize();
+    host_instance_size = ExternalOneByteString::InstanceSize();
+    target_instance_size = compiler::target::RoundedAllocationSize(
+        RTN::ExternalOneByteString::InstanceSize());
   } else {
     ASSERT(class_id == kExternalTwoByteStringCid);
-    instance_size = ExternalTwoByteString::InstanceSize();
+    host_instance_size = ExternalTwoByteString::InstanceSize();
+    target_instance_size = compiler::target::RoundedAllocationSize(
+        RTN::ExternalTwoByteString::InstanceSize());
   }
-  Class& result =
-      Class::Handle(New<String>(class_id, isolate, /*register_class=*/false));
-  result.set_instance_size(instance_size);
-  result.set_next_field_offset(String::NextFieldOffset());
+  Class& result = Class::Handle(
+      New<String, RTN::String>(class_id, isolate, /*register_class=*/false));
+  result.set_instance_size(host_instance_size, target_instance_size);
+
+  const intptr_t host_next_field_offset = String::NextFieldOffset();
+  const intptr_t target_next_field_offset = RTN::String::NextFieldOffset();
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   result.set_is_prefinalized();
   isolate->RegisterClass(result);
   return result.raw();
@@ -4159,11 +4326,17 @@
 
 RawClass* Class::NewTypedDataClass(intptr_t class_id, Isolate* isolate) {
   ASSERT(RawObject::IsTypedDataClassId(class_id));
-  intptr_t instance_size = TypedData::InstanceSize();
-  Class& result = Class::Handle(
-      New<TypedData>(class_id, isolate, /*register_class=*/false));
-  result.set_instance_size(instance_size);
-  result.set_next_field_offset(TypedData::NextFieldOffset());
+  const intptr_t host_instance_size = TypedData::InstanceSize();
+  const intptr_t target_instance_size =
+      compiler::target::RoundedAllocationSize(RTN::TypedData::InstanceSize());
+  Class& result = Class::Handle(New<TypedData, RTN::TypedData>(
+      class_id, isolate, /*register_class=*/false));
+  result.set_instance_size(host_instance_size, target_instance_size);
+
+  const intptr_t host_next_field_offset = TypedData::NextFieldOffset();
+  const intptr_t target_next_field_offset = RTN::TypedData::NextFieldOffset();
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   result.set_is_prefinalized();
   isolate->RegisterClass(result);
   return result.raw();
@@ -4171,11 +4344,18 @@
 
 RawClass* Class::NewTypedDataViewClass(intptr_t class_id, Isolate* isolate) {
   ASSERT(RawObject::IsTypedDataViewClassId(class_id));
-  const intptr_t instance_size = TypedDataView::InstanceSize();
-  Class& result = Class::Handle(
-      New<TypedDataView>(class_id, isolate, /*register_class=*/false));
-  result.set_instance_size(instance_size);
-  result.set_next_field_offset(TypedDataView::NextFieldOffset());
+  const intptr_t host_instance_size = TypedDataView::InstanceSize();
+  const intptr_t target_instance_size = compiler::target::RoundedAllocationSize(
+      RTN::TypedDataView::InstanceSize());
+  Class& result = Class::Handle(New<TypedDataView, RTN::TypedDataView>(
+      class_id, isolate, /*register_class=*/false));
+  result.set_instance_size(host_instance_size, target_instance_size);
+
+  const intptr_t host_next_field_offset = TypedDataView::NextFieldOffset();
+  const intptr_t target_next_field_offset =
+      RTN::TypedDataView::NextFieldOffset();
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   result.set_is_prefinalized();
   isolate->RegisterClass(result);
   return result.raw();
@@ -4184,11 +4364,18 @@
 RawClass* Class::NewExternalTypedDataClass(intptr_t class_id,
                                            Isolate* isolate) {
   ASSERT(RawObject::IsExternalTypedDataClassId(class_id));
-  intptr_t instance_size = ExternalTypedData::InstanceSize();
-  Class& result = Class::Handle(
-      New<ExternalTypedData>(class_id, isolate, /*register_class=*/false));
-  result.set_instance_size(instance_size);
-  result.set_next_field_offset(ExternalTypedData::NextFieldOffset());
+  const intptr_t host_instance_size = ExternalTypedData::InstanceSize();
+  const intptr_t target_instance_size = compiler::target::RoundedAllocationSize(
+      RTN::ExternalTypedData::InstanceSize());
+  Class& result = Class::Handle(New<ExternalTypedData, RTN::ExternalTypedData>(
+      class_id, isolate, /*register_class=*/false));
+
+  const intptr_t host_next_field_offset = ExternalTypedData::NextFieldOffset();
+  const intptr_t target_next_field_offset =
+      RTN::ExternalTypedData::NextFieldOffset();
+  result.set_instance_size(host_instance_size, target_instance_size);
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   result.set_is_prefinalized();
   isolate->RegisterClass(result);
   return result.raw();
@@ -4196,12 +4383,20 @@
 
 RawClass* Class::NewPointerClass(intptr_t class_id, Isolate* isolate) {
   ASSERT(RawObject::IsFfiPointerClassId(class_id));
-  intptr_t instance_size = Pointer::InstanceSize();
-  Class& result =
-      Class::Handle(New<Pointer>(class_id, isolate, /*register_class=*/false));
-  result.set_instance_size(instance_size);
-  result.set_type_arguments_field_offset(Pointer::type_arguments_offset());
-  result.set_next_field_offset(Pointer::NextFieldOffset());
+  intptr_t host_instance_size = Pointer::InstanceSize();
+  intptr_t target_instance_size =
+      compiler::target::RoundedAllocationSize(RTN::Pointer::InstanceSize());
+  Class& result = Class::Handle(
+      New<Pointer, RTN::Pointer>(class_id, isolate, /*register_class=*/false));
+  result.set_instance_size(host_instance_size, target_instance_size);
+  result.set_type_arguments_field_offset(Pointer::type_arguments_offset(),
+                                         RTN::Pointer::type_arguments_offset());
+
+  const intptr_t host_next_field_offset = Pointer::NextFieldOffset();
+  const intptr_t target_next_field_offset = RTN::Pointer::NextFieldOffset();
+
+  result.set_next_field_offset(host_next_field_offset,
+                               target_next_field_offset);
   result.set_is_prefinalized();
   isolate->RegisterClass(result);
   return result.raw();
@@ -8793,12 +8988,6 @@
   }
 }
 
-void Instance::SetField(const Field& field, const Object& value) const {
-  field.RecordStore(value);
-  const Object* stored_value = field.CloneForUnboxed(value);
-  StorePointer(FieldAddr(field), stored_value->raw());
-}
-
 const Object* Field::CloneForUnboxed(const Object& value) const {
   if (FLAG_unbox_numeric_fields && is_unboxing_candidate() && !is_nullable()) {
     switch (guarded_cid()) {
@@ -8993,7 +9182,7 @@
   result.set_name(name);
   result.set_is_static(is_static);
   if (!is_static) {
-    result.SetOffset(0);
+    result.SetOffset(0, 0);
   }
   result.set_is_final(is_final);
   result.set_is_const(is_const);
@@ -9005,7 +9194,12 @@
   result.set_end_token_pos(end_token_pos);
   result.set_has_nontrivial_initializer(false);
   result.set_has_initializer(false);
-  result.set_is_unboxing_candidate(!is_final && !is_late && !is_static);
+  if (FLAG_precompiled_mode) {
+    // May be updated by KernelLoader::ReadInferredType
+    result.set_is_unboxing_candidate(false);
+  } else {
+    result.set_is_unboxing_candidate(!is_final && !is_late && !is_static);
+  }
   result.set_initializer_changed_after_initialization(false);
   NOT_IN_PRECOMPILED(result.set_is_declared_in_bytecode(false));
   NOT_IN_PRECOMPILED(result.set_binary_declaration_offset(0));
@@ -9592,7 +9786,7 @@
 }
 
 static StaticTypeExactnessState TrivialTypeExactnessFor(const Class& cls) {
-  const intptr_t type_arguments_offset = cls.type_arguments_field_offset();
+  const intptr_t type_arguments_offset = cls.host_type_arguments_field_offset();
   ASSERT(type_arguments_offset != Class::kNoTypeArguments);
   if (StaticTypeExactnessState::CanRepresentAsTriviallyExact(
           type_arguments_offset / kWordSize)) {
@@ -16892,10 +17086,19 @@
   hash = instance_size / kWordSize;
   uword this_addr = reinterpret_cast<uword>(this->raw_ptr());
   Instance& member = Instance::Handle();
+  const auto unboxed_fields_bitmap =
+      thread->isolate()->shared_class_table()->GetUnboxedFieldsMapAt(
+          GetClassId());
+
   for (intptr_t offset = Instance::NextFieldOffset(); offset < instance_size;
        offset += kWordSize) {
-    member ^= *reinterpret_cast<RawObject**>(this_addr + offset);
-    hash = CombineHashes(hash, member.CanonicalizeHash());
+    if (unboxed_fields_bitmap.Get(offset / kWordSize)) {
+      hash =
+          CombineHashes(hash, *reinterpret_cast<intptr_t*>(this_addr + offset));
+    } else {
+      member ^= *reinterpret_cast<RawObject**>(this_addr + offset);
+      hash = CombineHashes(hash, member.CanonicalizeHash());
+    }
   }
   hash = FinalizeHash(hash, String::kHashBits);
   thread->heap()->SetCanonicalHash(raw(), hash);
@@ -16927,15 +17130,22 @@
                                           const char** error_str) const {
   ASSERT(error_str != NULL);
   ASSERT(*error_str == NULL);
-  if (GetClassId() >= kNumPredefinedCids) {
+  const intptr_t class_id = GetClassId();
+  if (class_id >= kNumPredefinedCids) {
     // Iterate over all fields, canonicalize numbers and strings, expect all
     // other instances to be canonical otherwise report error (return false).
     Zone* zone = thread->zone();
     Object& obj = Object::Handle(zone);
     const intptr_t instance_size = SizeFromClass();
     ASSERT(instance_size != 0);
+    const auto unboxed_fields_bitmap =
+        thread->isolate()->shared_class_table()->GetUnboxedFieldsMapAt(
+            GetClassId());
     for (intptr_t offset = Instance::NextFieldOffset(); offset < instance_size;
          offset += kWordSize) {
+      if (unboxed_fields_bitmap.Get(offset / kWordSize)) {
+        continue;
+      }
       obj = *this->FieldAddrAtOffset(offset);
       if (obj.IsInstance() && !obj.IsSmi() && !obj.IsCanonical()) {
         if (obj.IsNumber() || obj.IsString()) {
@@ -17014,6 +17224,53 @@
 }
 #endif  // DEBUG
 
+RawObject* Instance::GetField(const Field& field) const {
+  if (FLAG_precompiled_mode && field.is_unboxing_candidate()) {
+    switch (field.guarded_cid()) {
+      case kDoubleCid:
+        return Double::New(
+            LoadNonPointer(reinterpret_cast<double_t*>(FieldAddr(field))));
+      case kFloat32x4Cid:
+        return Float32x4::New(
+            *reinterpret_cast<simd128_value_t*>(FieldAddr(field)));
+      case kFloat64x2Cid:
+        return Float64x2::New(
+            *reinterpret_cast<simd128_value_t*>(FieldAddr(field)));
+      default:
+        UNREACHABLE();
+        return nullptr;
+    }
+  } else {
+    return *FieldAddr(field);
+  }
+}
+
+void Instance::SetField(const Field& field, const Object& value) const {
+  if (FLAG_precompiled_mode && field.is_unboxing_candidate()) {
+    switch (field.guarded_cid()) {
+      case kDoubleCid:
+        StoreNonPointer(reinterpret_cast<double_t*>(FieldAddr(field)),
+                        Double::Cast(value).value());
+        break;
+      case kFloat32x4Cid:
+        StoreNonPointer(reinterpret_cast<simd128_value_t*>(FieldAddr(field)),
+                        Float32x4::Cast(value).value());
+        break;
+      case kFloat64x2Cid:
+        StoreNonPointer(reinterpret_cast<simd128_value_t*>(FieldAddr(field)),
+                        Float64x2::Cast(value).value());
+        break;
+      default:
+        UNREACHABLE();
+        break;
+    }
+  } else {
+    field.RecordStore(value);
+    const Object* stored_value = field.CloneForUnboxed(value);
+    StorePointer(FieldAddr(field), stored_value->raw());
+  }
+}
+
 RawAbstractType* Instance::GetType(Heap::Space space) const {
   if (IsNull()) {
     return Type::NullType();
@@ -17058,7 +17315,7 @@
 RawTypeArguments* Instance::GetTypeArguments() const {
   ASSERT(!IsType());
   const Class& cls = Class::Handle(clazz());
-  intptr_t field_offset = cls.type_arguments_field_offset();
+  intptr_t field_offset = cls.host_type_arguments_field_offset();
   ASSERT(field_offset != Class::kNoTypeArguments);
   TypeArguments& type_arguments = TypeArguments::Handle();
   type_arguments ^= *FieldAddrAtOffset(field_offset);
@@ -17069,7 +17326,7 @@
   ASSERT(!IsType());
   ASSERT(value.IsNull() || value.IsCanonical());
   const Class& cls = Class::Handle(clazz());
-  intptr_t field_offset = cls.type_arguments_field_offset();
+  intptr_t field_offset = cls.host_type_arguments_field_offset();
   ASSERT(field_offset != Class::kNoTypeArguments);
   SetFieldAtOffset(field_offset, value);
 }
@@ -17436,17 +17693,18 @@
   if (cls.EnsureIsFinalized(thread) != Error::null()) {
     return Instance::null();
   }
-  intptr_t instance_size = cls.instance_size();
+  intptr_t instance_size = cls.host_instance_size();
   ASSERT(instance_size > 0);
   RawObject* raw = Object::Allocate(cls.id(), instance_size, space);
   return reinterpret_cast<RawInstance*>(raw);
 }
 
 RawInstance* Instance::NewFromCidAndSize(SharedClassTable* shared_class_table,
-                                         classid_t cid) {
+                                         classid_t cid,
+                                         Heap::Space heap) {
   const intptr_t instance_size = shared_class_table->SizeAt(cid);
   ASSERT(instance_size > 0);
-  RawObject* raw = Object::Allocate(cid, instance_size, Heap::kNew);
+  RawObject* raw = Object::Allocate(cid, instance_size, heap);
   return reinterpret_cast<RawInstance*>(raw);
 }
 
@@ -17455,7 +17713,7 @@
   REUSABLE_CLASS_HANDLESCOPE(thread);
   Class& cls = thread->ClassHandle();
   cls = clazz();
-  return (offset >= 0 && offset <= (cls.instance_size() - kWordSize));
+  return (offset >= 0 && offset <= (cls.host_instance_size() - kWordSize));
 }
 
 intptr_t Instance::ElementSizeFor(intptr_t cid) {
@@ -17618,7 +17876,9 @@
   }
   // TODO(regis): TypeRefs are problematic, since changing the nullability of
   // a type by cloning it may break the graph of a recursive type.
-  UNREACHABLE();
+  ASSERT(IsTypeRef());
+  return AbstractType::Handle(TypeRef::Cast(*this).type())
+      .CheckInstantiatedNullability(mode, type_param, space);
 }
 
 bool AbstractType::IsInstantiated(Genericity genericity,
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 2759213..ff4a902 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -266,6 +266,15 @@
 #define MINT_OBJECT_IMPLEMENTATION(object, rettype, super)                     \
   FINAL_HEAP_OBJECT_IMPLEMENTATION_HELPER(object, rettype, super)
 
+// In precompiled runtime, there is no access to runtime_api.cc since host
+// and target are the same. In those cases, the namespace dart is used to refer
+// to the target namespace
+#if defined(DART_PRECOMPILED_RUNTIME)
+namespace RTN = dart;
+#else
+namespace RTN = dart::compiler::target;
+#endif  //  defined(DART_PRECOMPILED_RUNTIME)
+
 class Object {
  public:
   using RawObjectType = RawObject;
@@ -885,36 +894,88 @@
     kInvocationDispatcherEntrySize,
   };
 
-  intptr_t instance_size() const {
+  intptr_t host_instance_size() const {
     ASSERT(is_finalized() || is_prefinalized());
-    return (raw_ptr()->instance_size_in_words_ * kWordSize);
+    return (raw_ptr()->host_instance_size_in_words_ * kWordSize);
   }
-  static intptr_t instance_size(RawClass* clazz) {
-    return (clazz->ptr()->instance_size_in_words_ * kWordSize);
+  intptr_t target_instance_size() const {
+    ASSERT(is_finalized() || is_prefinalized());
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return (raw_ptr()->target_instance_size_in_words_ *
+            compiler::target::kWordSize);
+#else
+    return host_instance_size();
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
   }
-  void set_instance_size(intptr_t value_in_bytes) const {
+  static intptr_t host_instance_size(RawClass* clazz) {
+    return (clazz->ptr()->host_instance_size_in_words_ * kWordSize);
+  }
+  static intptr_t target_instance_size(RawClass* clazz) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return (clazz->ptr()->target_instance_size_in_words_ *
+            compiler::target::kWordSize);
+#else
+    return host_instance_size(clazz);
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+  }
+  void set_instance_size(intptr_t host_value_in_bytes,
+                         intptr_t target_value_in_bytes) const {
     ASSERT(kWordSize != 0);
-    set_instance_size_in_words(value_in_bytes / kWordSize);
+    set_instance_size_in_words(
+        host_value_in_bytes / kWordSize,
+        target_value_in_bytes / compiler::target::kWordSize);
   }
-  void set_instance_size_in_words(intptr_t value) const {
-    ASSERT(Utils::IsAligned((value * kWordSize), kObjectAlignment));
-    StoreNonPointer(&raw_ptr()->instance_size_in_words_, value);
+  void set_instance_size_in_words(intptr_t host_value,
+                                  intptr_t target_value) const {
+    ASSERT(Utils::IsAligned((host_value * kWordSize), kObjectAlignment));
+    StoreNonPointer(&raw_ptr()->host_instance_size_in_words_, host_value);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    ASSERT(Utils::IsAligned((target_value * compiler::target::kWordSize),
+                            compiler::target::kObjectAlignment));
+    StoreNonPointer(&raw_ptr()->target_instance_size_in_words_, target_value);
+#else
+    ASSERT(host_value == target_value);
+#endif  // #!defined(DART_PRECOMPILED_RUNTIME)
   }
 
-  intptr_t next_field_offset() const {
-    return raw_ptr()->next_field_offset_in_words_ * kWordSize;
+  intptr_t host_next_field_offset() const {
+    return raw_ptr()->host_next_field_offset_in_words_ * kWordSize;
   }
-  void set_next_field_offset(intptr_t value_in_bytes) const {
-    ASSERT(kWordSize != 0);
-    set_next_field_offset_in_words(value_in_bytes / kWordSize);
+  intptr_t target_next_field_offset() const {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return raw_ptr()->target_next_field_offset_in_words_ *
+           compiler::target::kWordSize;
+#else
+    return host_next_field_offset();
+#endif  // #!defined(DART_PRECOMPILED_RUNTIME)
   }
-  void set_next_field_offset_in_words(intptr_t value) const {
-    ASSERT((value == -1) ||
-           (Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
-            (value == raw_ptr()->instance_size_in_words_)) ||
-           (!Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
-            ((value + 1) == raw_ptr()->instance_size_in_words_)));
-    StoreNonPointer(&raw_ptr()->next_field_offset_in_words_, value);
+  void set_next_field_offset(intptr_t host_value_in_bytes,
+                             intptr_t target_value_in_bytes) const {
+    set_next_field_offset_in_words(
+        host_value_in_bytes / kWordSize,
+        target_value_in_bytes / compiler::target::kWordSize);
+  }
+  void set_next_field_offset_in_words(intptr_t host_value,
+                                      intptr_t target_value) const {
+    ASSERT((host_value == -1) ||
+           (Utils::IsAligned((host_value * kWordSize), kObjectAlignment) &&
+            (host_value == raw_ptr()->host_instance_size_in_words_)) ||
+           (!Utils::IsAligned((host_value * kWordSize), kObjectAlignment) &&
+            ((host_value + 1) == raw_ptr()->host_instance_size_in_words_)));
+    StoreNonPointer(&raw_ptr()->host_next_field_offset_in_words_, host_value);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    ASSERT((target_value == -1) ||
+           (Utils::IsAligned((target_value * compiler::target::kWordSize),
+                             compiler::target::kObjectAlignment) &&
+            (target_value == raw_ptr()->target_instance_size_in_words_)) ||
+           (!Utils::IsAligned((target_value * compiler::target::kWordSize),
+                              compiler::target::kObjectAlignment) &&
+            ((target_value + 1) == raw_ptr()->target_instance_size_in_words_)));
+    StoreNonPointer(&raw_ptr()->target_next_field_offset_in_words_,
+                    target_value);
+#else
+    ASSERT(host_value == target_value);
+#endif  // #!defined(DART_PRECOMPILED_RUNTIME)
   }
 
   static bool is_valid_id(intptr_t value) {
@@ -1013,28 +1074,64 @@
 
   // If this class is parameterized, each instance has a type_arguments field.
   static const intptr_t kNoTypeArguments = -1;
-  intptr_t type_arguments_field_offset() const {
+  intptr_t host_type_arguments_field_offset() const {
     ASSERT(is_type_finalized() || is_prefinalized());
-    if (raw_ptr()->type_arguments_field_offset_in_words_ == kNoTypeArguments) {
+    if (raw_ptr()->host_type_arguments_field_offset_in_words_ ==
+        kNoTypeArguments) {
       return kNoTypeArguments;
     }
-    return raw_ptr()->type_arguments_field_offset_in_words_ * kWordSize;
+    return raw_ptr()->host_type_arguments_field_offset_in_words_ * kWordSize;
   }
-  void set_type_arguments_field_offset(intptr_t value_in_bytes) const {
-    intptr_t value;
-    if (value_in_bytes == kNoTypeArguments) {
-      value = kNoTypeArguments;
-    } else {
-      ASSERT(kWordSize != 0);
-      value = value_in_bytes / kWordSize;
+  intptr_t target_type_arguments_field_offset() const {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    ASSERT(is_type_finalized() || is_prefinalized());
+    if (raw_ptr()->target_type_arguments_field_offset_in_words_ ==
+        compiler::target::Class::kNoTypeArguments) {
+      return compiler::target::Class::kNoTypeArguments;
     }
-    set_type_arguments_field_offset_in_words(value);
+    return raw_ptr()->target_type_arguments_field_offset_in_words_ *
+           compiler::target::kWordSize;
+#else
+    return host_type_arguments_field_offset();
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
   }
-  void set_type_arguments_field_offset_in_words(intptr_t value) const {
-    StoreNonPointer(&raw_ptr()->type_arguments_field_offset_in_words_, value);
+  void set_type_arguments_field_offset(intptr_t host_value_in_bytes,
+                                       intptr_t target_value_in_bytes) const {
+    intptr_t host_value, target_value;
+    if (host_value_in_bytes == kNoTypeArguments ||
+        target_value_in_bytes == RTN::Class::kNoTypeArguments) {
+      ASSERT(host_value_in_bytes == kNoTypeArguments &&
+             target_value_in_bytes == RTN::Class::kNoTypeArguments);
+      host_value = kNoTypeArguments;
+      target_value = RTN::Class::kNoTypeArguments;
+    } else {
+      ASSERT(kWordSize != 0 && compiler::target::kWordSize);
+      host_value = host_value_in_bytes / kWordSize;
+      target_value = target_value_in_bytes / compiler::target::kWordSize;
+    }
+    set_type_arguments_field_offset_in_words(host_value, target_value);
   }
-  static intptr_t type_arguments_field_offset_in_words_offset() {
-    return OFFSET_OF(RawClass, type_arguments_field_offset_in_words_);
+  void set_type_arguments_field_offset_in_words(intptr_t host_value,
+                                                intptr_t target_value) const {
+    StoreNonPointer(&raw_ptr()->host_type_arguments_field_offset_in_words_,
+                    host_value);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    StoreNonPointer(&raw_ptr()->target_type_arguments_field_offset_in_words_,
+                    target_value);
+#else
+    ASSERT(host_value == target_value);
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
+  }
+  static intptr_t host_type_arguments_field_offset_in_words_offset() {
+    return OFFSET_OF(RawClass, host_type_arguments_field_offset_in_words_);
+  }
+
+  static intptr_t target_type_arguments_field_offset_in_words_offset() {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return OFFSET_OF(RawClass, target_type_arguments_field_offset_in_words_);
+#else
+    return host_type_arguments_field_offset_in_words_offset();
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
   }
 
   // The super type of this class, Object type if not explicitly specified.
@@ -1395,7 +1492,7 @@
   RawError* EnsureIsFinalized(Thread* thread) const;
 
   // Allocate a class used for VM internal objects.
-  template <class FakeObject>
+  template <class FakeObject, class TargetFakeObject>
   static RawClass* New(Isolate* isolate, bool register_class = true);
 
   // Allocate instance classes.
@@ -1460,6 +1557,44 @@
                                const Array& args_desc,
                                const Function& dispatcher) const;
 
+  static int32_t host_instance_size_in_words(const RawClass* cls) {
+    return cls->ptr()->host_instance_size_in_words_;
+  }
+
+  static int32_t target_instance_size_in_words(const RawClass* cls) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return cls->ptr()->target_instance_size_in_words_;
+#else
+    return host_instance_size_in_words(cls);
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
+  }
+
+  static int32_t host_next_field_offset_in_words(const RawClass* cls) {
+    return cls->ptr()->host_next_field_offset_in_words_;
+  }
+
+  static int32_t target_next_field_offset_in_words(const RawClass* cls) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return cls->ptr()->target_next_field_offset_in_words_;
+#else
+    return host_next_field_offset_in_words(cls);
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
+  }
+
+  static int32_t host_type_arguments_field_offset_in_words(
+      const RawClass* cls) {
+    return cls->ptr()->host_type_arguments_field_offset_in_words_;
+  }
+
+  static int32_t target_type_arguments_field_offset_in_words(
+      const RawClass* cls) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return cls->ptr()->target_type_arguments_field_offset_in_words_;
+#else
+    return host_type_arguments_field_offset_in_words(cls);
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
+  }
+
  private:
   RawType* declaration_type() const { return raw_ptr()->declaration_type_; }
 
@@ -1474,7 +1609,7 @@
   // Tells whether instances need morphing for reload.
   bool RequiresInstanceMorphing(const Class& replacement) const;
 
-  template <class FakeObject>
+  template <class FakeInstance, class TargetFakeInstance>
   static RawClass* NewCommon(intptr_t index);
 
   enum MemberKind {
@@ -1538,7 +1673,8 @@
                                           const Array& args_desc,
                                           RawFunction::Kind kind) const;
 
-  void CalculateFieldOffsets() const;
+  // Returns the bitmap of unboxed fields
+  UnboxedFieldBitmap CalculateFieldOffsets() const;
 
   // functions_hash_table is in use iff there are at least this many functions.
   static const intptr_t kFunctionLookupHashTreshold = 16;
@@ -1576,7 +1712,7 @@
                                       const String& name) const;
 
   // Allocate an instance class which has a VM implementation.
-  template <class FakeInstance>
+  template <class FakeInstance, class TargetFakeInstance>
   static RawClass* New(intptr_t id,
                        Isolate* isolate,
                        bool register_class = true,
@@ -3643,15 +3779,19 @@
 
   intptr_t KernelDataProgramOffset() const;
 
-  inline intptr_t Offset() const;
   // Called during class finalization.
-  inline void SetOffset(intptr_t offset_in_bytes) const;
+  inline void SetOffset(intptr_t host_offset_in_bytes,
+                        intptr_t target_offset_in_bytes) const;
+
+  inline intptr_t HostOffset() const;
+
+  inline intptr_t TargetOffset() const;
 
   inline RawInstance* StaticValue() const;
   void SetStaticValue(const Instance& value,
                       bool save_initial_value = false) const;
 
-  intptr_t field_id() const { return raw_ptr()->offset_or_field_id_; }
+  intptr_t field_id() const { return raw_ptr()->host_offset_or_field_id_; }
   inline void set_field_id(intptr_t field_id) const;
 
 #ifndef DART_PRECOMPILED_RUNTIME
@@ -3748,6 +3888,14 @@
     return OFFSET_OF(RawField, static_type_exactness_state_);
   }
 
+  static inline intptr_t TargetOffsetOf(const RawField* field) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    return field->ptr()->target_offset_;
+#else
+    return field->ptr()->host_offset_or_field_id_;
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
+  }
+
   // Return class id that any non-null value read from this field is guaranteed
   // to have or kDynamicCid if such class id is not known.
   // Stores to this field must update this information hence the name.
@@ -6554,7 +6702,7 @@
     const Class& cls = Class::Handle(clazz());
     ASSERT(cls.is_finalized() || cls.is_prefinalized());
 #endif
-    return (clazz()->ptr()->instance_size_in_words_ * kWordSize);
+    return (clazz()->ptr()->host_instance_size_in_words_ * kWordSize);
   }
 
   // Returns Instance::null() if instance cannot be canonicalized.
@@ -6576,7 +6724,7 @@
   virtual bool CheckIsCanonical(Thread* thread) const;
 #endif  // DEBUG
 
-  RawObject* GetField(const Field& field) const { return *FieldAddr(field); }
+  RawObject* GetField(const Field& field) const;
 
   void SetField(const Field& field, const Object& value) const;
 
@@ -6713,7 +6861,7 @@
     return reinterpret_cast<RawObject**>(raw_value() - kHeapObjectTag + offset);
   }
   RawObject** FieldAddr(const Field& field) const {
-    return FieldAddrAtOffset(field.Offset());
+    return FieldAddrAtOffset(field.HostOffset());
   }
   RawObject** NativeFieldsAddr() const {
     return FieldAddrAtOffset(sizeof(RawObject));
@@ -6736,7 +6884,8 @@
   }
 
   static RawInstance* NewFromCidAndSize(SharedClassTable* shared_class_table,
-                                        classid_t cid);
+                                        classid_t cid,
+                                        Heap::Space heap = Heap::kNew);
 
   // TODO(iposva): Determine if this gets in the way of Smi.
   HEAP_OBJECT_IMPLEMENTATION(Instance, Object);
@@ -10313,26 +10462,45 @@
 }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
-intptr_t Field::Offset() const {
+intptr_t Field::HostOffset() const {
   ASSERT(is_instance());  // Valid only for dart instance fields.
-  return (raw_ptr()->offset_or_field_id_ * kWordSize);
+  return (raw_ptr()->host_offset_or_field_id_ * kWordSize);
 }
 
-void Field::SetOffset(intptr_t offset_in_bytes) const {
+intptr_t Field::TargetOffset() const {
+  ASSERT(is_instance());  // Valid only for dart instance fields.
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  return (raw_ptr()->target_offset_ * compiler::target::kWordSize);
+#else
+  return HostOffset();
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
+}
+
+void Field::SetOffset(intptr_t host_offset_in_bytes,
+                      intptr_t target_offset_in_bytes) const {
   ASSERT(is_instance());  // Valid only for dart instance fields.
   ASSERT(kWordSize != 0);
-  StoreNonPointer(&raw_ptr()->offset_or_field_id_, offset_in_bytes / kWordSize);
+  StoreNonPointer(&raw_ptr()->host_offset_or_field_id_,
+                  host_offset_in_bytes / kWordSize);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  ASSERT(compiler::target::kWordSize != 0);
+  StoreNonPointer(&raw_ptr()->target_offset_,
+                  target_offset_in_bytes / compiler::target::kWordSize);
+#else
+  ASSERT(host_offset_in_bytes == target_offset_in_bytes);
+#endif  //  !defined(DART_PRECOMPILED_RUNTIME)
 }
 
 RawInstance* Field::StaticValue() const {
   ASSERT(is_static());  // Valid only for static dart fields.
-  return Isolate::Current()->field_table()->At(raw_ptr()->offset_or_field_id_);
+  return Isolate::Current()->field_table()->At(
+      raw_ptr()->host_offset_or_field_id_);
 }
 
 void Field::set_field_id(intptr_t field_id) const {
   ASSERT(is_static());
   ASSERT(Thread::Current()->IsMutatorThread());
-  StoreNonPointer(&raw_ptr()->offset_or_field_id_, field_id);
+  StoreNonPointer(&raw_ptr()->host_offset_or_field_id_, field_id);
 }
 
 #ifndef DART_PRECOMPILED_RUNTIME
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 4b38e2d..98b112f 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -1097,7 +1097,7 @@
                 if (field.is_instance()) {
                   intptr_t flags = 1;  // Strong.
                   WriteUnsigned(flags);
-                  intptr_t index = field.Offset() / kWordSize - 1;
+                  intptr_t index = field.HostOffset() / kWordSize - 1;
                   ASSERT(index >= 0);
                   WriteUnsigned(index);
                   str = field.name();
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index afed744..e17bd7f 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -606,6 +606,18 @@
   RawString* ToString() { return String::New(error_.ToErrorCString()); }
 };
 
+class ConstToNonConstClass : public ClassReasonForCancelling {
+ public:
+  ConstToNonConstClass(Zone* zone, const Class& from, const Class& to)
+      : ClassReasonForCancelling(zone, from, to) {}
+
+ private:
+  RawString* ToString() {
+    return String::NewFormatted("Const class cannot become non-const: %s",
+                                from_.ToCString());
+  }
+};
+
 class NativeFieldsConflict : public ClassReasonForCancelling {
  public:
   NativeFieldsConflict(Zone* zone, const Class& from, const Class& to)
@@ -663,8 +675,8 @@
     return String::NewFormatted("Instance size mismatch between '%s' (%" Pd
                                 ") and replacement "
                                 "'%s' ( %" Pd ")",
-                                from_.ToCString(), from_.instance_size(),
-                                to_.ToCString(), to_.instance_size());
+                                from_.ToCString(), from_.host_instance_size(),
+                                to_.ToCString(), to_.host_instance_size());
   }
 };
 
@@ -712,6 +724,14 @@
     TIR_Print("Finalized replacement class for %s\n", ToCString());
   }
 
+  if (is_finalized() && is_const() && !replacement.is_const()) {
+    if (constants() != Array::null() && Array::LengthOf(constants()) > 0) {
+      context->group_reload_context()->AddReasonForCancelling(
+          new (context->zone())
+              ConstToNonConstClass(context->zone(), *this, replacement));
+    }
+  }
+
   // Native field count cannot change.
   if (num_native_fields() != replacement.num_native_fields()) {
     context->group_reload_context()->AddReasonForCancelling(
@@ -748,7 +768,9 @@
   // Check that we have the same next field offset. This check is not
   // redundant with the one above because the instance OffsetToFieldMap
   // array length is based on the instance size (which may be aligned up).
-  if (next_field_offset() != replacement.next_field_offset()) return true;
+  if (host_next_field_offset() != replacement.host_next_field_offset()) {
+    return true;
+  }
 
   // Verify that field names / offsets match across the entire hierarchy.
   Field& field = Field::Handle();
@@ -805,7 +827,7 @@
     return false;
   }
   // Check the instance sizes are equal.
-  if (instance_size() != replacement.instance_size()) {
+  if (host_instance_size() != replacement.host_instance_size()) {
     context->group_reload_context()->AddReasonForCancelling(
         new (context->zone())
             InstanceSizeConflict(context->zone(), *this, replacement));
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index e16b264..a1359fe 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -217,7 +217,7 @@
   ClassFinalizer::FinalizeTypesInClass(empty_class);
   empty_class.Finalize();
 
-  EXPECT_EQ(kObjectAlignment, empty_class.instance_size());
+  EXPECT_EQ(kObjectAlignment, empty_class.host_instance_size());
   Instance& instance = Instance::Handle(Instance::New(empty_class));
   EXPECT_EQ(empty_class.raw(), instance.clazz());
 
@@ -242,8 +242,8 @@
   one_field_class.Finalize();
   intptr_t header_size = sizeof(RawObject);
   EXPECT_EQ(Utils::RoundUp((header_size + (1 * kWordSize)), kObjectAlignment),
-            one_field_class.instance_size());
-  EXPECT_EQ(header_size, field.Offset());
+            one_field_class.host_instance_size());
+  EXPECT_EQ(header_size, field.HostOffset());
   EXPECT(!one_field_class.is_implemented());
   one_field_class.set_is_implemented();
   EXPECT(one_field_class.is_implemented());
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index d65e9fb..05985ab 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -11,18 +11,14 @@
 #include <fcntl.h>
 #include <stdint.h>
 
-#include <fuchsia/intl/cpp/fidl.h>
+#include <fuchsia/deprecatedtimezone/cpp/fidl.h>
 #include <lib/sys/cpp/service_directory.h>
 #include <zircon/process.h>
 #include <zircon/syscalls.h>
 #include <zircon/syscalls/object.h>
 #include <zircon/types.h>
 
-#include "third_party/icu/source/common/unicode/errorcode.h"
-#include "third_party/icu/source/i18n/unicode/timezone.h"
-
 #include "platform/assert.h"
-#include "platform/syslog.h"
 #include "vm/zone.h"
 
 namespace dart {
@@ -65,72 +61,33 @@
   return static_cast<intptr_t>(getpid());
 }
 
-// This is the default timezone returned if it could not be obtained.  For
-// Fuchsia, the default device timezone is always UTC.
-static const char kDefaultTimezone[] = "UTC";
-
 // TODO(FL-98): Change this to talk to fuchsia.dart to get timezone service to
 // directly get timezone.
 //
 // Putting this hack right now due to CP-120 as I need to remove
 // component:ConnectToEnvironmentServices and this is the only thing that is
 // blocking it and FL-98 will take time.
-static fuchsia::intl::PropertyProviderSyncPtr property_provider;
-
-// 1000 milliseconds do one second make.
-static const int32_t kMSPerSec = 1000;
+static fuchsia::deprecatedtimezone::TimezoneSyncPtr tz;
 
 static zx_status_t GetLocalAndDstOffsetInSeconds(int64_t seconds_since_epoch,
                                                  int32_t* local_offset,
                                                  int32_t* dst_offset) {
-  const char* timezone_id = OS::GetTimeZoneName(seconds_since_epoch);
-  std::unique_ptr<icu::TimeZone> timezone(
-      icu::TimeZone::createTimeZone(timezone_id));
-  UErrorCode error = U_ZERO_ERROR;
-  const auto ms_since_epoch =
-      static_cast<UDate>(kMSPerSec * seconds_since_epoch);
-  // The units of time that local_offset and dst_offset are returned from this
-  // function is, usefully, not documented, but it seems that the units are
-  // milliseconds.  Add these variables here for clarity.
-  int32_t local_offset_ms = 0;
-  int32_t dst_offset_ms = 0;
-  timezone->getOffset(ms_since_epoch, /*local_time=*/false, local_offset_ms,
-                      dst_offset_ms, error);
-  if (error != U_ZERO_ERROR) {
-    icu::ErrorCode icu_error;
-    icu_error.set(error);
-    // Sadly there is no way to report the actual error.  Next best thing is to
-    // log.  On the upside, a direct call to timezone->getOffset should fail
-    // rarely, so this should not amount to log spam.
-    Syslog::PrintErr("could not get DST offset: %s\n", icu_error.errorName());
-    return ZX_ERR_INTERNAL;
+  zx_status_t status = tz->GetTimezoneOffsetMinutes(seconds_since_epoch * 1000,
+                                                    local_offset, dst_offset);
+  if (status != ZX_OK) {
+    return status;
   }
-  // We must return offset in seconds, so convert.
-  *local_offset = local_offset_ms / kMSPerSec;
-  *dst_offset = dst_offset_ms / kMSPerSec;
+  *local_offset *= 60;
+  *dst_offset *= 60;
   return ZX_OK;
 }
 
 const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
   // TODO(abarth): Handle time zone changes.
-  static const std::string* tz_name = new std::string([]() -> std::string {
-    fuchsia::intl::Profile profile;
-    zx_status_t status = property_provider->GetProfile(&profile);
-    if (status != ZX_OK) {
-      // Shrug.  Let's continue with UTC.  Printing the error here as there is
-      // no way to report it from this API.
-      Syslog::PrintErr("no intl profile available\n");
-      return kDefaultTimezone;
-    }
-    const std::vector<fuchsia::intl::TimeZoneId>& timezones =
-        profile.time_zones();
-    if (timezones.empty()) {
-      // Empty timezone array is not up to fuchsia::intl spec.  The serving
-      // endpoint is broken and should be fixed.
-      Syslog::PrintErr("got empty timezone value\n");
-      return kDefaultTimezone;
-    }
-    return timezones[0].id;
+  static const auto* tz_name = new std::string([] {
+    std::string result;
+    tz->GetTimezoneId(&result);
+    return result;
   }());
   return tz_name->c_str();
 }
@@ -308,7 +265,7 @@
 void OS::Init() {
   InitializeTZData();
   auto services = sys::ServiceDirectory::CreateFromNamespace();
-  services->Connect(property_provider.NewRequest());
+  services->Connect(tz.NewRequest());
 }
 
 void OS::Cleanup() {}
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index a86665c..3aaf191 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -1144,6 +1144,17 @@
   OS::PrintErr(
       "version=%s\nthread=%" Pd ", isolate=%s(%p)\n", Version::String(),
       OSThread::ThreadIdToIntPtr(os_thread->trace_id()), name, isolate);
+  const IsolateGroupSource* source =
+      isolate == nullptr ? nullptr : isolate->source();
+  const IsolateGroupSource* vm_source =
+      Dart::vm_isolate() == nullptr ? nullptr : Dart::vm_isolate()->source();
+  OS::PrintErr("isolate_instructions=%" Px ", vm_instructions=%" Px "\n",
+               source == nullptr
+                   ? 0
+                   : reinterpret_cast<uword>(source->snapshot_instructions),
+               vm_source == nullptr
+                   ? 0
+                   : reinterpret_cast<uword>(vm_source->snapshot_instructions));
 
   if (!InitialRegisterCheck(pc, fp, sp)) {
     OS::PrintErr("Stack dump aborted because InitialRegisterCheck failed.\n");
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 8ff35b9..f858f65 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -377,14 +377,32 @@
   uword next_field_offset = visitor->isolate()
                                 ->GetClassForHeapWalkAt(class_id)
                                 ->ptr()
-                                ->next_field_offset_in_words_
+                                ->host_next_field_offset_in_words_
                             << kWordSizeLog2;
   ASSERT(next_field_offset > 0);
   uword obj_addr = RawObject::ToAddr(this);
   uword from = obj_addr + sizeof(RawObject);
   uword to = obj_addr + next_field_offset - kWordSize;
-  visitor->VisitPointers(reinterpret_cast<RawObject**>(from),
-                         reinterpret_cast<RawObject**>(to));
+  const auto first = reinterpret_cast<RawObject**>(from);
+  const auto last = reinterpret_cast<RawObject**>(to);
+
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+  const auto unboxed_fields_bitmap =
+      visitor->shared_class_table()->GetUnboxedFieldsMapAt(class_id);
+
+  if (!unboxed_fields_bitmap.IsEmpty()) {
+    intptr_t bit = sizeof(RawObject) / kWordSize;
+    for (RawObject** current = first; current <= last; current++) {
+      if (!unboxed_fields_bitmap.Get(bit++)) {
+        visitor->VisitPointer(current);
+      }
+    }
+  } else {
+    visitor->VisitPointers(first, last);
+  }
+#else
+  visitor->VisitPointers(first, last);
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 }
 
 bool RawObject::FindObject(FindObjectVisitor* visitor) {
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index acfaf53..da82750 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -474,10 +474,27 @@
     uword obj_addr = ToAddr(this);
     uword from = obj_addr + sizeof(RawObject);
     uword to = obj_addr + instance_size - kWordSize;
+    const auto first = reinterpret_cast<RawObject**>(from);
+    const auto last = reinterpret_cast<RawObject**>(to);
 
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+    const auto unboxed_fields_bitmap =
+        visitor->shared_class_table()->GetUnboxedFieldsMapAt(class_id);
+
+    if (!unboxed_fields_bitmap.IsEmpty()) {
+      intptr_t bit = sizeof(RawObject) / kWordSize;
+      for (RawObject** current = first; current <= last; current++) {
+        if (!unboxed_fields_bitmap.Get(bit++)) {
+          visitor->VisitPointer(current);
+        }
+      }
+    } else {
+      visitor->VisitPointers(first, last);
+    }
+#else
     // Call visitor function virtually
-    visitor->VisitPointers(reinterpret_cast<RawObject**>(from),
-                           reinterpret_cast<RawObject**>(to));
+    visitor->VisitPointers(first, last);
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 
     return instance_size;
   }
@@ -495,10 +512,27 @@
     uword obj_addr = ToAddr(this);
     uword from = obj_addr + sizeof(RawObject);
     uword to = obj_addr + instance_size - kWordSize;
+    const auto first = reinterpret_cast<RawObject**>(from);
+    const auto last = reinterpret_cast<RawObject**>(to);
 
+#if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
+    const auto unboxed_fields_bitmap =
+        visitor->shared_class_table()->GetUnboxedFieldsMapAt(class_id);
+
+    if (!unboxed_fields_bitmap.IsEmpty()) {
+      intptr_t bit = sizeof(RawObject) / kWordSize;
+      for (RawObject** current = first; current <= last; current++) {
+        if (!unboxed_fields_bitmap.Get(bit++)) {
+          visitor->V::VisitPointers(current, current);
+        }
+      }
+    } else {
+      visitor->V::VisitPointers(first, last);
+    }
+#else
     // Call visitor function non-virtually
-    visitor->V::VisitPointers(reinterpret_cast<RawObject**>(from),
-                              reinterpret_cast<RawObject**>(to));
+    visitor->V::VisitPointers(first, last);
+#endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 
     return instance_size;
   }
@@ -814,14 +848,32 @@
 
   TokenPosition token_pos_;
   TokenPosition end_token_pos_;
-  int32_t instance_size_in_words_;  // Size if fixed len or 0 if variable len.
-  int32_t type_arguments_field_offset_in_words_;  // Offset of type args fld.
-  int32_t next_field_offset_in_words_;  // Offset of the next instance field.
+
   classid_t id_;                // Class Id, also index in the class table.
   int16_t num_type_arguments_;  // Number of type arguments in flattened vector.
   uint16_t num_native_fields_;
   uint32_t state_bits_;
 
+  // Size if fixed len or 0 if variable len.
+  int32_t host_instance_size_in_words_;
+
+  // Offset of type args fld.
+  int32_t host_type_arguments_field_offset_in_words_;
+
+  // Offset of the next instance field.
+  int32_t host_next_field_offset_in_words_;
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  // Size if fixed len or 0 if variable len (target).
+  int32_t target_instance_size_in_words_;
+
+  // Offset of type args fld.
+  int32_t target_type_arguments_field_offset_in_words_;
+
+  // Offset of the next instance field (target).
+  int32_t target_next_field_offset_in_words_;
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
   typedef BitField<uint32_t, bool, 0, 1> IsDeclaredInBytecode;
   typedef BitField<uint32_t, uint32_t, 1, 31> BinaryDeclarationOffset;
@@ -1177,11 +1229,16 @@
   // field.
   int8_t static_type_exactness_state_;
 
+  uint16_t kind_bits_;  // static, final, const, has initializer....
+
   // - for instance fields: offset in words to the value in the class instance.
   // - for static fields: index into field_table.
-  intptr_t offset_or_field_id_;
+  intptr_t host_offset_or_field_id_;
 
-  uint16_t kind_bits_;  // static, final, const, has initializer....
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  // for instance fields, the offset in words in the target architecture
+  int32_t target_offset_;
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
   friend class CidRewriteVisitor;
 };
@@ -1429,7 +1486,7 @@
 #endif
 
   // Compilation timestamp.
-  NOT_IN_PRODUCT(int64_t compile_timestamp_);
+  NOT_IN_PRODUCT(alignas(8) int64_t compile_timestamp_);
 
   // state_bits_ is a bitfield with three fields:
   // The optimized bit, the alive bit, and a count of the number of pointer
@@ -2258,6 +2315,7 @@
 
   friend class Api;
   friend class SnapshotReader;
+  friend class Class;
 };
 COMPILE_ASSERT(sizeof(RawDouble) == 16);
 
@@ -2528,6 +2586,7 @@
   ALIGN8 float value_[4];
 
   friend class SnapshotReader;
+  friend class Class;
 
  public:
   float x() const { return value_[0]; }
@@ -2560,6 +2619,7 @@
   ALIGN8 double value_[2];
 
   friend class SnapshotReader;
+  friend class Class;
 
  public:
   double x() const { return value_[0]; }
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index a2a129e..31e4ed5 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -121,6 +121,13 @@
                       bool as_reference) {
   ASSERT(writer != NULL);
 
+  if (ptr()->signature_ != Function::null()) {
+    writer->SetWriteException(Exceptions::kArgument,
+                              "Illegal argument in isolate message"
+                              " : (function types are not supported yet)");
+    UNREACHABLE();
+  }
+
   // Only resolved and finalized types should be written to a snapshot.
   ASSERT((ptr()->type_state_ == RawType::kFinalizedInstantiated) ||
          (ptr()->type_state_ == RawType::kFinalizedUninstantiated));
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 75e507c..cc04a43 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -593,47 +593,59 @@
     ASSERT(!cls_.IsNull());
     // Closure instances are handled by Closure::ReadFrom().
     ASSERT(!cls_.IsClosureClass());
-    instance_size = cls_.instance_size();
+    instance_size = cls_.host_instance_size();
     ASSERT(instance_size > 0);
     // Allocate the instance and read in all the fields for the object.
     *result ^= Object::Allocate(cls_.id(), instance_size, Heap::kNew);
   } else {
     cls_ ^= ReadObjectImpl(kAsInlinedObject);
     ASSERT(!cls_.IsNull());
-    instance_size = cls_.instance_size();
+    instance_size = cls_.host_instance_size();
   }
   if (cls_.id() == set_class_.id()) {
     EnqueueRehashingOfSet(*result);
   }
   if (!as_reference) {
     // Read all the individual fields for inlined objects.
-    intptr_t next_field_offset = cls_.next_field_offset();
+    intptr_t next_field_offset = cls_.host_next_field_offset();
 
-    intptr_t type_argument_field_offset = cls_.type_arguments_field_offset();
+    intptr_t type_argument_field_offset =
+        cls_.host_type_arguments_field_offset();
     ASSERT(next_field_offset > 0);
     // Instance::NextFieldOffset() returns the offset of the first field in
     // a Dart object.
     bool read_as_reference = RawObject::IsCanonical(tags) ? false : true;
     intptr_t offset = Instance::NextFieldOffset();
     intptr_t result_cid = result->GetClassId();
+
+    const auto unboxed_fields =
+        isolate()->shared_class_table()->GetUnboxedFieldsMapAt(result_cid);
+
     while (offset < next_field_offset) {
-      pobj_ = ReadObjectImpl(read_as_reference);
-      result->SetFieldAtOffset(offset, pobj_);
-      if ((offset != type_argument_field_offset) &&
-          (kind_ == Snapshot::kMessage) && isolate()->use_field_guards()) {
-        // TODO(fschneider): Consider hoisting these lookups out of the loop.
-        // This would involve creating a handle, since cls_ can't be reused
-        // across the call to ReadObjectImpl.
-        cls_ = isolate()->class_table()->At(result_cid);
-        array_ = cls_.OffsetToFieldMap();
-        field_ ^= array_.At(offset >> kWordSizeLog2);
-        ASSERT(!field_.IsNull());
-        ASSERT(field_.Offset() == offset);
-        obj_ = pobj_.raw();
-        field_.RecordStore(obj_);
+      if (unboxed_fields.Get(offset / kWordSize)) {
+        uword* p = reinterpret_cast<uword*>(result->raw_value() -
+                                            kHeapObjectTag + offset);
+        // Reads 32 bits of the unboxed value at a time
+        *p = ReadWordWith32BitReads();
+      } else {
+        pobj_ = ReadObjectImpl(read_as_reference);
+        result->SetFieldAtOffset(offset, pobj_);
+        if ((offset != type_argument_field_offset) &&
+            (kind_ == Snapshot::kMessage) && isolate()->use_field_guards()) {
+          // TODO(fschneider): Consider hoisting these lookups out of the loop.
+          // This would involve creating a handle, since cls_ can't be reused
+          // across the call to ReadObjectImpl.
+          cls_ = isolate()->class_table()->At(result_cid);
+          array_ = cls_.OffsetToFieldMap();
+          field_ ^= array_.At(offset >> kWordSizeLog2);
+          ASSERT(!field_.IsNull());
+          ASSERT(field_.HostOffset() == offset);
+          obj_ = pobj_.raw();
+          field_.RecordStore(obj_);
+        }
+        // TODO(fschneider): Verify the guarded cid and length for other kinds
+        // of snapshot (kFull, kScript) with asserts.
       }
-      // TODO(fschneider): Verify the guarded cid and length for other kinds of
-      // snapshot (kFull, kScript) with asserts.
       offset += kWordSize;
     }
     if (RawObject::IsCanonical(tags)) {
@@ -1439,7 +1451,7 @@
     // Write out the class information for this object.
     WriteObjectImpl(cls, kAsInlinedObject);
   } else {
-    intptr_t next_field_offset = cls->ptr()->next_field_offset_in_words_
+    intptr_t next_field_offset = Class::host_next_field_offset_in_words(cls)
                                  << kWordSizeLog2;
     ASSERT(next_field_offset > 0);
 
@@ -1455,15 +1467,26 @@
     // Write out the class information for this object.
     WriteObjectImpl(cls, kAsInlinedObject);
 
+    const auto unboxed_fields =
+        isolate()->shared_class_table()->GetUnboxedFieldsMapAt(cls->ptr()->id_);
+
     // Write out all the fields for the object.
     // Instance::NextFieldOffset() returns the offset of the first field in
     // a Dart object.
     bool write_as_reference = RawObject::IsCanonical(tags) ? false : true;
+
     intptr_t offset = Instance::NextFieldOffset();
     while (offset < next_field_offset) {
-      RawObject* raw_obj = *reinterpret_cast<RawObject**>(
-          reinterpret_cast<uword>(raw->ptr()) + offset);
-      WriteObjectImpl(raw_obj, write_as_reference);
+      if (unboxed_fields.Get(offset / kWordSize)) {
+        // Writes 32 bits of the unboxed value at a time
+        const uword value = *reinterpret_cast<uword*>(
+            reinterpret_cast<uword>(raw->ptr()) + offset);
+        WriteWordWith32BitWrites(value);
+      } else {
+        RawObject* raw_obj = *reinterpret_cast<RawObject**>(
+            reinterpret_cast<uword>(raw->ptr()) + offset);
+        WriteObjectImpl(raw_obj, write_as_reference);
+      }
       offset += kWordSize;
     }
   }
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 1242943..3c528e8 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -272,6 +272,8 @@
     return SerializedHeaderData::decode(value);
   }
 
+  uword ReadWordWith32BitReads() { return stream_.ReadWordWith32BitReads(); }
+
  private:
   ReadStream stream_;  // input stream.
 };
@@ -529,6 +531,10 @@
     stream_.WriteBytes(reinterpret_cast<const uint8_t*>(&value), sizeof(value));
   }
 
+  void WriteWordWith32BitWrites(uword value) {
+    stream_.WriteWordWith32BitWrites(value);
+  }
+
  protected:
   BaseWriter(ReAlloc alloc, DeAlloc dealloc, intptr_t initial_size)
       : StackResource(Thread::Current()),
diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
index 72699ae..00ed7c91 100644
--- a/runtime/vm/stack_frame.h
+++ b/runtime/vm/stack_frame.h
@@ -132,6 +132,12 @@
 
   static void DumpCurrentTrace();
 
+  uword GetCallerSp() const {
+    return fp() +
+           ((is_interpreted() ? kKBCCallerSpSlotFromFp : kCallerSpSlotFromFp) *
+            kWordSize);
+  }
+
  protected:
   explicit StackFrame(Thread* thread)
       : fp_(0), sp_(0), pc_(0), thread_(thread), is_interpreted_(false) {}
@@ -151,11 +157,6 @@
   RawCode* GetCodeObject() const;
   RawBytecode* GetBytecodeObject() const;
 
-  uword GetCallerSp() const {
-    return fp() +
-           ((is_interpreted() ? kKBCCallerSpSlotFromFp : kCallerSpSlotFromFp) *
-            kWordSize);
-  }
 
   uword GetCallerFp() const {
     return *(reinterpret_cast<uword*>(
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index 7ea29a1..837817b 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -73,6 +73,9 @@
   if (yield_index == RawPcDescriptors::kInvalidYieldIndex) {
     return 0;
   }
+  if (!bytecode.HasSourcePositions()) {
+    return 0;
+  }
   intptr_t last_yield_point = 0;
   kernel::BytecodeSourcePositionsIterator iter(Thread::Current()->zone(),
                                                bytecode);
@@ -373,10 +376,9 @@
   CallerClosureFinder caller_closure_finder(zone);
   auto& pc_descs = PcDescriptors::Handle();
 
-  while (frame != nullptr) {
+  for (; frame != nullptr; frame = frames.NextFrame()) {
     if (skip_frames > 0) {
       skip_frames--;
-      frame = frames.NextFrame();
       continue;
     }
 
@@ -385,7 +387,6 @@
       ASSERT(!bytecode.IsNull());
       function = bytecode.function();
       if (function.IsNull()) {
-        frame = frames.NextFrame();
         continue;
       }
       RELEASE_ASSERT(function.raw() == frame->LookupDartFunction());
@@ -419,15 +420,14 @@
 
       // Next, look up caller's closure on the stack and walk backwards through
       // the yields.
-      frame = frames.NextFrame();
-      RawObject** last_caller_obj = reinterpret_cast<RawObject**>(frame->sp());
+      RawObject** last_caller_obj = reinterpret_cast<RawObject**>(
+          frame->GetCallerSp());
       closure = FindClosureInFrame(last_caller_obj, function,
                                    frame->is_interpreted());
 
       // If this async function hasn't yielded yet, we're still dealing with a
       // normal stack. Continue to next frame as usual.
       if (!caller_closure_finder.IsRunningAsync(closure)) {
-        // Don't advance frame since we already did so just above.
         continue;
       }
 
@@ -474,8 +474,6 @@
       // Ignore the rest of the stack; already unwound all async calls.
       return;
     }
-
-    frame = frames.NextFrame();
   }
 
   return;
diff --git a/runtime/vm/type_testing_stubs.cc b/runtime/vm/type_testing_stubs.cc
index c50bd59..6a69df1 100644
--- a/runtime/vm/type_testing_stubs.cc
+++ b/runtime/vm/type_testing_stubs.cc
@@ -111,7 +111,9 @@
   }
 
   if (type.IsType() || type.IsTypeParameter()) {
-    const bool should_specialize = !FLAG_precompiled_mode && lazy_specialize;
+    // TODO(dartbug.com/39755): Add support for specialized NNBD TTS.
+    const bool should_specialize =
+        !FLAG_precompiled_mode && lazy_specialize && type.IsNullable();
     return should_specialize ? StubCode::LazySpecializeTypeTest().raw()
                              : StubCode::DefaultTypeTest().raw();
   }
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index d5ec265..f23e5ee 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -199,13 +199,49 @@
 
 #ifndef PRODUCT
 static const char* kIsolateReloadTestLibSource =
-    "void reloadTest() native 'Reload_Test';\n";
+    "void reloadTest() native 'Test_Reload';\n"
+    "void collectNewSpace() native 'Test_CollectNewSpace';\n"
+    "void collectOldSpace() native 'Test_CollectOldSpace';\n";
 
 static const char* IsolateReloadTestLibUri() {
   return "test:isolate_reload_helper";
 }
 
-static void ReloadTest(Dart_NativeArguments native_args) {
+#define RELOAD_NATIVE_LIST(V)                                                  \
+  V(Test_Reload, 0)                                                            \
+  V(Test_CollectNewSpace, 0)                                                   \
+  V(Test_CollectOldSpace, 0)
+
+RELOAD_NATIVE_LIST(DECLARE_FUNCTION);
+
+static struct NativeEntries {
+  const char* name_;
+  Dart_NativeFunction function_;
+  int argument_count_;
+} ReloadEntries[] = {RELOAD_NATIVE_LIST(REGISTER_FUNCTION)};
+
+static Dart_NativeFunction IsolateReloadTestNativeResolver(
+    Dart_Handle name,
+    int argument_count,
+    bool* auto_setup_scope) {
+  const char* function_name = NULL;
+  Dart_Handle result = Dart_StringToCString(name, &function_name);
+  ASSERT(!Dart_IsError(result));
+  ASSERT(function_name != NULL);
+  ASSERT(auto_setup_scope != NULL);
+  *auto_setup_scope = true;
+  int num_entries = sizeof(ReloadEntries) / sizeof(struct NativeEntries);
+  for (int i = 0; i < num_entries; i++) {
+    struct NativeEntries* entry = &(ReloadEntries[i]);
+    if ((strcmp(function_name, entry->name_) == 0) &&
+        (entry->argument_count_ == argument_count)) {
+      return reinterpret_cast<Dart_NativeFunction>(entry->function_);
+    }
+  }
+  return NULL;
+}
+
+void FUNCTION_NAME(Test_Reload)(Dart_NativeArguments native_args) {
   Dart_Handle result = TestCase::TriggerReload(/* kernel_buffer= */ NULL,
                                                /* kernel_buffer_size= */ 0);
   if (Dart_IsError(result)) {
@@ -213,11 +249,14 @@
   }
 }
 
-static Dart_NativeFunction IsolateReloadTestNativeResolver(
-    Dart_Handle name,
-    int num_of_arguments,
-    bool* auto_setup_scope) {
-  return ReloadTest;
+void FUNCTION_NAME(Test_CollectNewSpace)(Dart_NativeArguments native_args) {
+  TransitionNativeToVM transition(Thread::Current());
+  GCTestHelper::CollectNewSpace();
+}
+
+void FUNCTION_NAME(Test_CollectOldSpace)(Dart_NativeArguments native_args) {
+  TransitionNativeToVM transition(Thread::Current());
+  GCTestHelper::CollectOldSpace();
 }
 
 static Dart_Handle LoadIsolateReloadTestLib() {
diff --git a/runtime/vm/visitor.cc b/runtime/vm/visitor.cc
new file mode 100644
index 0000000..0fd28d4
--- /dev/null
+++ b/runtime/vm/visitor.cc
@@ -0,0 +1,16 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "vm/visitor.h"
+
+#include "vm/isolate.h"
+
+namespace dart {
+
+ObjectPointerVisitor::ObjectPointerVisitor(Isolate* isolate)
+    : isolate_(isolate),
+      gc_root_type_("unknown"),
+      shared_class_table_(isolate->shared_class_table()) {}
+
+}  // namespace dart
diff --git a/runtime/vm/visitor.h b/runtime/vm/visitor.h
index cd0e967..9d5bf75 100644
--- a/runtime/vm/visitor.h
+++ b/runtime/vm/visitor.h
@@ -6,6 +6,7 @@
 #define RUNTIME_VM_VISITOR_H_
 
 #include "vm/allocation.h"
+#include "vm/class_table.h"
 #include "vm/globals.h"
 #include "vm/growable_array.h"
 
@@ -20,8 +21,7 @@
 // An object pointer visitor interface.
 class ObjectPointerVisitor {
  public:
-  explicit ObjectPointerVisitor(Isolate* isolate)
-      : isolate_(isolate), gc_root_type_("unknown") {}
+  explicit ObjectPointerVisitor(Isolate* isolate);
   virtual ~ObjectPointerVisitor() {}
 
   Isolate* isolate() const { return isolate_; }
@@ -54,9 +54,14 @@
 
   virtual bool visit_weak_persistent_handles() const { return false; }
 
+  const SharedClassTable* shared_class_table() const {
+    return shared_class_table_;
+  }
+
  private:
   Isolate* isolate_;
   const char* gc_root_type_;
+  SharedClassTable* shared_class_table_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(ObjectPointerVisitor);
 };
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index 9c5f727..b7d3f4e 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -357,6 +357,7 @@
   "virtual_memory_fuchsia.cc",
   "virtual_memory_posix.cc",
   "virtual_memory_win.cc",
+  "visitor.cc",
   "visitor.h",
   "zone.cc",
   "zone.h",
diff --git a/sdk/lib/_http/http_parser.dart b/sdk/lib/_http/http_parser.dart
index 8d64a50..e5772e0 100644
--- a/sdk/lib/_http/http_parser.dart
+++ b/sdk/lib/_http/http_parser.dart
@@ -246,7 +246,7 @@
   int _statusCode = 0;
   int _statusCodeLength = 0;
   final List<int> _method = [];
-  final List<int> _uri_or_reason_phrase = [];
+  final List<int> _uriOrReasonPhrase = [];
   final List<int> _headerField = [];
   final List<int> _headerValue = [];
 
@@ -319,8 +319,13 @@
     try {
       _doParse();
     } catch (e, s) {
-      _state = _State.FAILURE;
-      _reportError(e, s);
+      if (_state >= _State.CHUNK_SIZE_STARTING_CR && _state <= _State.BODY) {
+        _state = _State.FAILURE;
+        _reportBodyError(e, s);
+      } else {
+        _state = _State.FAILURE;
+        _reportHttpError(e, s);
+      }
     }
   }
 
@@ -350,14 +355,13 @@
     _createIncoming(_transferLength);
     if (_requestParser) {
       _incoming.method = new String.fromCharCodes(_method);
-      _incoming.uri =
-          Uri.parse(new String.fromCharCodes(_uri_or_reason_phrase));
+      _incoming.uri = Uri.parse(new String.fromCharCodes(_uriOrReasonPhrase));
     } else {
       _incoming.statusCode = _statusCode;
-      _incoming.reasonPhrase = new String.fromCharCodes(_uri_or_reason_phrase);
+      _incoming.reasonPhrase = new String.fromCharCodes(_uriOrReasonPhrase);
     }
     _method.clear();
-    _uri_or_reason_phrase.clear();
+    _uriOrReasonPhrase.clear();
     if (_connectionUpgrade) {
       _incoming.upgraded = true;
       _parserCalled = false;
@@ -510,7 +514,7 @@
 
         case _State.REQUEST_LINE_URI:
           if (byte == _CharCode.SP) {
-            if (_uri_or_reason_phrase.length == 0) {
+            if (_uriOrReasonPhrase.length == 0) {
               throw new HttpException("Invalid request URI");
             }
             _state = _State.REQUEST_LINE_HTTP_VERSION;
@@ -519,7 +523,7 @@
             if (byte == _CharCode.CR || byte == _CharCode.LF) {
               throw new HttpException("Invalid request URI");
             }
-            _uri_or_reason_phrase.add(byte);
+            _uriOrReasonPhrase.add(byte);
           }
           break;
 
@@ -567,7 +571,7 @@
             _state = _State.RESPONSE_LINE_ENDING;
           } else {
             _statusCodeLength++;
-            if ((byte < 0x30 && 0x39 < byte) || _statusCodeLength > 3) {
+            if (byte < 0x30 || byte > 0x39 || _statusCodeLength > 3) {
               throw new HttpException("Invalid response status code");
             } else {
               _statusCode = _statusCode * 10 + byte - 0x30;
@@ -582,7 +586,7 @@
             if (byte == _CharCode.CR || byte == _CharCode.LF) {
               throw new HttpException("Invalid response reason phrase");
             }
-            _uri_or_reason_phrase.add(byte);
+            _uriOrReasonPhrase.add(byte);
           }
           break;
 
@@ -821,8 +825,8 @@
       if (_state != _State.UPGRADED &&
           !(_state == _State.START && !_requestParser) &&
           !(_state == _State.BODY && !_chunked && _transferLength == -1)) {
-        _bodyController.addError(
-            new HttpException("Connection closed while receiving data"));
+        _reportBodyError(
+            HttpException("Connection closed while receiving data"));
       }
       _closeIncoming(true);
       _controller.close();
@@ -831,8 +835,8 @@
     // If the connection is idle the HTTP stream is closed.
     if (_state == _State.START) {
       if (!_requestParser) {
-        _reportError(new HttpException(
-            "Connection closed before full header was received"));
+        _reportHttpError(
+            HttpException("Connection closed before full header was received"));
       }
       _controller.close();
       return;
@@ -847,8 +851,8 @@
       _state = _State.FAILURE;
       // Report the error through the error callback if any. Otherwise
       // throw the error.
-      _reportError(new HttpException(
-          "Connection closed before full header was received"));
+      _reportHttpError(
+          HttpException("Connection closed before full header was received"));
       _controller.close();
       return;
     }
@@ -859,8 +863,8 @@
       _state = _State.FAILURE;
       // Report the error through the error callback if any. Otherwise
       // throw the error.
-      _reportError(
-          new HttpException("Connection closed before full body was received"));
+      _reportHttpError(
+          HttpException("Connection closed before full body was received"));
     }
     _controller.close();
   }
@@ -905,7 +909,7 @@
     _headerField.clear();
     _headerValue.clear();
     _method.clear();
-    _uri_or_reason_phrase.clear();
+    _uriOrReasonPhrase.clear();
 
     _statusCode = 0;
     _statusCodeLength = 0;
@@ -964,7 +968,7 @@
   }
 
   // expected should already be lowercase.
-  bool _caseInsensitiveCompare(List<int> expected, List<int> value) {
+  static bool _caseInsensitiveCompare(List<int> expected, List<int> value) {
     if (expected.length != value.length) return false;
     for (int i = 0; i < expected.length; i++) {
       if (expected[i] != _toLowerCaseByte(value[i])) return false;
@@ -974,7 +978,8 @@
 
   void _expect(int val1, int val2) {
     if (val1 != val2) {
-      throw new HttpException("Failed to parse HTTP");
+      throw new HttpException(
+          "Failed to parse HTTP, $val1 does not match $val2");
     }
   }
 
@@ -986,7 +991,8 @@
     } else if (0x61 <= byte && byte <= 0x66) {
       return byte - 0x61 + 10; // a - f
     } else {
-      throw new HttpException("Failed to parse HTTP");
+      throw new HttpException(
+          "Failed to parse HTTP, $byte should be a Hex digit");
     }
   }
 
@@ -1055,10 +1061,20 @@
     }
   }
 
-  void _reportError(error, [stackTrace]) {
+  void _reportHttpError(error, [stackTrace]) {
     if (_socketSubscription != null) _socketSubscription.cancel();
     _state = _State.FAILURE;
     _controller.addError(error, stackTrace);
     _controller.close();
   }
+
+  void _reportBodyError(error, [stackTrace]) {
+    if (_socketSubscription != null) _socketSubscription.cancel();
+    _state = _State.FAILURE;
+    _bodyController.addError(error, stackTrace);
+    // In case of drain(), error event will close the stream.
+    if (_bodyController != null) {
+      _bodyController.close();
+    }
+  }
 }
diff --git a/sdk/lib/_internal/js_runtime/lib/rti.dart b/sdk/lib/_internal/js_runtime/lib/rti.dart
index d1ab30f..30d4f45 100644
--- a/sdk/lib/_internal/js_runtime/lib/rti.dart
+++ b/sdk/lib/_internal/js_runtime/lib/rti.dart
@@ -812,8 +812,7 @@
 
   var isFn = RAW_DART_FUNCTION_REF(_generalIsTestImplementation);
 
-  // TODO(fishythefish): Update for NNBD.
-  if (isLegacyTopType(testRti)) {
+  if (isTopType(testRti)) {
     isFn = RAW_DART_FUNCTION_REF(_isTop);
     var asFn = RAW_DART_FUNCTION_REF(_asTop);
     Rti._setAsCheckFunction(testRti, asFn);
@@ -835,11 +834,7 @@
       String name = Rti._getInterfaceName(testRti);
       var arguments = Rti._getInterfaceTypeArguments(testRti);
       if (JS(
-          'bool',
-          '#.every(#)',
-          arguments,
-          // TODO(fishythefish): Update for NNBD.
-          RAW_DART_FUNCTION_REF(isLegacyTopType))) {
+          'bool', '#.every(#)', arguments, RAW_DART_FUNCTION_REF(isTopType))) {
         String propertyName =
             '${JS_GET_NAME(JsGetName.OPERATOR_IS_PREFIX)}${name}';
         Rti._setSpecializedTestResource(testRti, propertyName);
@@ -858,8 +853,7 @@
   // method. The Rti object is 'this'.
   Rti testRti = _castToRti(JS('', 'this'));
   Rti objectRti = instanceOrFunctionType(object, testRti);
-  // TODO(fishythefish): Update for NNBD.
-  return isLegacySubtype(_theUniverse(), objectRti, testRti);
+  return isSubtype(_theUniverse(), objectRti, testRti);
 }
 
 /// Called from generated code.
@@ -910,8 +904,7 @@
 
 /// Called from generated code.
 checkTypeBound(Rti type, Rti bound, variable, methodName) {
-  // TODO(fishythefish): Update for NNBD.
-  if (isLegacySubtype(_theUniverse(), type, bound)) return type;
+  if (isSubtype(_theUniverse(), type, bound)) return type;
   String message = "The type argument '${_rtiToString(type, null)}' is not"
       " a subtype of the type variable bound '${_rtiToString(bound, null)}'"
       " of type variable '${_Utils.asString(variable)}' in '$methodName'.";
@@ -1110,8 +1103,7 @@
       typeParametersText += typeSep;
       typeParametersText += genericContext[genericContext.length - 1 - i];
       Rti boundRti = _castToRti(_Utils.arrayAt(bounds, i));
-      // TODO(fishythefish): Update for NNBD.
-      if (!isLegacyTopType(boundRti)) {
+      if (!isTopType(boundRti)) {
         typeParametersText +=
             ' extends ' + _rtiToString(boundRti, genericContext);
       }
@@ -2340,12 +2332,8 @@
 // -------- Subtype tests ------------------------------------------------------
 
 // Future entry point from compiled code.
-bool isLegacySubtype(universe, Rti s, Rti t) {
-  return _isSubtype(universe, s, null, t, null, true);
-}
-
-bool isNnbdSubtype(universe, Rti s, Rti t) {
-  return _isSubtype(universe, s, null, t, null, false);
+bool isSubtype(universe, Rti s, Rti t) {
+  return _isSubtype(universe, s, null, t, null);
 }
 
 /// Based on
@@ -2371,18 +2359,20 @@
 /// the bottom of the type hierarchy, `Object` is treated as nullable, and
 /// `required` is ignored on named parameters. This should provide the same
 /// subtyping results as pre-NNBD Dart.
-bool _isSubtype(universe, Rti s, sEnv, Rti t, tEnv, bool isLegacy) {
+bool _isSubtype(universe, Rti s, sEnv, Rti t, tEnv) {
+  bool isLegacy = JS_GET_FLAG('LEGACY');
+
   // Reflexivity:
   if (_Utils.isIdentical(s, t)) return true;
 
   // Right Top:
-  if (isTopType(t, isLegacy)) return true;
+  if (isTopType(t)) return true;
 
   int sKind = Rti._getKind(s);
   if (sKind == Rti.kindAny) return true;
 
   // Left Top:
-  if (isTopType(s, isLegacy)) return false;
+  if (isTopType(s)) return false;
 
   // Left Bottom:
   if (isLegacy) {
@@ -2396,7 +2386,7 @@
   if (leftTypeVariable) {
     int index = Rti._getGenericFunctionParameterIndex(s);
     Rti bound = _castToRti(_Utils.arrayAt(sEnv, index));
-    if (_isSubtype(universe, bound, sEnv, t, tEnv, isLegacy)) return true;
+    if (_isSubtype(universe, bound, sEnv, t, tEnv)) return true;
   }
 
   int tKind = Rti._getKind(t);
@@ -2406,8 +2396,7 @@
   // reduce casework.
   if (!isLegacy && isNullType(s)) {
     if (tKind == Rti.kindFutureOr) {
-      return _isSubtype(
-          universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv, isLegacy);
+      return _isSubtype(universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv);
     }
     return isNullType(t) || tKind == Rti.kindQuestion || tKind == Rti.kindStar;
   }
@@ -2415,20 +2404,17 @@
   // Right Object:
   if (!isLegacy && isObjectType(t)) {
     if (sKind == Rti.kindFutureOr) {
-      return _isSubtype(
-          universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv, isLegacy);
+      return _isSubtype(universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv);
     }
     if (sKind == Rti.kindStar) {
-      return _isSubtype(
-          universe, Rti._getStarArgument(s), sEnv, t, tEnv, isLegacy);
+      return _isSubtype(universe, Rti._getStarArgument(s), sEnv, t, tEnv);
     }
     return sKind != Rti.kindQuestion;
   }
 
   // Left Legacy:
   if (sKind == Rti.kindStar) {
-    return _isSubtype(
-        universe, Rti._getStarArgument(s), sEnv, t, tEnv, isLegacy);
+    return _isSubtype(universe, Rti._getStarArgument(s), sEnv, t, tEnv);
   }
 
   // Right Legacy:
@@ -2440,26 +2426,23 @@
         isLegacy
             ? Rti._getStarArgument(t)
             : Rti._getQuestionFromStar(universe, t),
-        tEnv,
-        isLegacy);
+        tEnv);
   }
 
   // Left FutureOr:
   if (sKind == Rti.kindFutureOr) {
-    if (!_isSubtype(
-        universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv, isLegacy)) {
+    if (!_isSubtype(universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv)) {
       return false;
     }
-    return _isSubtype(universe, Rti._getFutureFromFutureOr(universe, s), sEnv,
-        t, tEnv, isLegacy);
+    return _isSubtype(
+        universe, Rti._getFutureFromFutureOr(universe, s), sEnv, t, tEnv);
   }
 
   // Left Nullable:
   if (sKind == Rti.kindQuestion) {
     return (isLegacy ||
-            _isSubtype(universe, TYPE_REF<Null>(), sEnv, t, tEnv, isLegacy)) &&
-        _isSubtype(
-            universe, Rti._getQuestionArgument(s), sEnv, t, tEnv, isLegacy);
+            _isSubtype(universe, TYPE_REF<Null>(), sEnv, t, tEnv)) &&
+        _isSubtype(universe, Rti._getQuestionArgument(s), sEnv, t, tEnv);
   }
 
   // Type Variable Reflexivity 1 is subsumed by Reflexivity and therefore
@@ -2469,20 +2452,18 @@
 
   // Right FutureOr:
   if (tKind == Rti.kindFutureOr) {
-    if (_isSubtype(
-        universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv, isLegacy)) {
+    if (_isSubtype(universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv)) {
       return true;
     }
-    return _isSubtype(universe, s, sEnv,
-        Rti._getFutureFromFutureOr(universe, t), tEnv, isLegacy);
+    return _isSubtype(
+        universe, s, sEnv, Rti._getFutureFromFutureOr(universe, t), tEnv);
   }
 
   // Right Nullable:
   if (tKind == Rti.kindQuestion) {
     return (!isLegacy &&
-            _isSubtype(universe, s, sEnv, TYPE_REF<Null>(), tEnv, isLegacy)) ||
-        _isSubtype(
-            universe, s, sEnv, Rti._getQuestionArgument(t), tEnv, isLegacy);
+            _isSubtype(universe, s, sEnv, TYPE_REF<Null>(), tEnv)) ||
+        _isSubtype(universe, s, sEnv, Rti._getQuestionArgument(t), tEnv);
   }
 
   // Left Promoted Variable does not apply at runtime.
@@ -2505,37 +2486,47 @@
 
     var sBounds = Rti._getGenericFunctionBounds(s);
     var tBounds = Rti._getGenericFunctionBounds(t);
-    if (!typesEqual(sBounds, tBounds, isLegacy)) return false;
+    int sLength = _Utils.arrayLength(sBounds);
+    int tLength = _Utils.arrayLength(tBounds);
+    if (sLength != tLength) return false;
+    for (int i = 0; i < sLength; i++) {
+      var sBound = _Utils.arrayAt(sBounds, i);
+      var tBound = _Utils.arrayAt(tBounds, i);
+      if (!_isSubtype(universe, sBound, sEnv, tBound, tEnv) ||
+          !_isSubtype(universe, tBound, tEnv, sBound, sEnv)) {
+        return false;
+      }
+    }
 
     sEnv = sEnv == null ? sBounds : _Utils.arrayConcat(sBounds, sEnv);
     tEnv = tEnv == null ? tBounds : _Utils.arrayConcat(tBounds, tEnv);
 
     return _isFunctionSubtype(universe, Rti._getGenericFunctionBase(s), sEnv,
-        Rti._getGenericFunctionBase(t), tEnv, isLegacy);
+        Rti._getGenericFunctionBase(t), tEnv);
   }
   if (tKind == Rti.kindFunction) {
     if (isJsFunctionType(s)) return true;
     if (sKind != Rti.kindFunction) return false;
-    return _isFunctionSubtype(universe, s, sEnv, t, tEnv, isLegacy);
+    return _isFunctionSubtype(universe, s, sEnv, t, tEnv);
   }
 
   // Interface Compositionality + Super-Interface:
   if (sKind == Rti.kindInterface) {
     if (tKind != Rti.kindInterface) return false;
-    return _isInterfaceSubtype(universe, s, sEnv, t, tEnv, isLegacy);
+    return _isInterfaceSubtype(universe, s, sEnv, t, tEnv);
   }
 
   return false;
 }
 
 // TODO(fishythefish): Support required named parameters.
-bool _isFunctionSubtype(universe, Rti s, sEnv, Rti t, tEnv, bool isLegacy) {
+bool _isFunctionSubtype(universe, Rti s, sEnv, Rti t, tEnv) {
   assert(Rti._getKind(s) == Rti.kindFunction);
   assert(Rti._getKind(t) == Rti.kindFunction);
 
   Rti sReturnType = Rti._getReturnType(s);
   Rti tReturnType = Rti._getReturnType(t);
-  if (!_isSubtype(universe, sReturnType, sEnv, tReturnType, tEnv, isLegacy)) {
+  if (!_isSubtype(universe, sReturnType, sEnv, tReturnType, tEnv)) {
     return false;
   }
 
@@ -2564,7 +2555,7 @@
   for (int i = 0; i < sRequiredPositionalLength; i++) {
     Rti sParameter = _castToRti(_Utils.arrayAt(sRequiredPositional, i));
     Rti tParameter = _castToRti(_Utils.arrayAt(tRequiredPositional, i));
-    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv, isLegacy)) {
+    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv)) {
       return false;
     }
   }
@@ -2573,7 +2564,7 @@
     Rti sParameter = _castToRti(_Utils.arrayAt(sOptionalPositional, i));
     Rti tParameter = _castToRti(
         _Utils.arrayAt(tRequiredPositional, sRequiredPositionalLength + i));
-    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv, isLegacy)) {
+    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv)) {
       return false;
     }
   }
@@ -2582,7 +2573,7 @@
     Rti sParameter = _castToRti(
         _Utils.arrayAt(sOptionalPositional, requiredPositionalDelta + i));
     Rti tParameter = _castToRti(_Utils.arrayAt(tOptionalPositional, i));
-    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv, isLegacy)) {
+    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv)) {
       return false;
     }
   }
@@ -2603,13 +2594,13 @@
     if (_Utils.stringLessThan(tName, sName)) return false;
     Rti sType = _castToRti(_Utils.arrayAt(sOptionalNamed, i - 1));
     Rti tType = _castToRti(_Utils.arrayAt(tOptionalNamed, j + 1));
-    if (!_isSubtype(universe, tType, tEnv, sType, sEnv, isLegacy)) return false;
+    if (!_isSubtype(universe, tType, tEnv, sType, sEnv)) return false;
   }
 
   return true;
 }
 
-bool _isInterfaceSubtype(universe, Rti s, sEnv, Rti t, tEnv, bool isLegacy) {
+bool _isInterfaceSubtype(universe, Rti s, sEnv, Rti t, tEnv) {
   String sName = Rti._getInterfaceName(s);
   String tName = Rti._getInterfaceName(t);
 
@@ -2638,18 +2629,18 @@
         switch (sVariance) {
           case Variance.legacyCovariant:
           case Variance.covariant:
-            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv, isLegacy)) {
+            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv)) {
               return false;
             }
             break;
           case Variance.contravariant:
-            if (!_isSubtype(universe, tArg, tEnv, sArg, sEnv, isLegacy)) {
+            if (!_isSubtype(universe, tArg, tEnv, sArg, sEnv)) {
               return false;
             }
             break;
           case Variance.invariant:
-            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv, isLegacy) ||
-                !_isSubtype(universe, tArg, tEnv, sArg, sEnv, isLegacy)) {
+            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv) ||
+                !_isSubtype(universe, tArg, tEnv, sArg, sEnv)) {
               return false;
             }
             break;
@@ -2658,7 +2649,7 @@
                 "Unknown variance given for subtype check: $sVariance");
         }
       } else {
-        if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv, isLegacy)) {
+        if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv)) {
           return false;
         }
       }
@@ -2687,102 +2678,15 @@
     String recipe = _Utils.asString(_Utils.arrayAt(supertypeArgs, i));
     Rti supertypeArg = _Universe.evalInEnvironment(universe, s, recipe);
     Rti tArg = _castToRti(_Utils.arrayAt(tArgs, i));
-    if (!_isSubtype(universe, supertypeArg, sEnv, tArg, tEnv, isLegacy)) {
+    if (!_isSubtype(universe, supertypeArg, sEnv, tArg, tEnv)) {
       return false;
     }
   }
   return true;
 }
 
-/// Types are equal if they are structurally equal up to renaming of bound type
-/// variables and equating all top types.
-///
-/// We ignore renaming of bound type variables because we operate on de Bruijn
-/// indices, not names.
-bool typeEqual(Rti s, Rti t, bool isLegacy) {
-  if (_Utils.isIdentical(s, t)) return true;
-
-  if (isTopType(s, isLegacy)) return isTopType(t, isLegacy);
-
-  int sKind = Rti._getKind(s);
-  int tKind = Rti._getKind(t);
-  if (sKind != tKind) return false;
-
-  switch (sKind) {
-    case Rti.kindStar:
-    case Rti.kindQuestion:
-    case Rti.kindFutureOr:
-      return typeEqual(_castToRti(Rti._getPrimary(s)),
-          _castToRti(Rti._getPrimary(t)), isLegacy);
-
-    case Rti.kindInterface:
-      if (Rti._getInterfaceName(s) != Rti._getInterfaceName(t)) return false;
-      return typesEqual(Rti._getInterfaceTypeArguments(s),
-          Rti._getInterfaceTypeArguments(t), isLegacy);
-
-    case Rti.kindBinding:
-      return typeEqual(
-              Rti._getBindingBase(s), Rti._getBindingBase(t), isLegacy) &&
-          typesEqual(Rti._getBindingArguments(s), Rti._getBindingArguments(t),
-              isLegacy);
-
-    case Rti.kindFunction:
-      return typeEqual(
-              Rti._getReturnType(s), Rti._getReturnType(t), isLegacy) &&
-          functionParametersEqual(Rti._getFunctionParameters(s),
-              Rti._getFunctionParameters(t), isLegacy);
-
-    case Rti.kindGenericFunction:
-      return typeEqual(Rti._getGenericFunctionBase(s),
-              Rti._getGenericFunctionBase(t), isLegacy) &&
-          typesEqual(Rti._getGenericFunctionBounds(s),
-              Rti._getGenericFunctionBounds(t), isLegacy);
-
-    default:
-      return false;
-  }
-}
-
-bool typesEqual(Object sArray, Object tArray, isLegacy) {
-  int sLength = _Utils.arrayLength(sArray);
-  int tLength = _Utils.arrayLength(tArray);
-  if (sLength != tLength) return false;
-  for (int i = 0; i < sLength; i++) {
-    if (!typeEqual(_castToRti(_Utils.arrayAt(sArray, i)),
-        _castToRti(_Utils.arrayAt(tArray, i)), isLegacy)) return false;
-  }
-  return true;
-}
-
-bool namedTypesEqual(Object sArray, Object tArray, isLegacy) {
-  int sLength = _Utils.arrayLength(sArray);
-  int tLength = _Utils.arrayLength(tArray);
-  assert(sLength.isEven);
-  assert(tLength.isEven);
-  if (sLength != tLength) return false;
-  for (int i = 0; i < sLength; i += 2) {
-    if (_Utils.asString(_Utils.arrayAt(sArray, i)) !=
-        _Utils.asString(_Utils.arrayAt(tArray, i))) return false;
-    if (!typeEqual(_castToRti(_Utils.arrayAt(sArray, i + 1)),
-        _castToRti(_Utils.arrayAt(tArray, i + 1)), isLegacy)) return false;
-  }
-  return true;
-}
-
-// TODO(fishythefish): Support required named parameters.
-bool functionParametersEqual(_FunctionParameters sParameters,
-        _FunctionParameters tParameters, isLegacy) =>
-    typesEqual(_FunctionParameters._getRequiredPositional(sParameters),
-        _FunctionParameters._getRequiredPositional(tParameters), isLegacy) &&
-    typesEqual(_FunctionParameters._getOptionalPositional(sParameters),
-        _FunctionParameters._getOptionalPositional(tParameters), isLegacy) &&
-    namedTypesEqual(_FunctionParameters._getOptionalNamed(sParameters),
-        _FunctionParameters._getOptionalNamed(tParameters), isLegacy);
-
-bool isLegacyTopType(Rti t) => isTopType(t, true);
-bool isNnbdTopType(Rti t) => isTopType(t, false);
-bool isTopType(Rti t, bool isLegacy) {
-  if (isLegacy) {
+bool isTopType(Rti t) {
+  if (JS_GET_FLAG('LEGACY')) {
     if (isObjectType(t)) return true;
   } else {
     if (isNullableObjectType(t)) return true;
@@ -2792,8 +2696,7 @@
       kind == Rti.kindVoid ||
       kind == Rti.kindAny ||
       kind == Rti.kindErased ||
-      kind == Rti.kindFutureOr &&
-          isTopType(Rti._getFutureOrArgument(t), isLegacy);
+      kind == Rti.kindFutureOr && isTopType(Rti._getFutureOrArgument(t));
 }
 
 bool isObjectType(Rti t) => _Utils.isIdentical(t, TYPE_REF<Object>());
@@ -2900,8 +2803,8 @@
   _Universe.addTypeParameterVariances(universe, variances);
 }
 
-bool testingIsLegacySubtype(universe, rti1, rti2) {
-  return isLegacySubtype(universe, _castToRti(rti1), _castToRti(rti2));
+bool testingIsSubtype(universe, rti1, rti2) {
+  return isSubtype(universe, _castToRti(rti1), _castToRti(rti2));
 }
 
 Object testingUniverseEval(universe, String recipe) {
diff --git a/sdk/lib/_internal/vm/bin/stdio_patch.dart b/sdk/lib/_internal/vm/bin/stdio_patch.dart
index 1303573..6ee2b8b 100644
--- a/sdk/lib/_internal/vm/bin/stdio_patch.dart
+++ b/sdk/lib/_internal/vm/bin/stdio_patch.dart
@@ -10,31 +10,30 @@
 class _StdIOUtils {
   @patch
   static Stdin _getStdioInputStream(int fd) {
-    switch (_getStdioHandleType(fd)) {
+    final type = _getStdioHandleType(fd);
+    if (type is OSError) {
+      throw FileSystemException(
+          "Failed to get type of stdio handle (fd $fd)", "", type);
+    }
+    switch (type) {
       case _stdioHandleTypeTerminal:
       case _stdioHandleTypePipe:
       case _stdioHandleTypeSocket:
+      case _stdioHandleTypeOther:
         return new Stdin._(new _Socket._readPipe(fd), fd);
       case _stdioHandleTypeFile:
         return new Stdin._(new _FileStream.forStdin(), fd);
-      default:
-        throw new FileSystemException(
-            "Couldn't determine file type of stdin (fd $fd)");
     }
   }
 
   @patch
   static _getStdioOutputStream(int fd) {
-    switch (_getStdioHandleType(fd)) {
-      case _stdioHandleTypeTerminal:
-      case _stdioHandleTypePipe:
-      case _stdioHandleTypeSocket:
-      case _stdioHandleTypeFile:
-        return new Stdout._(new IOSink(new _StdConsumer(fd)), fd);
-      default:
-        throw new FileSystemException(
-            "Couldn't determine file type of stdio handle (fd $fd)");
+    final type = _getStdioHandleType(fd);
+    if (type is OSError) {
+      throw FileSystemException(
+          "Failed to get type of stdio handle (fd $fd)", "", type);
     }
+    return new Stdout._(new IOSink(new _StdConsumer(fd)), fd);
   }
 
   @patch
diff --git a/sdk/lib/_internal/vm/bin/vmservice_io.dart b/sdk/lib/_internal/vm/bin/vmservice_io.dart
index 29fa6db..7e3146d 100644
--- a/sdk/lib/_internal/vm/bin/vmservice_io.dart
+++ b/sdk/lib/_internal/vm/bin/vmservice_io.dart
@@ -40,6 +40,8 @@
 @pragma("vm:entry-point")
 var _signalWatch;
 var _signalSubscription;
+@pragma("vm:entry-point")
+bool _enableServicePortFallback = false;
 
 // HTTP server.
 Server server;
@@ -53,7 +55,7 @@
   var service = new VMService();
   // Lazily create server.
   server = new Server(service, _ip, _port, _originCheckDisabled,
-      _authCodesDisabled, _serviceInfoFilename);
+      _authCodesDisabled, _serviceInfoFilename, _enableServicePortFallback);
 }
 
 Future cleanupCallback() async {
diff --git a/sdk/lib/_internal/vm/bin/vmservice_server.dart b/sdk/lib/_internal/vm/bin/vmservice_server.dart
index 46ac1e2..06f39b6 100644
--- a/sdk/lib/_internal/vm/bin/vmservice_server.dart
+++ b/sdk/lib/_internal/vm/bin/vmservice_server.dart
@@ -147,12 +147,13 @@
 
   final VMService _service;
   final String _ip;
-  final int _port;
   final bool _originCheckDisabled;
   final bool _authCodesDisabled;
+  final bool _enableServicePortFallback;
   final String _serviceInfoFilename;
   HttpServer _server;
   bool get running => _server != null;
+  int _port = -1;
 
   /// Returns the server address including the auth token.
   Uri get serverAddress {
@@ -167,8 +168,14 @@
 
   // On Fuchsia, authentication codes are disabled by default. To enable, the authentication token
   // would have to be written into the hub alongside the port number.
-  Server(this._service, this._ip, this._port, this._originCheckDisabled,
-      bool authCodesDisabled, this._serviceInfoFilename)
+  Server(
+      this._service,
+      this._ip,
+      this._port,
+      this._originCheckDisabled,
+      bool authCodesDisabled,
+      this._serviceInfoFilename,
+      this._enableServicePortFallback)
       : _authCodesDisabled = (authCodesDisabled || Platform.isFuchsia);
 
   bool _isAllowedOrigin(String origin) {
@@ -422,6 +429,10 @@
         onServerAddressChange(null);
         return this;
       }
+      if (_port != 0 && _enableServicePortFallback && attempts >= 3) {
+        _port = 0;
+        serverPrint('Falling back to automatic port selection');
+      }
       await new Future<Null>.delayed(const Duration(seconds: 1));
     }
     if (_service.isExiting) {
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 3526df1..0192bfe 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -72,7 +72,7 @@
   // `Future` implementation could potentially invoke the callback with the
   // wrong number of arguments.
   if (Zone.current == Zone.root) return continuation;
-  return Zone.current.registerUnaryCallback((x) => continuation(x, null, null));
+  return Zone.current.registerUnaryCallback(continuation);
 }
 
 // We need to pass the exception and stack trace objects as second and third
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 58d810f..9e856ea 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -592,6 +592,7 @@
   }
 
   // Shadowing definition.
+
   num get delay => JS("num", "#.delay", this);
 
   set delay(num value) {
@@ -599,6 +600,7 @@
   }
 
   // Shadowing definition.
+
   String get direction => JS("String", "#.direction", this);
 
   set direction(String value) {
@@ -606,6 +608,7 @@
   }
 
   // Shadowing definition.
+
   Object get duration => JS("Object", "#.duration", this);
 
   set duration(Object value) {
@@ -613,6 +616,7 @@
   }
 
   // Shadowing definition.
+
   String get easing => JS("String", "#.easing", this);
 
   set easing(String value) {
@@ -620,6 +624,7 @@
   }
 
   // Shadowing definition.
+
   num get endDelay => JS("num", "#.endDelay", this);
 
   set endDelay(num value) {
@@ -627,6 +632,7 @@
   }
 
   // Shadowing definition.
+
   String get fill => JS("String", "#.fill", this);
 
   set fill(String value) {
@@ -634,6 +640,7 @@
   }
 
   // Shadowing definition.
+
   num get iterationStart => JS("num", "#.iterationStart", this);
 
   set iterationStart(num value) {
@@ -641,6 +648,7 @@
   }
 
   // Shadowing definition.
+
   num get iterations => JS("num", "#.iterations", this);
 
   set iterations(num value) {
@@ -1393,6 +1401,7 @@
   }
 
   // Shadowing definition.
+
   String get returnValue => JS("String", "#.returnValue", this);
 
   set returnValue(String value) {
@@ -10156,6 +10165,7 @@
   static DomMatrix _create_2() => JS('DomMatrix', 'new DOMMatrix()');
 
   // Shadowing definition.
+
   num get a => JS("num", "#.a", this);
 
   set a(num value) {
@@ -10163,6 +10173,7 @@
   }
 
   // Shadowing definition.
+
   num get b => JS("num", "#.b", this);
 
   set b(num value) {
@@ -10170,6 +10181,7 @@
   }
 
   // Shadowing definition.
+
   num get c => JS("num", "#.c", this);
 
   set c(num value) {
@@ -10177,6 +10189,7 @@
   }
 
   // Shadowing definition.
+
   num get d => JS("num", "#.d", this);
 
   set d(num value) {
@@ -10184,6 +10197,7 @@
   }
 
   // Shadowing definition.
+
   num get e => JS("num", "#.e", this);
 
   set e(num value) {
@@ -10191,6 +10205,7 @@
   }
 
   // Shadowing definition.
+
   num get f => JS("num", "#.f", this);
 
   set f(num value) {
@@ -10198,6 +10213,7 @@
   }
 
   // Shadowing definition.
+
   num get m11 => JS("num", "#.m11", this);
 
   set m11(num value) {
@@ -10205,6 +10221,7 @@
   }
 
   // Shadowing definition.
+
   num get m12 => JS("num", "#.m12", this);
 
   set m12(num value) {
@@ -10212,6 +10229,7 @@
   }
 
   // Shadowing definition.
+
   num get m13 => JS("num", "#.m13", this);
 
   set m13(num value) {
@@ -10219,6 +10237,7 @@
   }
 
   // Shadowing definition.
+
   num get m14 => JS("num", "#.m14", this);
 
   set m14(num value) {
@@ -10226,6 +10245,7 @@
   }
 
   // Shadowing definition.
+
   num get m21 => JS("num", "#.m21", this);
 
   set m21(num value) {
@@ -10233,6 +10253,7 @@
   }
 
   // Shadowing definition.
+
   num get m22 => JS("num", "#.m22", this);
 
   set m22(num value) {
@@ -10240,6 +10261,7 @@
   }
 
   // Shadowing definition.
+
   num get m23 => JS("num", "#.m23", this);
 
   set m23(num value) {
@@ -10247,6 +10269,7 @@
   }
 
   // Shadowing definition.
+
   num get m24 => JS("num", "#.m24", this);
 
   set m24(num value) {
@@ -10254,6 +10277,7 @@
   }
 
   // Shadowing definition.
+
   num get m31 => JS("num", "#.m31", this);
 
   set m31(num value) {
@@ -10261,6 +10285,7 @@
   }
 
   // Shadowing definition.
+
   num get m32 => JS("num", "#.m32", this);
 
   set m32(num value) {
@@ -10268,6 +10293,7 @@
   }
 
   // Shadowing definition.
+
   num get m33 => JS("num", "#.m33", this);
 
   set m33(num value) {
@@ -10275,6 +10301,7 @@
   }
 
   // Shadowing definition.
+
   num get m34 => JS("num", "#.m34", this);
 
   set m34(num value) {
@@ -10282,6 +10309,7 @@
   }
 
   // Shadowing definition.
+
   num get m41 => JS("num", "#.m41", this);
 
   set m41(num value) {
@@ -10289,6 +10317,7 @@
   }
 
   // Shadowing definition.
+
   num get m42 => JS("num", "#.m42", this);
 
   set m42(num value) {
@@ -10296,6 +10325,7 @@
   }
 
   // Shadowing definition.
+
   num get m43 => JS("num", "#.m43", this);
 
   set m43(num value) {
@@ -10303,6 +10333,7 @@
   }
 
   // Shadowing definition.
+
   num get m44 => JS("num", "#.m44", this);
 
   set m44(num value) {
@@ -10581,6 +10612,7 @@
       JS('bool', '!!(window.DOMPoint) || !!(window.WebKitPoint)');
 
   // Shadowing definition.
+
   num get w => JS("num", "#.w", this);
 
   set w(num value) {
@@ -10588,6 +10620,7 @@
   }
 
   // Shadowing definition.
+
   num get x => JS("num", "#.x", this);
 
   set x(num value) {
@@ -10595,6 +10628,7 @@
   }
 
   // Shadowing definition.
+
   num get y => JS("num", "#.y", this);
 
   set y(num value) {
@@ -10602,6 +10636,7 @@
   }
 
   // Shadowing definition.
+
   num get z => JS("num", "#.z", this);
 
   set z(num value) {
@@ -13872,6 +13907,7 @@
   String inputMode;
 
   // Using property as subclass shadows.
+
   bool get isContentEditable => JS("bool", "#.isContentEditable", this);
 
   String lang;
@@ -13935,6 +13971,7 @@
   final String _namespaceUri;
 
   // Using property as subclass shadows.
+
   String get outerHtml => JS("String", "#.outerHTML", this);
 
   @JSName('scrollHeight')
@@ -33048,6 +33085,7 @@
   static _DomRect _create_5() => JS('_DomRect', 'new DOMRect()');
 
   // Shadowing definition.
+
   num get height => JS("num", "#.height", this);
 
   set height(num value) {
@@ -33055,6 +33093,7 @@
   }
 
   // Shadowing definition.
+
   num get width => JS("num", "#.width", this);
 
   set width(num value) {
@@ -33062,6 +33101,7 @@
   }
 
   // Shadowing definition.
+
   num get x => JS("num", "#.x", this);
 
   set x(num value) {
@@ -33069,6 +33109,7 @@
   }
 
   // Shadowing definition.
+
   num get y => JS("num", "#.y", this);
 
   set y(num value) {
@@ -35676,7 +35717,9 @@
     }
     // Remove current event listener.
     _unlisten();
-    _onData = _wrapZone<Event>(handleData);
+    _onData = handleData == null
+        ? null
+        : _wrapZone<Event>((e) => (handleData as dynamic)(e));
     _tryResume();
   }
 
diff --git a/sdk/lib/io/common.dart b/sdk/lib/io/common.dart
index d047752..e6b5547 100644
--- a/sdk/lib/io/common.dart
+++ b/sdk/lib/io/common.dart
@@ -106,9 +106,7 @@
   var newBuffer = new Uint8List(length);
   int j = start;
   for (int i = 0; i < length; i++) {
-    int value = buffer[j];
-    if (value == null) throw ArgumentError("List element is null at index $j");
-    newBuffer[i] = value;
+    newBuffer[i] = buffer[j];
     j++;
   }
   return new _BufferAndStart(newBuffer, 0);
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index 8faf791..4dfc0af 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -6,11 +6,13 @@
 
 part of dart.io;
 
+// These match enum StdioHandleType in file.h
 const int _stdioHandleTypeTerminal = 0;
 const int _stdioHandleTypePipe = 1;
 const int _stdioHandleTypeFile = 2;
 const int _stdioHandleTypeSocket = 3;
 const int _stdioHandleTypeOther = 4;
+const int _stdioHandleTypeError = 5;
 
 class _StdStream extends Stream<List<int>> {
   final Stream<List<int>> _stream;
@@ -436,7 +438,12 @@
     object = object._stream;
   } else if (object == stdout || object == stderr) {
     int stdiofd = object == stdout ? _stdoutFD : _stderrFD;
-    switch (_StdIOUtils._getStdioHandleType(stdiofd)) {
+    final type = _StdIOUtils._getStdioHandleType(stdiofd);
+    if (type is OSError) {
+      throw FileSystemException(
+          "Failed to get type of stdio handle (fd $stdiofd)", "", type);
+    }
+    switch (type) {
       case _stdioHandleTypeTerminal:
         return StdioType.terminal;
       case _stdioHandleTypePipe:
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index ca8fbb2..2ad4ec6 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -3181,6 +3181,7 @@
   SvgElement.created() : super.created();
 
   // Shadowing definition.
+
   AnimatedString get _svgClassName => JS("AnimatedString", "#.className", this);
 
   @JSName('ownerSVGElement')
diff --git a/sdk_nnbd/lib/_http/http_parser.dart b/sdk_nnbd/lib/_http/http_parser.dart
index 4a4f196..ea51e57 100644
--- a/sdk_nnbd/lib/_http/http_parser.dart
+++ b/sdk_nnbd/lib/_http/http_parser.dart
@@ -243,7 +243,7 @@
   int _statusCode = 0;
   int _statusCodeLength = 0;
   final List<int> _method = [];
-  final List<int> _uri_or_reason_phrase = [];
+  final List<int> _uriOrReasonPhrase = [];
   final List<int> _headerField = [];
   final List<int> _headerValue = [];
 
@@ -314,8 +314,13 @@
     try {
       _doParse();
     } catch (e, s) {
-      _state = _State.FAILURE;
-      _reportError(e, s);
+      if (_state >= _State.CHUNK_SIZE_STARTING_CR && _state <= _State.BODY) {
+        _state = _State.FAILURE;
+        _reportBodyError(e, s);
+      } else {
+        _state = _State.FAILURE;
+        _reportHttpError(e, s);
+      }
     }
   }
 
@@ -346,13 +351,13 @@
     var incoming = _createIncoming(_transferLength);
     if (_requestParser) {
       incoming.method = new String.fromCharCodes(_method);
-      incoming.uri = Uri.parse(new String.fromCharCodes(_uri_or_reason_phrase));
+      incoming.uri = Uri.parse(new String.fromCharCodes(_uriOrReasonPhrase));
     } else {
       incoming.statusCode = _statusCode;
-      incoming.reasonPhrase = new String.fromCharCodes(_uri_or_reason_phrase);
+      incoming.reasonPhrase = new String.fromCharCodes(_uriOrReasonPhrase);
     }
     _method.clear();
-    _uri_or_reason_phrase.clear();
+    _uriOrReasonPhrase.clear();
     if (_connectionUpgrade) {
       incoming.upgraded = true;
       _parserCalled = false;
@@ -507,7 +512,7 @@
 
         case _State.REQUEST_LINE_URI:
           if (byte == _CharCode.SP) {
-            if (_uri_or_reason_phrase.length == 0) {
+            if (_uriOrReasonPhrase.length == 0) {
               throw new HttpException("Invalid request URI");
             }
             _state = _State.REQUEST_LINE_HTTP_VERSION;
@@ -516,7 +521,7 @@
             if (byte == _CharCode.CR || byte == _CharCode.LF) {
               throw new HttpException("Invalid request URI");
             }
-            _uri_or_reason_phrase.add(byte);
+            _uriOrReasonPhrase.add(byte);
           }
           break;
 
@@ -565,7 +570,7 @@
             _state = _State.RESPONSE_LINE_ENDING;
           } else {
             _statusCodeLength++;
-            if ((byte < 0x30 && 0x39 < byte) || _statusCodeLength > 3) {
+            if (byte < 0x30 || byte > 0x39 || _statusCodeLength > 3) {
               throw new HttpException("Invalid response status code");
             } else {
               _statusCode = _statusCode * 10 + byte - 0x30;
@@ -580,7 +585,7 @@
             if (byte == _CharCode.CR || byte == _CharCode.LF) {
               throw new HttpException("Invalid response reason phrase");
             }
-            _uri_or_reason_phrase.add(byte);
+            _uriOrReasonPhrase.add(byte);
           }
           break;
 
@@ -822,8 +827,8 @@
       if (_state != _State.UPGRADED &&
           !(_state == _State.START && !_requestParser) &&
           !(_state == _State.BODY && !_chunked && _transferLength == -1)) {
-        _bodyController!.addError(
-            new HttpException("Connection closed while receiving data"));
+        _reportBodyError(
+            HttpException("Connection closed while receiving data"));
       }
       _closeIncoming(true);
       _controller.close();
@@ -832,8 +837,8 @@
     // If the connection is idle the HTTP stream is closed.
     if (_state == _State.START) {
       if (!_requestParser) {
-        _reportError(new HttpException(
-            "Connection closed before full header was received"));
+        _reportHttpError(
+            HttpException("Connection closed before full header was received"));
       }
       _controller.close();
       return;
@@ -848,8 +853,8 @@
       _state = _State.FAILURE;
       // Report the error through the error callback if any. Otherwise
       // throw the error.
-      _reportError(new HttpException(
-          "Connection closed before full header was received"));
+      _reportHttpError(
+          HttpException("Connection closed before full header was received"));
       _controller.close();
       return;
     }
@@ -860,8 +865,8 @@
       _state = _State.FAILURE;
       // Report the error through the error callback if any. Otherwise
       // throw the error.
-      _reportError(
-          new HttpException("Connection closed before full body was received"));
+      _reportHttpError(
+          HttpException("Connection closed before full body was received"));
     }
     _controller.close();
   }
@@ -908,7 +913,7 @@
     _headerField.clear();
     _headerValue.clear();
     _method.clear();
-    _uri_or_reason_phrase.clear();
+    _uriOrReasonPhrase.clear();
 
     _statusCode = 0;
     _statusCodeLength = 0;
@@ -967,7 +972,7 @@
   }
 
   // expected should already be lowercase.
-  bool _caseInsensitiveCompare(List<int> expected, List<int> value) {
+  static bool _caseInsensitiveCompare(List<int> expected, List<int> value) {
     if (expected.length != value.length) return false;
     for (int i = 0; i < expected.length; i++) {
       if (expected[i] != _toLowerCaseByte(value[i])) return false;
@@ -977,7 +982,8 @@
 
   void _expect(int val1, int val2) {
     if (val1 != val2) {
-      throw new HttpException("Failed to parse HTTP");
+      throw new HttpException(
+          "Failed to parse HTTP, $val1 does not match $val2");
     }
   }
 
@@ -989,7 +995,8 @@
     } else if (0x61 <= byte && byte <= 0x66) {
       return byte - 0x61 + 10; // a - f
     } else {
-      throw new HttpException("Failed to parse HTTP");
+      throw new HttpException(
+          "Failed to parse HTTP, $byte should be a Hex digit");
     }
   }
 
@@ -1058,10 +1065,18 @@
     }
   }
 
-  void _reportError(Object error, [StackTrace? stackTrace]) {
+  void _reportHttpError(error, [stackTrace]) {
     _socketSubscription?.cancel();
     _state = _State.FAILURE;
     _controller.addError(error, stackTrace);
     _controller.close();
   }
+
+  void _reportBodyError(error, [stackTrace]) {
+    _socketSubscription?.cancel();
+    _state = _State.FAILURE;
+    _bodyController.addError(error, stackTrace);
+    // In case of drain(), error event will close the stream.
+    _bodyController?.close();
+  }
 }
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
index 8c28b56..bbe913d 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 import 'dart:_js_helper' show patch;
 import 'dart:async';
 import 'dart:convert';
@@ -320,7 +318,7 @@
   }
 
   @patch
-  static int _pid(Process process) {
+  static int _pid(Process? process) {
     throw UnsupportedError("ProcessUtils._pid");
   }
 
@@ -347,8 +345,8 @@
 class Process {
   @patch
   static Future<Process> start(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment = true,
       bool runInShell = false,
       ProcessStartMode mode = ProcessStartMode.normal}) {
@@ -357,8 +355,8 @@
 
   @patch
   static Future<ProcessResult> run(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment = true,
       bool runInShell = false,
       Encoding stdoutEncoding = systemEncoding,
@@ -368,8 +366,8 @@
 
   @patch
   static ProcessResult runSync(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment = true,
       bool runInShell = false,
       Encoding stdoutEncoding = systemEncoding,
@@ -459,14 +457,14 @@
 @patch
 class RawSocket {
   @patch
-  static Future<RawSocket> connect(host, int port,
-      {sourceAddress, Duration timeout}) {
+  static Future<RawSocket> connect(dynamic host, int port,
+      {dynamic sourceAddress, Duration? timeout}) {
     throw UnsupportedError("RawSocket constructor");
   }
 
   @patch
-  static Future<ConnectionTask<RawSocket>> startConnect(host, int port,
-      {sourceAddress}) {
+  static Future<ConnectionTask<RawSocket>> startConnect(dynamic host, int port,
+      {dynamic sourceAddress}) {
     throw UnsupportedError("RawSocket constructor");
   }
 }
@@ -474,14 +472,14 @@
 @patch
 class Socket {
   @patch
-  static Future<Socket> _connect(host, int port,
-      {sourceAddress, Duration timeout}) {
+  static Future<Socket> _connect(dynamic host, int port,
+      {dynamic sourceAddress, Duration? timeout}) {
     throw UnsupportedError("Socket constructor");
   }
 
   @patch
-  static Future<ConnectionTask<Socket>> _startConnect(host, int port,
-      {sourceAddress}) {
+  static Future<ConnectionTask<Socket>> _startConnect(dynamic host, int port,
+      {dynamic sourceAddress}) {
     throw UnsupportedError("Socket constructor");
   }
 }
@@ -497,7 +495,7 @@
 @patch
 class RawSynchronousSocket {
   @patch
-  static RawSynchronousSocket connectSync(host, int port) {
+  static RawSynchronousSocket connectSync(dynamic host, int port) {
     throw UnsupportedError("RawSynchronousSocket.connectSync");
   }
 }
@@ -539,7 +537,7 @@
 @patch
 class RawDatagramSocket {
   @patch
-  static Future<RawDatagramSocket> bind(host, int port,
+  static Future<RawDatagramSocket> bind(dynamic host, int port,
       {bool reuseAddress = true, bool reusePort = false, int ttl = 1}) {
     throw UnsupportedError("RawDatagramSocket.bind");
   }
@@ -601,14 +599,14 @@
       int windowBits,
       int memLevel,
       int strategy,
-      List<int> dictionary,
+      List<int>? dictionary,
       bool raw) {
     throw UnsupportedError("_newZLibDeflateFilter");
   }
 
   @patch
   static RawZLibFilter _makeZLibInflateFilter(
-      int windowBits, List<int> dictionary, bool raw) {
+      int windowBits, List<int>? dictionary, bool raw) {
     throw UnsupportedError("_newZLibInflateFilter");
   }
 }
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index b58a312..e2915e9 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -1343,15 +1343,22 @@
       // given a type parameter `T1 extends U1` from g1, and a type parameter
       // `T2 extends U2` from g2, we must ensure that:
       //
-      //      U2 == U1
+      //      U1 == U2
+      //
+      // given a legacy type can be equivalent to nullable or non-nullable
+      // versions of the same type. The language spec recomends testing for
+      // mutual subtypes to allow this behaivor.
       //
       // (Note there is no variance in the type bounds of type parameters of
       // generic functions).
       let t1Bounds = $t1.instantiateTypeBounds(fresh);
       let t2Bounds = $t2.instantiateTypeBounds(fresh);
       for (let i = 0; i < formalCount; i++) {
-        if (t2Bounds[i] != t1Bounds[i]) {
-          return false;
+        if (t1Bounds[i] != t2Bounds[i]) {
+          if (!($_isSubtype(t1Bounds[i], t2Bounds[i], $strictMode)
+              && $_isSubtype(t2Bounds[i], t1Bounds[i], $strictMode))) {
+            return false;
+          }
         }
       }
     }
@@ -1620,6 +1627,7 @@
   /// In the case where `false` is returned, some bogus constraints may have
   /// been added to [_protoConstraints].  It is the caller's responsibility to
   /// discard them if necessary.
+  // TODO(#40326) Update to support null safety subtyping algorithm.
   bool _isSubtypeMatch(Object subtype, Object supertype) {
     // A type variable `T` in `L` is a subtype match for any type schema `Q`:
     // - Under constraint `T <: Q`.
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
index 48946c3..f657133 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 import 'dart:_js_helper' show patch;
 import 'dart:_internal' hide Symbol;
 import 'dart:async';
@@ -320,7 +318,7 @@
   }
 
   @patch
-  static int _pid(Process process) {
+  static int _pid(Process? process) {
     throw new UnsupportedError("ProcessUtils._pid");
   }
 
@@ -347,8 +345,8 @@
 class Process {
   @patch
   static Future<Process> start(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
       ProcessStartMode mode: ProcessStartMode.normal}) {
@@ -357,8 +355,8 @@
 
   @patch
   static Future<ProcessResult> run(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
       Encoding stdoutEncoding: systemEncoding,
@@ -368,8 +366,8 @@
 
   @patch
   static ProcessResult runSync(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
       Encoding stdoutEncoding: systemEncoding,
@@ -459,14 +457,14 @@
 @patch
 class RawSocket {
   @patch
-  static Future<RawSocket> connect(host, int port,
-      {sourceAddress, Duration timeout}) {
+  static Future<RawSocket> connect(dynamic host, int port,
+      {dynamic sourceAddress, Duration? timeout}) {
     throw new UnsupportedError("RawSocket constructor");
   }
 
   @patch
-  static Future<ConnectionTask<RawSocket>> startConnect(host, int port,
-      {sourceAddress}) {
+  static Future<ConnectionTask<RawSocket>> startConnect(dynamic host, int port,
+      {dynamic sourceAddress}) {
     throw new UnsupportedError("RawSocket constructor");
   }
 }
@@ -474,14 +472,14 @@
 @patch
 class Socket {
   @patch
-  static Future<Socket> _connect(host, int port,
-      {sourceAddress, Duration timeout}) {
+  static Future<Socket> _connect(dynamic host, int port,
+      {dynamic sourceAddress, Duration? timeout}) {
     throw new UnsupportedError("Socket constructor");
   }
 
   @patch
-  static Future<ConnectionTask<Socket>> _startConnect(host, int port,
-      {sourceAddress}) {
+  static Future<ConnectionTask<Socket>> _startConnect(dynamic host, int port,
+      {dynamic sourceAddress}) {
     throw new UnsupportedError("Socket constructor");
   }
 }
@@ -497,7 +495,7 @@
 @patch
 class RawSynchronousSocket {
   @patch
-  static RawSynchronousSocket connectSync(host, int port) {
+  static RawSynchronousSocket connectSync(dynamic host, int port) {
     throw new UnsupportedError("RawSynchronousSocket.connectSync");
   }
 }
@@ -539,7 +537,7 @@
 @patch
 class RawDatagramSocket {
   @patch
-  static Future<RawDatagramSocket> bind(host, int port,
+  static Future<RawDatagramSocket> bind(dynamic host, int port,
       {bool reuseAddress: true, bool reusePort: false, int ttl: 1}) {
     throw new UnsupportedError("RawDatagramSocket.bind");
   }
@@ -601,14 +599,14 @@
       int windowBits,
       int memLevel,
       int strategy,
-      List<int> dictionary,
+      List<int>? dictionary,
       bool raw) {
     throw new UnsupportedError("_newZLibDeflateFilter");
   }
 
   @patch
   static RawZLibFilter _makeZLibInflateFilter(
-      int windowBits, List<int> dictionary, bool raw) {
+      int windowBits, List<int>? dictionary, bool raw) {
     throw new UnsupportedError("_newZLibInflateFilter");
   }
 }
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart
index 8ee75ae..ef15c15 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart
@@ -812,8 +812,7 @@
 
   var isFn = RAW_DART_FUNCTION_REF(_generalIsTestImplementation);
 
-  // TODO(fishythefish): Update for NNBD.
-  if (isLegacyTopType(testRti)) {
+  if (isTopType(testRti)) {
     isFn = RAW_DART_FUNCTION_REF(_isTop);
     var asFn = RAW_DART_FUNCTION_REF(_asTop);
     Rti._setAsCheckFunction(testRti, asFn);
@@ -835,11 +834,7 @@
       String name = Rti._getInterfaceName(testRti);
       var arguments = Rti._getInterfaceTypeArguments(testRti);
       if (JS(
-          'bool',
-          '#.every(#)',
-          arguments,
-          // TODO(fishythefish): Update for NNBD.
-          RAW_DART_FUNCTION_REF(isLegacyTopType))) {
+          'bool', '#.every(#)', arguments, RAW_DART_FUNCTION_REF(isTopType))) {
         String propertyName =
             '${JS_GET_NAME(JsGetName.OPERATOR_IS_PREFIX)}${name}';
         Rti._setSpecializedTestResource(testRti, propertyName);
@@ -858,8 +853,7 @@
   // method. The Rti object is 'this'.
   Rti testRti = _castToRti(JS('', 'this'));
   Rti objectRti = instanceOrFunctionType(object, testRti);
-  // TODO(fishythefish): Update for NNBD.
-  return isLegacySubtype(_theUniverse(), objectRti, testRti);
+  return isSubtype(_theUniverse(), objectRti, testRti);
 }
 
 /// Called from generated code.
@@ -910,8 +904,7 @@
 
 /// Called from generated code.
 checkTypeBound(Rti type, Rti bound, variable, methodName) {
-  // TODO(fishythefish): Update for NNBD.
-  if (isLegacySubtype(_theUniverse(), type, bound)) return type;
+  if (isSubtype(_theUniverse(), type, bound)) return type;
   String message = "The type argument '${_rtiToString(type, null)}' is not"
       " a subtype of the type variable bound '${_rtiToString(bound, null)}'"
       " of type variable '${_Utils.asString(variable)}' in '$methodName'.";
@@ -1110,8 +1103,7 @@
       typeParametersText += typeSep;
       typeParametersText += genericContext[genericContext.length - 1 - i];
       Rti boundRti = _castToRti(_Utils.arrayAt(bounds, i));
-      // TODO(fishythefish): Update for NNBD.
-      if (!isLegacyTopType(boundRti)) {
+      if (!isTopType(boundRti)) {
         typeParametersText +=
             ' extends ' + _rtiToString(boundRti, genericContext);
       }
@@ -2340,12 +2332,8 @@
 // -------- Subtype tests ------------------------------------------------------
 
 // Future entry point from compiled code.
-bool isLegacySubtype(universe, Rti s, Rti t) {
-  return _isSubtype(universe, s, null, t, null, true);
-}
-
-bool isNnbdSubtype(universe, Rti s, Rti t) {
-  return _isSubtype(universe, s, null, t, null, false);
+bool isSubtype(universe, Rti s, Rti t) {
+  return _isSubtype(universe, s, null, t, null);
 }
 
 /// Based on
@@ -2371,18 +2359,20 @@
 /// the bottom of the type hierarchy, `Object` is treated as nullable, and
 /// `required` is ignored on named parameters. This should provide the same
 /// subtyping results as pre-NNBD Dart.
-bool _isSubtype(universe, Rti s, sEnv, Rti t, tEnv, bool isLegacy) {
+bool _isSubtype(universe, Rti s, sEnv, Rti t, tEnv) {
+  bool isLegacy = JS_GET_FLAG('LEGACY');
+
   // Reflexivity:
   if (_Utils.isIdentical(s, t)) return true;
 
   // Right Top:
-  if (isTopType(t, isLegacy)) return true;
+  if (isTopType(t)) return true;
 
   int sKind = Rti._getKind(s);
   if (sKind == Rti.kindAny) return true;
 
   // Left Top:
-  if (isTopType(s, isLegacy)) return false;
+  if (isTopType(s)) return false;
 
   // Left Bottom:
   if (isLegacy) {
@@ -2396,7 +2386,7 @@
   if (leftTypeVariable) {
     int index = Rti._getGenericFunctionParameterIndex(s);
     Rti bound = _castToRti(_Utils.arrayAt(sEnv, index));
-    if (_isSubtype(universe, bound, sEnv, t, tEnv, isLegacy)) return true;
+    if (_isSubtype(universe, bound, sEnv, t, tEnv)) return true;
   }
 
   int tKind = Rti._getKind(t);
@@ -2406,8 +2396,7 @@
   // reduce casework.
   if (!isLegacy && isNullType(s)) {
     if (tKind == Rti.kindFutureOr) {
-      return _isSubtype(
-          universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv, isLegacy);
+      return _isSubtype(universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv);
     }
     return isNullType(t) || tKind == Rti.kindQuestion || tKind == Rti.kindStar;
   }
@@ -2415,20 +2404,17 @@
   // Right Object:
   if (!isLegacy && isObjectType(t)) {
     if (sKind == Rti.kindFutureOr) {
-      return _isSubtype(
-          universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv, isLegacy);
+      return _isSubtype(universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv);
     }
     if (sKind == Rti.kindStar) {
-      return _isSubtype(
-          universe, Rti._getStarArgument(s), sEnv, t, tEnv, isLegacy);
+      return _isSubtype(universe, Rti._getStarArgument(s), sEnv, t, tEnv);
     }
     return sKind != Rti.kindQuestion;
   }
 
   // Left Legacy:
   if (sKind == Rti.kindStar) {
-    return _isSubtype(
-        universe, Rti._getStarArgument(s), sEnv, t, tEnv, isLegacy);
+    return _isSubtype(universe, Rti._getStarArgument(s), sEnv, t, tEnv);
   }
 
   // Right Legacy:
@@ -2440,26 +2426,23 @@
         isLegacy
             ? Rti._getStarArgument(t)
             : Rti._getQuestionFromStar(universe, t),
-        tEnv,
-        isLegacy);
+        tEnv);
   }
 
   // Left FutureOr:
   if (sKind == Rti.kindFutureOr) {
-    if (!_isSubtype(
-        universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv, isLegacy)) {
+    if (!_isSubtype(universe, Rti._getFutureOrArgument(s), sEnv, t, tEnv)) {
       return false;
     }
-    return _isSubtype(universe, Rti._getFutureFromFutureOr(universe, s), sEnv,
-        t, tEnv, isLegacy);
+    return _isSubtype(
+        universe, Rti._getFutureFromFutureOr(universe, s), sEnv, t, tEnv);
   }
 
   // Left Nullable:
   if (sKind == Rti.kindQuestion) {
     return (isLegacy ||
-            _isSubtype(universe, TYPE_REF<Null>(), sEnv, t, tEnv, isLegacy)) &&
-        _isSubtype(
-            universe, Rti._getQuestionArgument(s), sEnv, t, tEnv, isLegacy);
+            _isSubtype(universe, TYPE_REF<Null>(), sEnv, t, tEnv)) &&
+        _isSubtype(universe, Rti._getQuestionArgument(s), sEnv, t, tEnv);
   }
 
   // Type Variable Reflexivity 1 is subsumed by Reflexivity and therefore
@@ -2469,20 +2452,18 @@
 
   // Right FutureOr:
   if (tKind == Rti.kindFutureOr) {
-    if (_isSubtype(
-        universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv, isLegacy)) {
+    if (_isSubtype(universe, s, sEnv, Rti._getFutureOrArgument(t), tEnv)) {
       return true;
     }
-    return _isSubtype(universe, s, sEnv,
-        Rti._getFutureFromFutureOr(universe, t), tEnv, isLegacy);
+    return _isSubtype(
+        universe, s, sEnv, Rti._getFutureFromFutureOr(universe, t), tEnv);
   }
 
   // Right Nullable:
   if (tKind == Rti.kindQuestion) {
     return (!isLegacy &&
-            _isSubtype(universe, s, sEnv, TYPE_REF<Null>(), tEnv, isLegacy)) ||
-        _isSubtype(
-            universe, s, sEnv, Rti._getQuestionArgument(t), tEnv, isLegacy);
+            _isSubtype(universe, s, sEnv, TYPE_REF<Null>(), tEnv)) ||
+        _isSubtype(universe, s, sEnv, Rti._getQuestionArgument(t), tEnv);
   }
 
   // Left Promoted Variable does not apply at runtime.
@@ -2505,37 +2486,47 @@
 
     var sBounds = Rti._getGenericFunctionBounds(s);
     var tBounds = Rti._getGenericFunctionBounds(t);
-    if (!typesEqual(sBounds, tBounds, isLegacy)) return false;
+    int sLength = _Utils.arrayLength(sBounds);
+    int tLength = _Utils.arrayLength(tBounds);
+    if (sLength != tLength) return false;
+    for (int i = 0; i < sLength; i++) {
+      var sBound = _Utils.arrayAt(sBounds, i);
+      var tBound = _Utils.arrayAt(tBounds, i);
+      if (!_isSubtype(universe, sBound, sEnv, tBound, tEnv) ||
+          !_isSubtype(universe, tBound, tEnv, sBound, sEnv)) {
+        return false;
+      }
+    }
 
     sEnv = sEnv == null ? sBounds : _Utils.arrayConcat(sBounds, sEnv);
     tEnv = tEnv == null ? tBounds : _Utils.arrayConcat(tBounds, tEnv);
 
     return _isFunctionSubtype(universe, Rti._getGenericFunctionBase(s), sEnv,
-        Rti._getGenericFunctionBase(t), tEnv, isLegacy);
+        Rti._getGenericFunctionBase(t), tEnv);
   }
   if (tKind == Rti.kindFunction) {
     if (isJsFunctionType(s)) return true;
     if (sKind != Rti.kindFunction) return false;
-    return _isFunctionSubtype(universe, s, sEnv, t, tEnv, isLegacy);
+    return _isFunctionSubtype(universe, s, sEnv, t, tEnv);
   }
 
   // Interface Compositionality + Super-Interface:
   if (sKind == Rti.kindInterface) {
     if (tKind != Rti.kindInterface) return false;
-    return _isInterfaceSubtype(universe, s, sEnv, t, tEnv, isLegacy);
+    return _isInterfaceSubtype(universe, s, sEnv, t, tEnv);
   }
 
   return false;
 }
 
 // TODO(fishythefish): Support required named parameters.
-bool _isFunctionSubtype(universe, Rti s, sEnv, Rti t, tEnv, bool isLegacy) {
+bool _isFunctionSubtype(universe, Rti s, sEnv, Rti t, tEnv) {
   assert(Rti._getKind(s) == Rti.kindFunction);
   assert(Rti._getKind(t) == Rti.kindFunction);
 
   Rti sReturnType = Rti._getReturnType(s);
   Rti tReturnType = Rti._getReturnType(t);
-  if (!_isSubtype(universe, sReturnType, sEnv, tReturnType, tEnv, isLegacy)) {
+  if (!_isSubtype(universe, sReturnType, sEnv, tReturnType, tEnv)) {
     return false;
   }
 
@@ -2564,7 +2555,7 @@
   for (int i = 0; i < sRequiredPositionalLength; i++) {
     Rti sParameter = _castToRti(_Utils.arrayAt(sRequiredPositional, i));
     Rti tParameter = _castToRti(_Utils.arrayAt(tRequiredPositional, i));
-    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv, isLegacy)) {
+    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv)) {
       return false;
     }
   }
@@ -2573,7 +2564,7 @@
     Rti sParameter = _castToRti(_Utils.arrayAt(sOptionalPositional, i));
     Rti tParameter = _castToRti(
         _Utils.arrayAt(tRequiredPositional, sRequiredPositionalLength + i));
-    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv, isLegacy)) {
+    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv)) {
       return false;
     }
   }
@@ -2582,7 +2573,7 @@
     Rti sParameter = _castToRti(
         _Utils.arrayAt(sOptionalPositional, requiredPositionalDelta + i));
     Rti tParameter = _castToRti(_Utils.arrayAt(tOptionalPositional, i));
-    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv, isLegacy)) {
+    if (!_isSubtype(universe, tParameter, tEnv, sParameter, sEnv)) {
       return false;
     }
   }
@@ -2603,13 +2594,13 @@
     if (_Utils.stringLessThan(tName, sName)) return false;
     Rti sType = _castToRti(_Utils.arrayAt(sOptionalNamed, i - 1));
     Rti tType = _castToRti(_Utils.arrayAt(tOptionalNamed, j + 1));
-    if (!_isSubtype(universe, tType, tEnv, sType, sEnv, isLegacy)) return false;
+    if (!_isSubtype(universe, tType, tEnv, sType, sEnv)) return false;
   }
 
   return true;
 }
 
-bool _isInterfaceSubtype(universe, Rti s, sEnv, Rti t, tEnv, bool isLegacy) {
+bool _isInterfaceSubtype(universe, Rti s, sEnv, Rti t, tEnv) {
   String sName = Rti._getInterfaceName(s);
   String tName = Rti._getInterfaceName(t);
 
@@ -2638,18 +2629,18 @@
         switch (sVariance) {
           case Variance.legacyCovariant:
           case Variance.covariant:
-            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv, isLegacy)) {
+            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv)) {
               return false;
             }
             break;
           case Variance.contravariant:
-            if (!_isSubtype(universe, tArg, tEnv, sArg, sEnv, isLegacy)) {
+            if (!_isSubtype(universe, tArg, tEnv, sArg, sEnv)) {
               return false;
             }
             break;
           case Variance.invariant:
-            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv, isLegacy) ||
-                !_isSubtype(universe, tArg, tEnv, sArg, sEnv, isLegacy)) {
+            if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv) ||
+                !_isSubtype(universe, tArg, tEnv, sArg, sEnv)) {
               return false;
             }
             break;
@@ -2658,7 +2649,7 @@
                 "Unknown variance given for subtype check: $sVariance");
         }
       } else {
-        if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv, isLegacy)) {
+        if (!_isSubtype(universe, sArg, sEnv, tArg, tEnv)) {
           return false;
         }
       }
@@ -2687,102 +2678,15 @@
     String recipe = _Utils.asString(_Utils.arrayAt(supertypeArgs, i));
     Rti supertypeArg = _Universe.evalInEnvironment(universe, s, recipe);
     Rti tArg = _castToRti(_Utils.arrayAt(tArgs, i));
-    if (!_isSubtype(universe, supertypeArg, sEnv, tArg, tEnv, isLegacy)) {
+    if (!_isSubtype(universe, supertypeArg, sEnv, tArg, tEnv)) {
       return false;
     }
   }
   return true;
 }
 
-/// Types are equal if they are structurally equal up to renaming of bound type
-/// variables and equating all top types.
-///
-/// We ignore renaming of bound type variables because we operate on de Bruijn
-/// indices, not names.
-bool typeEqual(Rti s, Rti t, bool isLegacy) {
-  if (_Utils.isIdentical(s, t)) return true;
-
-  if (isTopType(s, isLegacy)) return isTopType(t, isLegacy);
-
-  int sKind = Rti._getKind(s);
-  int tKind = Rti._getKind(t);
-  if (sKind != tKind) return false;
-
-  switch (sKind) {
-    case Rti.kindStar:
-    case Rti.kindQuestion:
-    case Rti.kindFutureOr:
-      return typeEqual(_castToRti(Rti._getPrimary(s)),
-          _castToRti(Rti._getPrimary(t)), isLegacy);
-
-    case Rti.kindInterface:
-      if (Rti._getInterfaceName(s) != Rti._getInterfaceName(t)) return false;
-      return typesEqual(Rti._getInterfaceTypeArguments(s),
-          Rti._getInterfaceTypeArguments(t), isLegacy);
-
-    case Rti.kindBinding:
-      return typeEqual(
-              Rti._getBindingBase(s), Rti._getBindingBase(t), isLegacy) &&
-          typesEqual(Rti._getBindingArguments(s), Rti._getBindingArguments(t),
-              isLegacy);
-
-    case Rti.kindFunction:
-      return typeEqual(
-              Rti._getReturnType(s), Rti._getReturnType(t), isLegacy) &&
-          functionParametersEqual(Rti._getFunctionParameters(s),
-              Rti._getFunctionParameters(t), isLegacy);
-
-    case Rti.kindGenericFunction:
-      return typeEqual(Rti._getGenericFunctionBase(s),
-              Rti._getGenericFunctionBase(t), isLegacy) &&
-          typesEqual(Rti._getGenericFunctionBounds(s),
-              Rti._getGenericFunctionBounds(t), isLegacy);
-
-    default:
-      return false;
-  }
-}
-
-bool typesEqual(Object sArray, Object tArray, isLegacy) {
-  int sLength = _Utils.arrayLength(sArray);
-  int tLength = _Utils.arrayLength(tArray);
-  if (sLength != tLength) return false;
-  for (int i = 0; i < sLength; i++) {
-    if (!typeEqual(_castToRti(_Utils.arrayAt(sArray, i)),
-        _castToRti(_Utils.arrayAt(tArray, i)), isLegacy)) return false;
-  }
-  return true;
-}
-
-bool namedTypesEqual(Object sArray, Object tArray, isLegacy) {
-  int sLength = _Utils.arrayLength(sArray);
-  int tLength = _Utils.arrayLength(tArray);
-  assert(sLength.isEven);
-  assert(tLength.isEven);
-  if (sLength != tLength) return false;
-  for (int i = 0; i < sLength; i += 2) {
-    if (_Utils.asString(_Utils.arrayAt(sArray, i)) !=
-        _Utils.asString(_Utils.arrayAt(tArray, i))) return false;
-    if (!typeEqual(_castToRti(_Utils.arrayAt(sArray, i + 1)),
-        _castToRti(_Utils.arrayAt(tArray, i + 1)), isLegacy)) return false;
-  }
-  return true;
-}
-
-// TODO(fishythefish): Support required named parameters.
-bool functionParametersEqual(_FunctionParameters sParameters,
-        _FunctionParameters tParameters, isLegacy) =>
-    typesEqual(_FunctionParameters._getRequiredPositional(sParameters),
-        _FunctionParameters._getRequiredPositional(tParameters), isLegacy) &&
-    typesEqual(_FunctionParameters._getOptionalPositional(sParameters),
-        _FunctionParameters._getOptionalPositional(tParameters), isLegacy) &&
-    namedTypesEqual(_FunctionParameters._getOptionalNamed(sParameters),
-        _FunctionParameters._getOptionalNamed(tParameters), isLegacy);
-
-bool isLegacyTopType(Rti t) => isTopType(t, true);
-bool isNnbdTopType(Rti t) => isTopType(t, false);
-bool isTopType(Rti t, bool isLegacy) {
-  if (isLegacy) {
+bool isTopType(Rti t) {
+  if (JS_GET_FLAG('LEGACY')) {
     if (isObjectType(t)) return true;
   } else {
     if (isNullableObjectType(t)) return true;
@@ -2792,8 +2696,7 @@
       kind == Rti.kindVoid ||
       kind == Rti.kindAny ||
       kind == Rti.kindErased ||
-      kind == Rti.kindFutureOr &&
-          isTopType(Rti._getFutureOrArgument(t), isLegacy);
+      kind == Rti.kindFutureOr && isTopType(Rti._getFutureOrArgument(t));
 }
 
 bool isObjectType(Rti t) => _Utils.isIdentical(t, TYPE_REF<Object>());
@@ -2900,8 +2803,8 @@
   _Universe.addTypeParameterVariances(universe, variances);
 }
 
-bool testingIsLegacySubtype(universe, rti1, rti2) {
-  return isLegacySubtype(universe, _castToRti(rti1), _castToRti(rti2));
+bool testingIsSubtype(universe, rti1, rti2) {
+  return isSubtype(universe, _castToRti(rti1), _castToRti(rti2));
 }
 
 Object testingUniverseEval(universe, String recipe) {
diff --git a/sdk_nnbd/lib/_internal/vm/bin/common_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/common_patch.dart
index f974bae..1bcd089 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/common_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/common_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 /// Note: the VM concatenates all patch files into a single patch file. This
 /// file is the first patch in "dart:io" which contains all the imports used by
 /// patches of that library. We plan to change this when we have a shared front
diff --git a/sdk_nnbd/lib/_internal/vm/bin/directory_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/directory_patch.dart
index 951bd09..7549f72 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/directory_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/directory_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
diff --git a/sdk_nnbd/lib/_internal/vm/bin/eventhandler_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/eventhandler_patch.dart
index abc5e21..11ada47 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/eventhandler_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/eventhandler_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
diff --git a/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart
index fa5e9ab..5dde072 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
@@ -76,9 +74,9 @@
   int close() native "File_Close";
   readByte() native "File_ReadByte";
   read(int bytes) native "File_Read";
-  readInto(List<int> buffer, int start, int end) native "File_ReadInto";
+  readInto(List<int> buffer, int start, int? end) native "File_ReadInto";
   writeByte(int value) native "File_WriteByte";
-  writeFrom(List<int> buffer, int start, int end) native "File_WriteFrom";
+  writeFrom(List<int> buffer, int start, int? end) native "File_WriteFrom";
   position() native "File_Position";
   setPosition(int position) native "File_SetPosition";
   truncate(int length) native "File_Truncate";
@@ -96,19 +94,20 @@
 }
 
 @patch
-class _FileSystemWatcher {
+abstract class _FileSystemWatcher {
   void _pathWatchedEnd();
 
-  static int _id;
+  static int? _id;
   static final Map<int, _WatcherPath> _idMap = {};
 
   final String _path;
   final int _events;
   final bool _recursive;
 
-  _WatcherPath _watcherPath;
+  _WatcherPath? _watcherPath;
 
-  StreamController<FileSystemEvent> _broadcastController;
+  final StreamController<FileSystemEvent> _broadcastController =
+      new StreamController<FileSystemEvent>.broadcast();
 
   @patch
   static Stream<FileSystemEvent> _watch(
@@ -132,8 +131,9 @@
       throw new FileSystemException(
           "File system watching is not supported on this platform", _path);
     }
-    _broadcastController = new StreamController<FileSystemEvent>.broadcast(
-        onListen: _listen, onCancel: _cancel);
+    _broadcastController
+      ..onListen = _listen
+      ..onCancel = _cancel;
   }
 
   Stream<FileSystemEvent> get _stream => _broadcastController.stream;
@@ -153,7 +153,7 @@
     var pathId;
     try {
       pathId =
-          _watchPath(_id, _Namespace._namespace, _path, _events, _recursive);
+          _watchPath(_id!, _Namespace._namespace, _path, _events, _recursive);
     } catch (e) {
       _broadcastController
           .addError(new FileSystemException("Failed to watch path", _path, e));
@@ -164,23 +164,25 @@
       _idMap[pathId] = new _WatcherPath(pathId, _path, _events);
     }
     _watcherPath = _idMap[pathId];
-    _watcherPath.count++;
+    _watcherPath!.count++;
     _pathWatched().pipe(_broadcastController);
   }
 
   void _cancel() {
-    if (_watcherPath != null) {
-      assert(_watcherPath.count > 0);
-      _watcherPath.count--;
-      if (_watcherPath.count == 0) {
-        _unwatchPath(_id, _watcherPath.pathId);
+    final watcherPath = _watcherPath;
+    if (watcherPath != null) {
+      assert(watcherPath.count > 0);
+      watcherPath.count--;
+      if (watcherPath.count == 0) {
+        _unwatchPath(_id!, watcherPath.pathId);
         _pathWatchedEnd();
-        _idMap.remove(_watcherPath.pathId);
+        _idMap.remove(watcherPath.pathId);
       }
       _watcherPath = null;
     }
-    if (_idMap.isEmpty && _id != null) {
-      _closeWatcher(_id);
+    final id = _id;
+    if (_idMap.isEmpty && id != null) {
+      _closeWatcher(id);
       _doneWatcher();
       _id = null;
     }
@@ -196,7 +198,7 @@
   void _donePathWatched() {}
 
   static _WatcherPath _pathFromPathId(int pathId) {
-    return _idMap[pathId];
+    return _idMap[pathId]!;
   }
 
   static Stream _listenOnSocket(int socketId, int id, int pathId) {
@@ -305,7 +307,7 @@
           var path = _pathFromPathId(pathId).path;
           _idMap.remove(pathId);
           if (_idMap.isEmpty && _id != null) {
-            _closeWatcher(_id);
+            _closeWatcher(_id!);
             _id = null;
           }
           throw FileSystemException(
@@ -337,20 +339,20 @@
 
 class _InotifyFileSystemWatcher extends _FileSystemWatcher {
   static final Map<int, StreamController> _idMap = {};
-  static StreamSubscription _subscription;
+  static late StreamSubscription _subscription;
 
   _InotifyFileSystemWatcher(path, events, recursive)
       : super._(path, events, recursive);
 
   void _newWatcher() {
-    int id = _FileSystemWatcher._id;
+    int id = _FileSystemWatcher._id!;
     _subscription =
         _FileSystemWatcher._listenOnSocket(id, id, 0).listen((event) {
       if (_idMap.containsKey(event[0])) {
         if (event[1] != null) {
-          _idMap[event[0]].add(event[1]);
+          _idMap[event[0]]!.add(event[1]);
         } else {
-          _idMap[event[0]].close();
+          _idMap[event[0]]!.close();
         }
       }
     });
@@ -361,30 +363,30 @@
   }
 
   Stream _pathWatched() {
-    var pathId = _watcherPath.pathId;
+    var pathId = _watcherPath!.pathId;
     if (!_idMap.containsKey(pathId)) {
       _idMap[pathId] = new StreamController<FileSystemEvent>.broadcast();
     }
-    return _idMap[pathId].stream;
+    return _idMap[pathId]!.stream;
   }
 
   void _pathWatchedEnd() {
-    var pathId = _watcherPath.pathId;
+    var pathId = _watcherPath!.pathId;
     if (!_idMap.containsKey(pathId)) return;
-    _idMap[pathId].close();
+    _idMap[pathId]!.close();
     _idMap.remove(pathId);
   }
 }
 
 class _Win32FileSystemWatcher extends _FileSystemWatcher {
-  StreamSubscription _subscription;
-  StreamController _controller;
+  late StreamSubscription _subscription;
+  late StreamController _controller;
 
   _Win32FileSystemWatcher(path, events, recursive)
       : super._(path, events, recursive);
 
   Stream _pathWatched() {
-    var pathId = _watcherPath.pathId;
+    var pathId = _watcherPath!.pathId;
     _controller = new StreamController<FileSystemEvent>();
     _subscription =
         _FileSystemWatcher._listenOnSocket(pathId, 0, pathId).listen((event) {
@@ -405,14 +407,14 @@
 }
 
 class _FSEventStreamFileSystemWatcher extends _FileSystemWatcher {
-  StreamSubscription _subscription;
-  StreamController _controller;
+  late StreamSubscription _subscription;
+  late StreamController _controller;
 
   _FSEventStreamFileSystemWatcher(path, events, recursive)
       : super._(path, events, recursive);
 
   Stream _pathWatched() {
-    var pathId = _watcherPath.pathId;
+    var pathId = _watcherPath!.pathId;
     var socketId = _FileSystemWatcher._getSocketId(0, pathId);
     _controller = new StreamController<FileSystemEvent>();
     _subscription =
diff --git a/sdk_nnbd/lib/_internal/vm/bin/file_system_entity_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/file_system_entity_patch.dart
index 841219e..973e6b6 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/file_system_entity_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/file_system_entity_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
diff --git a/sdk_nnbd/lib/_internal/vm/bin/filter_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/filter_patch.dart
index a31f838..2bcf5a9 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/filter_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/filter_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 class _FilterImpl extends NativeFieldWrapperClass1 implements RawZLibFilter {
@@ -14,20 +12,20 @@
 }
 
 class _ZLibInflateFilter extends _FilterImpl {
-  _ZLibInflateFilter(int windowBits, List<int> dictionary, bool raw) {
+  _ZLibInflateFilter(int windowBits, List<int>? dictionary, bool raw) {
     _init(windowBits, dictionary, raw);
   }
-  void _init(int windowBits, List<int> dictionary, bool raw)
+  void _init(int windowBits, List<int>? dictionary, bool raw)
       native "Filter_CreateZLibInflate";
 }
 
 class _ZLibDeflateFilter extends _FilterImpl {
   _ZLibDeflateFilter(bool gzip, int level, int windowBits, int memLevel,
-      int strategy, List<int> dictionary, bool raw) {
+      int strategy, List<int>? dictionary, bool raw) {
     _init(gzip, level, windowBits, memLevel, strategy, dictionary, raw);
   }
   void _init(bool gzip, int level, int windowBits, int memLevel, int strategy,
-      List<int> dictionary, bool raw) native "Filter_CreateZLibDeflate";
+      List<int>? dictionary, bool raw) native "Filter_CreateZLibDeflate";
 }
 
 @patch
@@ -39,12 +37,12 @@
           int windowBits,
           int memLevel,
           int strategy,
-          List<int> dictionary,
+          List<int>? dictionary,
           bool raw) =>
       new _ZLibDeflateFilter(
           gzip, level, windowBits, memLevel, strategy, dictionary, raw);
   @patch
   static RawZLibFilter _makeZLibInflateFilter(
-          int windowBits, List<int> dictionary, bool raw) =>
+          int windowBits, List<int>? dictionary, bool raw) =>
       new _ZLibInflateFilter(windowBits, dictionary, raw);
 }
diff --git a/sdk_nnbd/lib/_internal/vm/bin/io_service_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/io_service_patch.dart
index 9b3dd9f..d54bbf2 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/io_service_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/io_service_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 class _IOServicePorts {
@@ -36,7 +34,7 @@
   }
 
   void _returnPort(int forRequestId) {
-    final SendPort port = _usedPorts.remove(forRequestId);
+    final SendPort port = _usedPorts.remove(forRequestId)!;
     if (!_usedPorts.values.contains(port)) {
       _freePorts.add(port);
     }
@@ -48,8 +46,8 @@
 @patch
 class _IOService {
   static _IOServicePorts _servicePorts = new _IOServicePorts();
-  static RawReceivePort _receivePort;
-  static SendPort _replyToPort;
+  static RawReceivePort? _receivePort;
+  static late SendPort _replyToPort;
   static HashMap<int, Completer> _messageMap = new HashMap<int, Completer>();
   static int _id = 0;
 
@@ -66,7 +64,7 @@
     try {
       servicePort.send(<dynamic>[id, _replyToPort, request, data]);
     } catch (error) {
-      _messageMap.remove(id).complete(error);
+      _messageMap.remove(id)!.complete(error);
       if (_messageMap.length == 0) {
         _finalize();
       }
@@ -77,10 +75,10 @@
   static void _ensureInitialize() {
     if (_receivePort == null) {
       _receivePort = new RawReceivePort();
-      _replyToPort = _receivePort.sendPort;
-      _receivePort.handler = (data) {
+      _replyToPort = _receivePort!.sendPort;
+      _receivePort!.handler = (data) {
         assert(data is List && data.length == 2);
-        _messageMap.remove(data[0]).complete(data[1]);
+        _messageMap.remove(data[0])!.complete(data[1]);
         _servicePorts._returnPort(data[0]);
         if (_messageMap.length == 0) {
           _finalize();
@@ -91,7 +89,7 @@
 
   static void _finalize() {
     _id = 0;
-    _receivePort.close();
+    _receivePort!.close();
     _receivePort = null;
   }
 
diff --git a/sdk_nnbd/lib/_internal/vm/bin/namespace_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/namespace_patch.dart
index bc8e2df..2cf329f 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/namespace_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/namespace_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 @pragma("vm:entry-point")
 class _NamespaceImpl extends NativeFieldWrapperClass1 implements _Namespace {
   _NamespaceImpl._();
@@ -16,7 +14,7 @@
 
   // If the platform supports "namespaces", this method is called by the
   // embedder with the platform-specific namespace information.
-  static _NamespaceImpl _cachedNamespace = null;
+  static _NamespaceImpl? _cachedNamespace = null;
   static void _setupNamespace(var namespace) {
     _cachedNamespace = _create(new _NamespaceImpl._(), namespace);
   }
@@ -27,7 +25,7 @@
       // instead use a safe-ish default value.
       _cachedNamespace = _create(new _NamespaceImpl._(), _getDefault());
     }
-    return _cachedNamespace;
+    return _cachedNamespace!;
   }
 
   static int get _namespacePointer => _getPointer(_namespace);
diff --git a/sdk_nnbd/lib/_internal/vm/bin/platform_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/platform_patch.dart
index 88c10bd..d187101 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/platform_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/platform_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
@@ -35,9 +33,9 @@
   static String _localeName() native "Platform_LocaleName";
 
   @patch
-  static String _packageRoot() => VMLibraryHooks.packageRootString;
+  static String? _packageRoot() => VMLibraryHooks.packageRootString;
   @patch
-  static String _packageConfig() => VMLibraryHooks.packageConfigString;
+  static String? _packageConfig() => VMLibraryHooks.packageConfigString;
 
   @patch
   static Uri _script() => VMLibraryHooks.platformScript;
diff --git a/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
index 8589244..49592e7 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
@@ -22,8 +20,8 @@
 class Process {
   @patch
   static Future<Process> start(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
       ProcessStartMode mode: ProcessStartMode.normal}) {
@@ -40,12 +38,12 @@
 
   @patch
   static Future<ProcessResult> run(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
-      Encoding stdoutEncoding: systemEncoding,
-      Encoding stderrEncoding: systemEncoding}) {
+      Encoding? stdoutEncoding: systemEncoding,
+      Encoding? stderrEncoding: systemEncoding}) {
     return _runNonInteractiveProcess(
         executable,
         arguments,
@@ -59,12 +57,12 @@
 
   @patch
   static ProcessResult runSync(String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
-      Encoding stdoutEncoding: systemEncoding,
-      Encoding stderrEncoding: systemEncoding}) {
+      Encoding? stdoutEncoding: systemEncoding,
+      Encoding? stderrEncoding: systemEncoding}) {
     return _runNonInteractiveProcessSync(
         executable,
         arguments,
@@ -78,24 +76,24 @@
 
   @patch
   static bool killPid(int pid, [ProcessSignal signal = ProcessSignal.sigterm]) {
-    if (signal is! ProcessSignal) {
-      throw new ArgumentError("Argument 'signal' must be a ProcessSignal");
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(signal, "signal");
     return _ProcessUtils._killPid(pid, signal._signalNumber);
   }
 }
 
-List<_SignalController> _signalControllers = new List.filled(32, null);
+List<_SignalController?> _signalControllers = new List.filled(32, null);
 
 class _SignalController {
   final ProcessSignal signal;
 
-  StreamController<ProcessSignal> _controller;
+  final _controller = new StreamController<ProcessSignal>.broadcast();
   var _id;
 
   _SignalController(this.signal) {
-    _controller = new StreamController<ProcessSignal>.broadcast(
-        onListen: _listen, onCancel: _cancel);
+    _controller
+      ..onListen = _listen
+      ..onCancel = _cancel;
   }
 
   Stream<ProcessSignal> get stream => _controller.stream;
@@ -111,7 +109,7 @@
     var socket = new _RawSocket(new _NativeSocket.watchSignal(id));
     socket.listen((event) {
       if (event == RawSocketEvent.read) {
-        var bytes = socket.read();
+        var bytes = socket.read()!;
         for (int i = 0; i < bytes.length; i++) {
           _controller.add(signal);
         }
@@ -145,7 +143,7 @@
   @patch
   static void _sleep(int millis) native "Process_Sleep";
   @patch
-  static int _pid(Process process) native "Process_Pid";
+  static int _pid(Process? process) native "Process_Pid";
   static bool _killPid(int pid, int signal) native "Process_KillPid";
   @patch
   static Stream<ProcessSignal> _watchSignal(ProcessSignal signal) {
@@ -166,7 +164,7 @@
     if (_signalControllers[signal._signalNumber] == null) {
       _signalControllers[signal._signalNumber] = new _SignalController(signal);
     }
-    return _signalControllers[signal._signalNumber].stream;
+    return _signalControllers[signal._signalNumber]!.stream;
   }
 }
 
@@ -197,9 +195,9 @@
 @pragma("vm:entry-point")
 class _ProcessStartStatus {
   @pragma("vm:entry-point", "set")
-  int _errorCode; // Set to OS error code if process start failed.
+  int? _errorCode; // Set to OS error code if process start failed.
   @pragma("vm:entry-point", "set")
-  String _errorMessage; // Set to OS error message if process start failed.
+  String? _errorMessage; // Set to OS error message if process start failed.
 }
 
 // The NativeFieldWrapperClass1 can not be used with a mixin, due to missing
@@ -207,18 +205,25 @@
 class _ProcessImplNativeWrapper extends NativeFieldWrapperClass1 {}
 
 class _ProcessImpl extends _ProcessImplNativeWrapper implements Process {
-  _ProcessResourceInfo _resourceInfo;
   static bool connectedResourceHandler = false;
 
   _ProcessImpl(
       String path,
       List<String> arguments,
       this._workingDirectory,
-      Map<String, String> environment,
+      Map<String, String>? environment,
       bool includeParentEnvironment,
       bool runInShell,
-      ProcessStartMode mode)
+      this._mode)
       : super() {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(path, "path");
+    ArgumentError.checkNotNull(arguments, "arguments");
+    for (int i = 0; i < arguments.length; i++) {
+      ArgumentError.checkNotNull(arguments[i], "arguments[]");
+    }
+    ArgumentError.checkNotNull(_mode, "mode");
+
     if (!connectedResourceHandler) {
       registerExtension(
           'ext.dart.io.getProcesses', _ProcessResourceInfo.getStartedProcesses);
@@ -232,10 +237,6 @@
       path = _getShellCommand();
     }
 
-    if (path is! String) {
-      throw new ArgumentError("Path is not a String: $path");
-    }
-
     if (Platform.isWindows && path.contains(' ') && !path.contains('"')) {
       // Escape paths that may contain spaces
       // Bug: https://github.com/dart-lang/sdk/issues/37751
@@ -244,57 +245,29 @@
       _path = path;
     }
 
-    if (arguments is! List) {
-      throw new ArgumentError("Arguments is not a List: $arguments");
-    }
-    int len = arguments.length;
-    _arguments = new List<String>.filled(len, "");
-    for (int i = 0; i < len; i++) {
-      var arg = arguments[i];
-      if (arg is! String) {
-        throw new ArgumentError("Non-string argument: $arg");
-      }
-      _arguments[i] = arguments[i];
-      if (Platform.isWindows) {
-        _arguments[i] = _windowsArgumentEscape(_arguments[i]);
-      }
-    }
-
-    if (_workingDirectory != null && _workingDirectory is! String) {
-      throw new ArgumentError(
-          "WorkingDirectory is not a String: $_workingDirectory");
-    }
+    _arguments = [
+      for (int i = 0; i < arguments.length; i++)
+        Platform.isWindows
+            ? _windowsArgumentEscape(_arguments[i])
+            : arguments[i],
+    ];
 
     _environment = [];
     // Ensure that we have a non-null environment.
-    environment = (environment == null) ? (const {}) : environment;
-    if (environment is! Map) {
-      throw new ArgumentError("Environment is not a map: $environment");
-    }
+    environment ??= const {};
     environment.forEach((key, value) {
-      if (key is! String || value is! String) {
-        throw new ArgumentError(
-            "Environment key or value is not a string: ($key, $value)");
-      }
       _environment.add('$key=$value');
     });
     if (includeParentEnvironment) {
       Platform.environment.forEach((key, value) {
-        assert(key is String);
-        assert(value is String);
         // Do not override keys already set as part of environment.
-        if (!environment.containsKey(key)) {
+        if (!environment!.containsKey(key)) {
           _environment.add('$key=$value');
         }
       });
     }
 
-    if (mode is! ProcessStartMode) {
-      throw new ArgumentError("Mode is not a ProcessStartMode: $mode");
-    }
-    _mode = mode;
-
-    if (_modeHasStdio(mode)) {
+    if (_modeHasStdio(_mode)) {
       // stdin going to process.
       _stdin = new _StdSink(new _Socket._writePipe().._owner = this);
       // stdout coming from process.
@@ -302,19 +275,17 @@
       // stderr coming from process.
       _stderr = new _StdStream(new _Socket._readPipe().._owner = this);
     }
-    if (_modeIsAttached(mode)) {
+    if (_modeIsAttached(_mode)) {
       _exitHandler = new _Socket._readPipe();
     }
-    _ended = false;
-    _started = false;
   }
 
   _NativeSocket get _stdinNativeSocket =>
-      (_stdin._sink as _Socket)._nativeSocket;
+      (_stdin!._sink as _Socket)._nativeSocket;
   _NativeSocket get _stdoutNativeSocket =>
-      (_stdout._stream as _Socket)._nativeSocket;
+      (_stdout!._stream as _Socket)._nativeSocket;
   _NativeSocket get _stderrNativeSocket =>
-      (_stderr._stream as _Socket)._nativeSocket;
+      (_stderr!._stream as _Socket)._nativeSocket;
 
   static bool _modeIsAttached(ProcessStartMode mode) {
     return (mode == ProcessStartMode.normal) ||
@@ -434,12 +405,12 @@
           status);
       if (!success) {
         completer.completeError(new ProcessException(
-            _path, _arguments, status._errorMessage, status._errorCode));
+            _path, _arguments, status._errorMessage!, status._errorCode!));
         return;
       }
 
       _started = true;
-      _resourceInfo = new _ProcessResourceInfo(this);
+      final resourceInfo = new _ProcessResourceInfo(this);
 
       // Setup an exit handler to handle internal cleanup and possible
       // callback when a process terminates.
@@ -457,12 +428,12 @@
 
           void handleExit() {
             _ended = true;
-            _exitCode.complete(exitCode(exitDataBuffer));
+            _exitCode!.complete(exitCode(exitDataBuffer));
             // Kill stdin, helping hand if the user forgot to do it.
             if (_modeHasStdio(_mode)) {
-              (_stdin._sink as _Socket).destroy();
+              (_stdin!._sink as _Socket).destroy();
             }
-            _resourceInfo.stopped();
+            resourceInfo.stopped();
           }
 
           exitDataBuffer.setRange(
@@ -479,7 +450,8 @@
     return completer.future;
   }
 
-  ProcessResult _runAndWait(Encoding stdoutEncoding, Encoding stderrEncoding) {
+  ProcessResult _runAndWait(
+      Encoding? stdoutEncoding, Encoding? stderrEncoding) {
     var status = new _ProcessStartStatus();
     _exitCode = new Completer<int>();
     bool success = _startNative(
@@ -496,10 +468,10 @@
         status);
     if (!success) {
       throw new ProcessException(
-          _path, _arguments, status._errorMessage, status._errorCode);
+          _path, _arguments, status._errorMessage!, status._errorCode!);
     }
 
-    _resourceInfo = new _ProcessResourceInfo(this);
+    final resourceInfo = new _ProcessResourceInfo(this);
 
     var result = _wait(_stdinNativeSocket, _stdoutNativeSocket,
         _stderrNativeSocket, _exitHandler._nativeSocket);
@@ -509,7 +481,7 @@
       return encoding.decode(output);
     }
 
-    _resourceInfo.stopped();
+    resourceInfo.stopped();
 
     return new ProcessResult(
         result[0],
@@ -522,36 +494,32 @@
       _Namespace namespace,
       String path,
       List<String> arguments,
-      String workingDirectory,
+      String? workingDirectory,
       List<String> environment,
       int mode,
-      _NativeSocket stdin,
-      _NativeSocket stdout,
-      _NativeSocket stderr,
-      _NativeSocket exitHandler,
+      _NativeSocket? stdin,
+      _NativeSocket? stdout,
+      _NativeSocket? stderr,
+      _NativeSocket? exitHandler,
       _ProcessStartStatus status) native "Process_Start";
 
-  _wait(_NativeSocket stdin, _NativeSocket stdout, _NativeSocket stderr,
+  _wait(_NativeSocket? stdin, _NativeSocket? stdout, _NativeSocket? stderr,
       _NativeSocket exitHandler) native "Process_Wait";
 
-  Stream<List<int>> get stdout {
-    return _stdout;
-  }
+  Stream<List<int>> get stdout =>
+      _stdout ?? (throw StateError("Process is detached"));
 
-  Stream<List<int>> get stderr {
-    return _stderr;
-  }
+  Stream<List<int>> get stderr =>
+      _stdout ?? (throw StateError("Process is detached"));
 
-  IOSink get stdin {
-    return _stdin;
-  }
+  IOSink get stdin => _stdin ?? (throw StateError("Process is detached"));
 
-  Future<int> get exitCode => _exitCode != null ? _exitCode.future : null;
+  Future<int> get exitCode =>
+      _exitCode?.future ?? (throw StateError("Process is detached"));
 
   bool kill([ProcessSignal signal = ProcessSignal.sigterm]) {
-    if (signal is! ProcessSignal) {
-      throw new ArgumentError("Argument 'signal' must be a ProcessSignal");
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(kill, "kill");
     assert(_started);
     if (_ended) return false;
     return _ProcessUtils._killPid(pid, signal._signalNumber);
@@ -559,19 +527,19 @@
 
   int get pid => _ProcessUtils._pid(this);
 
-  String _path;
-  List<String> _arguments;
-  String _workingDirectory;
-  List<String> _environment;
-  ProcessStartMode _mode;
+  late String _path;
+  late List<String> _arguments;
+  String? _workingDirectory;
+  late List<String> _environment;
+  final ProcessStartMode _mode;
   // Private methods of Socket are used by _in, _out, and _err.
-  _StdSink _stdin;
-  _StdStream _stdout;
-  _StdStream _stderr;
-  _Socket _exitHandler;
-  bool _ended;
-  bool _started;
-  Completer<int> _exitCode;
+  _StdSink? _stdin;
+  _StdStream? _stdout;
+  _StdStream? _stderr;
+  late _Socket _exitHandler;
+  bool _ended = false;
+  bool _started = false;
+  Completer<int>? _exitCode;
 }
 
 // _NonInteractiveProcess is a wrapper around an interactive process
@@ -581,12 +549,12 @@
 Future<ProcessResult> _runNonInteractiveProcess(
     String path,
     List<String> arguments,
-    String workingDirectory,
-    Map<String, String> environment,
+    String? workingDirectory,
+    Map<String, String>? environment,
     bool includeParentEnvironment,
     bool runInShell,
-    Encoding stdoutEncoding,
-    Encoding stderrEncoding) {
+    Encoding? stdoutEncoding,
+    Encoding? stderrEncoding) {
   // Start the underlying process.
   return Process.start(path, arguments,
           workingDirectory: workingDirectory,
@@ -600,7 +568,7 @@
     p.stdin.close();
 
     // Setup stdout and stderr handling.
-    Future foldStream(Stream<List<int>> stream, Encoding encoding) {
+    Future foldStream(Stream<List<int>> stream, Encoding? encoding) {
       if (encoding == null) {
         return stream
             .fold(new BytesBuilder(), (builder, data) => builder..add(data))
@@ -626,12 +594,12 @@
 ProcessResult _runNonInteractiveProcessSync(
     String executable,
     List<String> arguments,
-    String workingDirectory,
-    Map<String, String> environment,
+    String? workingDirectory,
+    Map<String, String>? environment,
     bool includeParentEnvironment,
     bool runInShell,
-    Encoding stdoutEncoding,
-    Encoding stderrEncoding) {
+    Encoding? stdoutEncoding,
+    Encoding? stderrEncoding) {
   var process = new _ProcessImpl(
       executable,
       arguments,
diff --git a/sdk_nnbd/lib/_internal/vm/bin/secure_socket_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/secure_socket_patch.dart
index af22246..69cc88a 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/secure_socket_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/secure_socket_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
@@ -28,7 +26,7 @@
 }
 
 class _SecureSocket extends _Socket implements SecureSocket {
-  _RawSecureSocket get _raw => super._raw as _RawSecureSocket;
+  _RawSecureSocket? get _raw => super._raw as _RawSecureSocket?;
 
   _SecureSocket(RawSecureSocket raw) : super(raw);
 
@@ -36,24 +34,24 @@
       {bool useSessionCache: true,
       bool requestClientCertificate: false,
       bool requireClientCertificate: false}) {
-    _raw.renegotiate(
+    _raw!.renegotiate(
         useSessionCache: useSessionCache,
         requestClientCertificate: requestClientCertificate,
         requireClientCertificate: requireClientCertificate);
   }
 
-  X509Certificate get peerCertificate {
+  X509Certificate? get peerCertificate {
     if (_raw == null) {
       throw new StateError("peerCertificate called on destroyed SecureSocket");
     }
-    return _raw.peerCertificate;
+    return _raw!.peerCertificate;
   }
 
-  String get selectedProtocol {
+  String? get selectedProtocol {
     if (_raw == null) {
       throw new StateError("selectedProtocol called on destroyed SecureSocket");
     }
-    return _raw.selectedProtocol;
+    return _raw!.selectedProtocol;
   }
 }
 
@@ -78,18 +76,17 @@
   static final int ENCRYPTED_SIZE = 10 * 1024;
 
   _SecureFilterImpl._() {
-    buffers =
-        new List<_ExternalBuffer>.filled(_RawSecureSocket.bufferCount, null);
-    for (int i = 0; i < _RawSecureSocket.bufferCount; ++i) {
-      buffers[i] = new _ExternalBuffer(
-          _RawSecureSocket._isBufferEncrypted(i) ? ENCRYPTED_SIZE : SIZE);
-    }
+    buffers = <_ExternalBuffer>[
+      for (int i = 0; i < _RawSecureSocket.bufferCount; ++i)
+        new _ExternalBuffer(
+            _RawSecureSocket._isBufferEncrypted(i) ? ENCRYPTED_SIZE : SIZE),
+    ];
   }
 
   void connect(
       String hostName,
       SecurityContext context,
-      bool is_server,
+      bool isServer,
       bool requestClientCertificate,
       bool requireClientCertificate,
       Uint8List protocols) native "SecureSocket_Connect";
@@ -114,7 +111,7 @@
 
   void init() native "SecureSocket_Init";
 
-  X509Certificate get peerCertificate native "SecureSocket_PeerCertificate";
+  X509Certificate? get peerCertificate native "SecureSocket_PeerCertificate";
 
   void registerBadCertificateCallback(Function callback)
       native "SecureSocket_RegisterBadCertificateCallback";
@@ -126,7 +123,7 @@
   int _pointer() native "SecureSocket_FilterPointer";
 
   @pragma("vm:entry-point", "get")
-  List<_ExternalBuffer> buffers;
+  List<_ExternalBuffer>? buffers;
 }
 
 @patch
@@ -158,36 +155,36 @@
 
   static final SecurityContext defaultContext = new _SecurityContext(true);
 
-  void usePrivateKey(String file, {String password}) {
+  void usePrivateKey(String file, {String? password}) {
     List<int> bytes = (new File(file)).readAsBytesSync();
     usePrivateKeyBytes(bytes, password: password);
   }
 
-  void usePrivateKeyBytes(List<int> keyBytes, {String password})
+  void usePrivateKeyBytes(List<int> keyBytes, {String? password})
       native "SecurityContext_UsePrivateKeyBytes";
 
-  void setTrustedCertificates(String file, {String password}) {
+  void setTrustedCertificates(String file, {String? password}) {
     List<int> bytes = (new File(file)).readAsBytesSync();
     setTrustedCertificatesBytes(bytes, password: password);
   }
 
-  void setTrustedCertificatesBytes(List<int> certBytes, {String password})
+  void setTrustedCertificatesBytes(List<int> certBytes, {String? password})
       native "SecurityContext_SetTrustedCertificatesBytes";
 
-  void useCertificateChain(String file, {String password}) {
+  void useCertificateChain(String file, {String? password}) {
     List<int> bytes = (new File(file)).readAsBytesSync();
     useCertificateChainBytes(bytes, password: password);
   }
 
-  void useCertificateChainBytes(List<int> chainBytes, {String password})
+  void useCertificateChainBytes(List<int> chainBytes, {String? password})
       native "SecurityContext_UseCertificateChainBytes";
 
-  void setClientAuthorities(String file, {String password}) {
+  void setClientAuthorities(String file, {String? password}) {
     List<int> bytes = (new File(file)).readAsBytesSync();
     setClientAuthoritiesBytes(bytes, password: password);
   }
 
-  void setClientAuthoritiesBytes(List<int> authCertBytes, {String password})
+  void setClientAuthoritiesBytes(List<int> authCertBytes, {String? password})
       native "SecurityContext_SetClientAuthoritiesBytes";
 
   void setAlpnProtocols(List<String> protocols, bool isServer) {
@@ -211,32 +208,14 @@
   // This is done by WrappedX509 in secure_socket.cc.
   _X509CertificateImpl._();
 
-  Uint8List _cachedDer;
   Uint8List get _der native "X509_Der";
-  Uint8List get der {
-    if (_cachedDer == null) {
-      _cachedDer = _der;
-    }
-    return _cachedDer;
-  }
+  late final Uint8List der = _der;
 
-  String _cachedPem;
   String get _pem native "X509_Pem";
-  String get pem {
-    if (_cachedPem == null) {
-      _cachedPem = _pem;
-    }
-    return _cachedPem;
-  }
+  late final String pem = _pem;
 
-  Uint8List _cachedSha1;
   Uint8List get _sha1 native "X509_Sha1";
-  Uint8List get sha1 {
-    if (_cachedSha1 == null) {
-      _cachedSha1 = _sha1;
-    }
-    return _cachedSha1;
-  }
+  late final Uint8List sha1 = _sha1;
 
   String get subject native "X509_Subject";
   String get issuer native "X509_Issuer";
diff --git a/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart
index caf7055..a66984b 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
@@ -18,30 +16,29 @@
 @patch
 class RawSocket {
   @patch
-  static Future<RawSocket> connect(host, int port,
-      {sourceAddress, Duration timeout}) {
+  static Future<RawSocket> connect(dynamic host, int port,
+      {dynamic sourceAddress, Duration? timeout}) {
     return _RawSocket.connect(host, port, sourceAddress, timeout);
   }
 
   @patch
-  static Future<ConnectionTask<RawSocket>> startConnect(host, int port,
-      {sourceAddress}) {
+  static Future<ConnectionTask<RawSocket>> startConnect(dynamic host, int port,
+      {dynamic sourceAddress}) {
     return _RawSocket.startConnect(host, port, sourceAddress);
   }
 }
 
 @patch
 class RawSocketOption {
-  static final List<int> _optionsCache =
-      List<int>.filled(_RawSocketOptions.values.length, null);
+  static final List<int?> _optionsCache =
+      List<int?>.filled(_RawSocketOptions.values.length, null);
 
   @patch
   static int _getOptionValue(int key) {
     if (key > _RawSocketOptions.values.length) {
       throw ArgumentError.value(key, 'key');
     }
-    _optionsCache[key] ??= _getNativeOptionValue(key);
-    return _optionsCache[key];
+    return _optionsCache[key] ??= _getNativeOptionValue(key);
   }
 
   static int _getNativeOptionValue(int key)
@@ -110,13 +107,17 @@
 }
 
 void _throwOnBadPort(int port) {
-  if ((port == null) || (port < 0) || (port > 0xFFFF)) {
+  // TODO: Remove once non-nullability is sound.
+  ArgumentError.checkNotNull(port, "port");
+  if ((port < 0) || (port > 0xFFFF)) {
     throw new ArgumentError("Invalid port $port");
   }
 }
 
 void _throwOnBadTtl(int ttl) {
-  if (ttl == null || ttl < 1 || ttl > 255) {
+  // TODO: Remove once non-nullability is sound.
+  ArgumentError.checkNotNull(ttl, "ttl");
+  if (ttl < 1 || ttl > 255) {
     throw new ArgumentError('Invalid ttl $ttl');
   }
 }
@@ -137,7 +138,7 @@
   static _InternetAddress anyIPv6 = _InternetAddress.fixed(_addressAnyIPv6);
 
   final String address;
-  final String _host;
+  final String? _host;
   final Uint8List _in_addr;
   final int _scope_id;
 
@@ -145,7 +146,7 @@
       ? InternetAddressType.IPv4
       : InternetAddressType.IPv6;
 
-  String get host => _host != null ? _host : address;
+  String get host => _host ?? address;
 
   Uint8List get rawAddress => new Uint8List.fromList(_in_addr);
 
@@ -192,9 +193,8 @@
       [this._scope_id = 0]);
 
   factory _InternetAddress.parse(String address) {
-    if (address is! String) {
-      throw new ArgumentError("Invalid internet address $address");
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(address, "address");
     var in_addr = _parse(address);
     if (in_addr == null) {
       throw new ArgumentError("Invalid internet address $address");
@@ -253,7 +253,7 @@
     return "InternetAddress('$address', ${type.name})";
   }
 
-  static Uint8List _parse(String address) native "InternetAddress_Parse";
+  static Uint8List? _parse(String address) native "InternetAddress_Parse";
 }
 
 class _NetworkInterface implements NetworkInterface {
@@ -352,7 +352,7 @@
 
   // Handlers and receive port for socket events from the event handler.
   final List eventHandlers = new List.filled(eventCount + 1, null);
-  RawReceivePort eventPort;
+  RawReceivePort? eventPort;
   bool flagsSent = false;
 
   // The type flags for this socket.
@@ -362,7 +362,7 @@
   int localPort = 0;
 
   // Holds the address used to connect or bind the socket.
-  InternetAddress localAddress;
+  late InternetAddress localAddress;
 
   int available = 0;
 
@@ -376,11 +376,11 @@
   bool writeAvailable = false;
 
   static bool connectedResourceHandler = false;
-  _ReadWriteResourceInfo resourceInfo;
+  _SocketResourceInfo? resourceInfo;
 
   // The owner object is the object that the Socket is being used by, e.g.
   // a HttpServer, a WebSocket connection, a process pipe, etc.
-  Object owner;
+  Object? owner;
 
   static Future<List<InternetAddress>> lookup(String host,
       {InternetAddressType type: InternetAddressType.any}) {
@@ -464,7 +464,7 @@
   }
 
   static Future<ConnectionTask<_NativeSocket>> startConnect(
-      host, int port, sourceAddress) {
+      dynamic host, int port, dynamic sourceAddress) {
     if (host is String) {
       host = escapeLinkLocalAddress(host);
     }
@@ -496,7 +496,7 @@
           }
           return;
         }
-        final _InternetAddress address = it.current;
+        final _InternetAddress address = it.current as _InternetAddress;
         var socket = new _NativeSocket.normal();
         socket.localAddress = address;
         var result;
@@ -595,13 +595,12 @@
       }
 
       connectNext();
-      return new ConnectionTask<_NativeSocket>._(
-          socket: completer.future, onCancel: onCancel);
+      return new ConnectionTask<_NativeSocket>._(completer.future, onCancel);
     });
   }
 
   static Future<_NativeSocket> connect(
-      host, int port, sourceAddress, Duration timeout) {
+      dynamic host, int port, dynamic sourceAddress, Duration? timeout) {
     return startConnect(host, port, sourceAddress)
         .then((ConnectionTask<_NativeSocket> task) {
       Future<_NativeSocket> socketFuture = task.socket;
@@ -616,7 +615,7 @@
     });
   }
 
-  static Future<_InternetAddress> _resolveHost(host) async {
+  static Future<_InternetAddress> _resolveHost(dynamic host) async {
     if (host is _InternetAddress) {
       return host;
     } else {
@@ -706,7 +705,7 @@
   String get _serviceTypePath => throw new UnimplementedError();
   String get _serviceTypeName => throw new UnimplementedError();
 
-  Uint8List read(int len) {
+  Uint8List? read(int? len) {
     if (len != null && len <= 0) {
       throw new ArgumentError("Illegal length $len");
     }
@@ -718,34 +717,36 @@
       reportError(result, StackTrace.current, "Read failed");
       return null;
     }
-    if (result != null) {
-      available -= result.length;
+    final list = result as Uint8List?;
+    if (list != null) {
+      available -= list.length;
       // TODO(ricow): Remove when we track internal and pipe uses.
       assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
       if (resourceInfo != null) {
-        resourceInfo.totalRead += result.length;
+        resourceInfo!.totalRead += list.length;
       }
     }
     // TODO(ricow): Remove when we track internal and pipe uses.
     assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
     if (resourceInfo != null) {
-      resourceInfo.didRead();
+      resourceInfo!.didRead();
     }
     if (!const bool.fromEnvironment("dart.vm.product")) {
       _SocketProfile.collectStatistic(
-          nativeGetSocketId(), _SocketProfileType.readBytes, result?.length);
+          nativeGetSocketId(), _SocketProfileType.readBytes, list?.length);
     }
-    return result;
+    return list;
   }
 
-  Datagram receive() {
+  Datagram? receive() {
     if (isClosing || isClosed) return null;
     var result = nativeRecvFrom();
     if (result is OSError) {
       reportError(result, StackTrace.current, "Receive failed");
       return null;
     }
-    if (result != null) {
+    final datagram = result as Datagram?;
+    if (datagram != null) {
       // Read the next available. Available is only for the next datagram, not
       // the sum of all datagrams pending, so we need to call after each
       // receive. If available becomes > 0, the _NativeSocket will continue to
@@ -754,24 +755,26 @@
       // TODO(ricow): Remove when we track internal and pipe uses.
       assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
       if (resourceInfo != null) {
-        resourceInfo.totalRead += result.data.length;
+        resourceInfo!.totalRead += datagram.data.length;
       }
     }
     // TODO(ricow): Remove when we track internal and pipe uses.
     assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
     if (resourceInfo != null) {
-      resourceInfo.didRead();
+      resourceInfo!.didRead();
     }
     if (!const bool.fromEnvironment("dart.vm.product")) {
       _SocketProfile.collectStatistic(nativeGetSocketId(),
-          _SocketProfileType.readBytes, result?.data?.length);
+          _SocketProfileType.readBytes, datagram?.data.length);
     }
-    return result;
+    return datagram;
   }
 
-  int write(List<int> buffer, int offset, int bytes) {
-    if (buffer is! List) throw new ArgumentError();
-    if (offset == null) offset = 0;
+  static int _fixOffset(int? offset) => offset ?? 0;
+
+  int write(List<int> buffer, int offset, int? bytes) {
+    // TODO: Remove once non-nullability is sound.
+    offset = _fixOffset(offset);
     if (bytes == null) {
       if (offset > buffer.length) {
         throw new RangeError.value(offset);
@@ -783,9 +786,6 @@
     if ((offset + bytes) > buffer.length) {
       throw new RangeError.value(offset + bytes);
     }
-    if (offset is! int || bytes is! int) {
-      throw new ArgumentError("Invalid arguments to write on Socket");
-    }
     if (isClosing || isClosed) return 0;
     if (bytes == 0) return 0;
     _BufferAndStart bufferAndStart =
@@ -815,7 +815,7 @@
     // TODO(ricow): Remove when we track internal and pipe uses.
     assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
     if (resourceInfo != null) {
-      resourceInfo.addWrite(result);
+      resourceInfo!.addWrite(result);
     }
     return result;
   }
@@ -843,12 +843,12 @@
     // TODO(ricow): Remove when we track internal and pipe uses.
     assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
     if (resourceInfo != null) {
-      resourceInfo.addWrite(result);
+      resourceInfo!.addWrite(result);
     }
     return result;
   }
 
-  _NativeSocket accept() {
+  _NativeSocket? accept() {
     // Don't issue accept if we're closing.
     if (isClosing || isClosed) return null;
     assert(available > 0);
@@ -864,7 +864,7 @@
     assert(resourceInfo != null || isPipe || isInternal || isInternalSignal);
     if (resourceInfo != null) {
       // We track this as read one byte.
-      resourceInfo.addRead(1);
+      resourceInfo!.addRead(1);
     }
     return socket;
   }
@@ -949,7 +949,7 @@
   void multiplex(Object eventsObj) {
     // TODO(paulberry): when issue #31305 is fixed, we should be able to simply
     // declare `events` as a `covariant int` parameter.
-    int events = eventsObj;
+    int events = eventsObj as int;
     for (int i = firstEvent; i <= lastEvent; i++) {
       if (((events & (1 << i)) != 0)) {
         if ((i == closedEvent || i == readEvent) && isClosedRead) continue;
@@ -984,7 +984,7 @@
           assert(
               resourceInfo != null || isPipe || isInternal || isInternalSignal);
           if (resourceInfo != null) {
-            _SocketResourceInfo.SocketClosed(resourceInfo);
+            _SocketResourceInfo.SocketClosed(resourceInfo!);
           }
           isClosed = true;
           closeCompleter.complete();
@@ -1030,7 +1030,7 @@
     eventHandlers[destroyedEvent] = destroyed;
   }
 
-  void setListening({read: true, write: true}) {
+  void setListening({bool read: true, bool write: true}) {
     sendReadEvents = read;
     sendWriteEvents = write;
     if (read) issueReadEvent();
@@ -1096,7 +1096,7 @@
     int fullData = (typeFlags & typeTypeMask) | data;
     assert(!isClosing);
     connectToEventHandler();
-    _EventHandler._sendData(this, eventPort.sendPort, fullData);
+    _EventHandler._sendData(this, eventPort!.sendPort, fullData);
   }
 
   void connectToEventHandler() {
@@ -1115,8 +1115,7 @@
   }
 
   void disconnectFromEventHandler() {
-    assert(eventPort != null);
-    eventPort.close();
+    eventPort!.close();
     eventPort = null;
     // Now that we don't track this Socket anymore, we can clear the owner
     // field.
@@ -1131,7 +1130,7 @@
   // Create the appropriate error/exception from different returned
   // error objects.
   static createError(error, String message,
-      [InternetAddress address, int port]) {
+      [InternetAddress? address, int? port]) {
     if (error is OSError) {
       return new SocketException(message,
           osError: error, address: address, port: port);
@@ -1153,7 +1152,7 @@
     }
   }
 
-  void reportError(error, StackTrace st, String message) {
+  void reportError(error, StackTrace? st, String message) {
     var e = createError(error, message, address, localPort);
     // Invoke the error handler if any.
     if (eventHandlers[errorEvent] != null) {
@@ -1163,39 +1162,41 @@
     close();
   }
 
-  getOption(SocketOption option) {
-    if (option == null) throw new ArgumentError.notNull("option");
+  dynamic getOption(SocketOption option) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(option, "option");
     var result = nativeGetOption(option._value, address.type._value);
     if (result is OSError) throw result;
     return result;
   }
 
   bool setOption(SocketOption option, value) {
-    if (option == null) throw new ArgumentError.notNull("option");
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(option, "option");
     var result = nativeSetOption(option._value, address.type._value, value);
     if (result != null) throw result;
     return true;
   }
 
   Uint8List getRawOption(RawSocketOption option) {
-    if (option == null) throw new ArgumentError.notNull("option");
-    if (option.value == null) throw new ArgumentError.notNull("option.value");
-
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(option, "option");
+    ArgumentError.checkNotNull(option.value, "option.value");
     var result = nativeGetRawOption(option.level, option.option, option.value);
     if (result != null) throw result;
     return option.value;
   }
 
   void setRawOption(RawSocketOption option) {
-    if (option == null) throw new ArgumentError.notNull("option");
-    if (option.value == null) throw new ArgumentError.notNull("option.value");
-
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(option, "option");
+    ArgumentError.checkNotNull(option.value, "option.value");
     var result = nativeSetRawOption(option.level, option.option, option.value);
     if (result != null) throw result;
   }
 
-  InternetAddress multicastAddress(
-      InternetAddress addr, NetworkInterface interface) {
+  InternetAddress? multicastAddress(
+      InternetAddress addr, NetworkInterface? interface) {
     // On Mac OS using the interface index for joining IPv4 multicast groups
     // is not supported. Here the IP address of the interface is needed.
     if (Platform.isMacOS && addr.type == InternetAddressType.IPv4) {
@@ -1218,16 +1219,18 @@
     }
   }
 
-  void joinMulticast(InternetAddress addr, NetworkInterface interface) {
-    _InternetAddress interfaceAddr = multicastAddress(addr, interface);
+  void joinMulticast(InternetAddress addr, NetworkInterface? interface) {
+    final interfaceAddr =
+        multicastAddress(addr, interface) as _InternetAddress?;
     var interfaceIndex = interface == null ? 0 : interface.index;
     var result = nativeJoinMulticast((addr as _InternetAddress)._in_addr,
         interfaceAddr?._in_addr, interfaceIndex);
     if (result is OSError) throw result;
   }
 
-  void leaveMulticast(InternetAddress addr, NetworkInterface interface) {
-    _InternetAddress interfaceAddr = multicastAddress(addr, interface);
+  void leaveMulticast(InternetAddress addr, NetworkInterface? interface) {
+    final interfaceAddr =
+        multicastAddress(addr, interface) as _InternetAddress?;
     var interfaceIndex = interface == null ? 0 : interface.index;
     var result = nativeLeaveMulticast((addr as _InternetAddress)._in_addr,
         interfaceAddr?._in_addr, interfaceIndex);
@@ -1263,16 +1266,16 @@
       native "Socket_SetOption";
   OSError nativeSetRawOption(int level, int option, Uint8List data)
       native "Socket_SetRawOption";
-  OSError nativeJoinMulticast(Uint8List addr, Uint8List interfaceAddr,
+  OSError nativeJoinMulticast(Uint8List addr, Uint8List? interfaceAddr,
       int interfaceIndex) native "Socket_JoinMulticast";
-  bool nativeLeaveMulticast(Uint8List addr, Uint8List interfaceAddr,
+  bool nativeLeaveMulticast(Uint8List addr, Uint8List? interfaceAddr,
       int interfaceIndex) native "Socket_LeaveMulticast";
 }
 
 class _RawServerSocket extends Stream<RawSocket> implements RawServerSocket {
   final _NativeSocket _socket;
-  StreamController<RawSocket> _controller;
-  ReceivePort _referencePort;
+  StreamController<RawSocket>? _controller;
+  ReceivePort? _referencePort;
   bool _v6Only;
 
   static Future<_RawServerSocket> bind(
@@ -1285,13 +1288,13 @@
 
   _RawServerSocket(this._socket, this._v6Only);
 
-  StreamSubscription<RawSocket> listen(void onData(RawSocket event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<RawSocket> listen(void onData(RawSocket event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     if (_controller != null) {
       throw new StateError("Stream was already listened to");
     }
     var zone = Zone.current;
-    _controller = new StreamController(
+    final controller = _controller = new StreamController(
         sync: true,
         onListen: _onSubscriptionStateChange,
         onCancel: _onSubscriptionStateChange,
@@ -1305,20 +1308,20 @@
           _SocketProfile.collectNewSocket(socket.nativeGetSocketId(),
               _tcpSocket, socket.address, socket.port);
         }
-        _controller.add(_RawSocket(socket));
-        if (_controller.isPaused) return;
+        controller.add(_RawSocket(socket));
+        if (controller.isPaused) return;
       }
     }), error: zone.bindBinaryCallbackGuarded((e, st) {
-      _controller.addError(e, st);
-      _controller.close();
+      controller.addError(e, st);
+      controller.close();
     }), destroyed: () {
-      _controller.close();
+      controller.close();
       if (_referencePort != null) {
-        _referencePort.close();
+        _referencePort!.close();
         _referencePort = null;
       }
     });
-    return _controller.stream.listen(onData,
+    return controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
 
@@ -1329,7 +1332,7 @@
   Future<RawServerSocket> close() {
     return _socket.close().then<RawServerSocket>((_) {
       if (_referencePort != null) {
-        _referencePort.close();
+        _referencePort!.close();
         _referencePort = null;
       }
       return this;
@@ -1345,7 +1348,7 @@
   }
 
   void _onSubscriptionStateChange() {
-    if (_controller.hasListener) {
+    if (_controller!.hasListener) {
       _resume();
     } else {
       _socket.close();
@@ -1353,7 +1356,7 @@
   }
 
   void _onPauseStateChange() {
-    if (_controller.isPaused) {
+    if (_controller!.isPaused) {
       _pause();
     } else {
       _resume();
@@ -1367,7 +1370,7 @@
 
 class _RawSocket extends Stream<RawSocketEvent> implements RawSocket {
   final _NativeSocket _socket;
-  StreamController<RawSocketEvent> _controller;
+  final _controller = new StreamController<RawSocketEvent>(sync: true);
   bool _readEventsEnabled = true;
   bool _writeEventsEnabled = true;
 
@@ -1375,7 +1378,7 @@
   bool _isMacOSTerminalInput = false;
 
   static Future<RawSocket> connect(
-      host, int port, sourceAddress, Duration timeout) {
+      dynamic host, int port, dynamic sourceAddress, Duration? timeout) {
     return _NativeSocket.connect(host, port, sourceAddress, timeout)
         .then((socket) {
       if (!const bool.fromEnvironment("dart.vm.product")) {
@@ -1387,7 +1390,7 @@
   }
 
   static Future<ConnectionTask<_RawSocket>> startConnect(
-      host, int port, sourceAddress) {
+      dynamic host, int port, dynamic sourceAddress) {
     return _NativeSocket.startConnect(host, port, sourceAddress)
         .then((ConnectionTask<_NativeSocket> nativeTask) {
       final Future<_RawSocket> raw =
@@ -1398,19 +1401,17 @@
         }
         return _RawSocket(nativeSocket);
       });
-      return ConnectionTask<_RawSocket>._(
-          socket: raw, onCancel: nativeTask._onCancel);
+      return ConnectionTask<_RawSocket>._(raw, nativeTask._onCancel);
     });
   }
 
   _RawSocket(this._socket) {
     var zone = Zone.current;
-    _controller = new StreamController(
-        sync: true,
-        onListen: _onSubscriptionStateChange,
-        onCancel: _onSubscriptionStateChange,
-        onPause: _onPauseStateChange,
-        onResume: _onPauseStateChange);
+    _controller
+      ..onListen = _onSubscriptionStateChange
+      ..onCancel = _onSubscriptionStateChange
+      ..onPause = _onPauseStateChange
+      ..onResume = _onPauseStateChange;
     _socket.setHandlers(
         read: () => _controller.add(RawSocketEvent.read),
         write: () {
@@ -1437,7 +1438,7 @@
     return new _RawSocket(native);
   }
 
-  factory _RawSocket._readPipe(int fd) {
+  factory _RawSocket._readPipe(int? fd) {
     var native = new _NativeSocket.pipe();
     native.isClosedWrite = true;
     if (fd != null) _getStdioHandle(native, fd);
@@ -1450,15 +1451,15 @@
     return result;
   }
 
-  StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
 
   int available() => _socket.available;
 
-  Uint8List read([int len]) {
+  Uint8List? read([int? len]) {
     if (_isMacOSTerminalInput) {
       var available = this.available();
       if (available == 0) return null;
@@ -1474,7 +1475,7 @@
     }
   }
 
-  int write(List<int> buffer, [int offset, int count]) =>
+  int write(List<int> buffer, [int offset = 0, int? count]) =>
       _socket.write(buffer, offset, count);
 
   Future<RawSocket> close() => _socket.close().then<RawSocket>((_) {
@@ -1567,8 +1568,8 @@
 
   _ServerSocket(this._socket);
 
-  StreamSubscription<Socket> listen(void onData(Socket event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<Socket> listen(void onData(Socket event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _socket.map<Socket>((rawSocket) => new _Socket(rawSocket)).listen(
         onData,
         onError: onError,
@@ -1591,39 +1592,38 @@
 @patch
 class Socket {
   @patch
-  static Future<Socket> _connect(host, int port,
-      {sourceAddress, Duration timeout}) {
+  static Future<Socket> _connect(dynamic host, int port,
+      {dynamic sourceAddress, Duration? timeout}) {
     return RawSocket.connect(host, port,
             sourceAddress: sourceAddress, timeout: timeout)
         .then((socket) => new _Socket(socket));
   }
 
   @patch
-  static Future<ConnectionTask<Socket>> _startConnect(host, int port,
-      {sourceAddress}) {
+  static Future<ConnectionTask<Socket>> _startConnect(dynamic host, int port,
+      {dynamic sourceAddress}) {
     return RawSocket.startConnect(host, port, sourceAddress: sourceAddress)
         .then((rawTask) {
       Future<Socket> socket =
           rawTask.socket.then((rawSocket) => new _Socket(rawSocket));
-      return new ConnectionTask<Socket>._(
-          socket: socket, onCancel: rawTask._onCancel);
+      return new ConnectionTask<Socket>._(socket, rawTask._onCancel);
     });
   }
 }
 
 class _SocketStreamConsumer extends StreamConsumer<List<int>> {
-  StreamSubscription subscription;
+  StreamSubscription? subscription;
   final _Socket socket;
-  int offset;
-  List<int> buffer;
+  int? offset;
+  List<int>? buffer;
   bool paused = false;
-  Completer streamCompleter;
+  Completer<Socket>? streamCompleter;
 
   _SocketStreamConsumer(this.socket);
 
   Future<Socket> addStream(Stream<List<int>> stream) {
     socket._ensureRawSocketSubscription();
-    streamCompleter = new Completer<Socket>();
+    final completer = streamCompleter = new Completer<Socket>();
     if (socket._raw != null) {
       subscription = stream.listen((data) {
         assert(!paused);
@@ -1644,7 +1644,7 @@
         done();
       }, cancelOnError: true);
     }
-    return streamCompleter.future;
+    return completer.future;
   }
 
   Future<Socket> close() {
@@ -1653,39 +1653,42 @@
   }
 
   void write() {
-    if (subscription == null) return;
-    assert(buffer != null);
+    final sub = subscription;
+    if (sub == null) return;
     // Write as much as possible.
-    offset += socket._write(buffer, offset, buffer.length - offset);
-    if (offset < buffer.length) {
+    offset =
+        offset! + socket._write(buffer!, offset!, buffer!.length - offset!);
+    if (offset! < buffer!.length) {
       if (!paused) {
         paused = true;
-        subscription.pause();
+        sub.pause();
       }
       socket._enableWriteEvent();
     } else {
       buffer = null;
       if (paused) {
         paused = false;
-        subscription.resume();
+        sub.resume();
       }
     }
   }
 
   void done([error, stackTrace]) {
-    if (streamCompleter != null) {
+    final completer = streamCompleter;
+    if (completer != null) {
       if (error != null) {
-        streamCompleter.completeError(error, stackTrace);
+        completer.completeError(error, stackTrace);
       } else {
-        streamCompleter.complete(socket);
+        completer.complete(socket);
       }
       streamCompleter = null;
     }
   }
 
   void stop() {
-    if (subscription == null) return;
-    subscription.cancel();
+    final sub = subscription;
+    if (sub == null) return;
+    sub.cancel();
     subscription = null;
     paused = false;
     socket._disableWriteEvent();
@@ -1693,37 +1696,36 @@
 }
 
 class _Socket extends Stream<Uint8List> implements Socket {
-  RawSocket _raw; // Set to null when the raw socket is closed.
+  RawSocket? _raw; // Set to null when the raw socket is closed.
   bool _closed = false; // Set to true when the raw socket is closed.
-  StreamController<Uint8List> _controller;
+  final _controller = new StreamController<Uint8List>(sync: true);
   bool _controllerClosed = false;
-  _SocketStreamConsumer _consumer;
-  IOSink _sink;
-  var _subscription;
+  late _SocketStreamConsumer _consumer;
+  late IOSink _sink;
+  StreamSubscription? _subscription;
   var _detachReady;
 
-  _Socket(this._raw) {
-    _controller = new StreamController<Uint8List>(
-        sync: true,
-        onListen: _onSubscriptionStateChange,
-        onCancel: _onSubscriptionStateChange,
-        onPause: _onPauseStateChange,
-        onResume: _onPauseStateChange);
+  _Socket(RawSocket raw) : _raw = raw {
+    _controller
+      ..onListen = _onSubscriptionStateChange
+      ..onCancel = _onSubscriptionStateChange
+      ..onPause = _onPauseStateChange
+      ..onResume = _onPauseStateChange;
     _consumer = new _SocketStreamConsumer(this);
     _sink = new IOSink(_consumer);
 
     // Disable read events until there is a subscription.
-    _raw.readEventsEnabled = false;
+    raw.readEventsEnabled = false;
 
     // Disable write events until the consumer needs it for pending writes.
-    _raw.writeEventsEnabled = false;
+    raw.writeEventsEnabled = false;
   }
 
   factory _Socket._writePipe() {
     return new _Socket(new _RawSocket._writePipe());
   }
 
-  factory _Socket._readPipe([int fd]) {
+  factory _Socket._readPipe([int? fd]) {
     return new _Socket(new _RawSocket._readPipe(fd));
   }
 
@@ -1733,8 +1735,8 @@
   // is Socket and not _NativeSocket.
   _NativeSocket get _nativeSocket => (_raw as _RawSocket)._socket;
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -1745,17 +1747,18 @@
     _sink.encoding = value;
   }
 
-  void write(Object obj) => _sink.write(obj);
+  void write(Object? obj) => _sink.write(obj);
 
-  void writeln([Object obj = ""]) => _sink.writeln(obj);
+  void writeln([Object? obj = ""]) => _sink.writeln(obj);
 
   void writeCharCode(int charCode) => _sink.writeCharCode(charCode);
 
-  void writeAll(Iterable objects, [sep = ""]) => _sink.writeAll(objects, sep);
+  void writeAll(Iterable objects, [String sep = ""]) =>
+      _sink.writeAll(objects, sep);
 
   void add(List<int> bytes) => _sink.add(bytes);
 
-  void addError(Object error, [StackTrace stackTrace]) {
+  void addError(Object error, [StackTrace? stackTrace]) {
     throw new UnsupportedError("Cannot send errors on sockets");
   }
 
@@ -1779,41 +1782,45 @@
   }
 
   bool setOption(SocketOption option, bool enabled) {
-    if (_raw == null) return false;
-    return _raw.setOption(option, enabled);
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    return raw.setOption(option, enabled);
   }
 
   Uint8List getRawOption(RawSocketOption option) {
-    if (_raw == null) return null;
-    return _raw.getRawOption(option);
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    return raw.getRawOption(option);
   }
 
   void setRawOption(RawSocketOption option) {
-    _raw?.setRawOption(option);
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    raw.setRawOption(option);
   }
 
   int get port {
-    if (_raw == null) throw const SocketException.closed();
-    ;
-    return _raw.port;
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    return raw.port;
   }
 
   InternetAddress get address {
-    if (_raw == null) throw const SocketException.closed();
-    ;
-    return _raw.address;
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    return raw.address;
   }
 
   int get remotePort {
-    if (_raw == null) throw const SocketException.closed();
-    ;
-    return _raw.remotePort;
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    return raw.remotePort;
   }
 
   InternetAddress get remoteAddress {
-    if (_raw == null) throw const SocketException.closed();
-    ;
-    return _raw.remoteAddress;
+    final raw = _raw;
+    if (raw == null) throw const SocketException.closed();
+    return raw.remoteAddress;
   }
 
   Future _detachRaw() {
@@ -1831,45 +1838,45 @@
   // consumer needs a subscription as they share the error and done
   // events from the raw socket.
   void _ensureRawSocketSubscription() {
-    if (_subscription == null && _raw != null) {
-      _subscription = _raw.listen(_onData,
+    final raw = _raw;
+    if (_subscription == null && raw != null) {
+      _subscription = raw.listen(_onData,
           onError: _onError, onDone: _onDone, cancelOnError: true);
     }
   }
 
   _closeRawSocket() {
-    var tmp = _raw;
+    var raw = _raw!;
     _raw = null;
     _closed = true;
-    tmp.close();
+    raw.close();
   }
 
   void _onSubscriptionStateChange() {
+    final raw = _raw;
     if (_controller.hasListener) {
       _ensureRawSocketSubscription();
       // Enable read events for providing data to subscription.
-      if (_raw != null) {
-        _raw.readEventsEnabled = true;
+      if (raw != null) {
+        raw.readEventsEnabled = true;
       }
     } else {
       _controllerClosed = true;
-      if (_raw != null) {
-        _raw.shutdown(SocketDirection.receive);
+      if (raw != null) {
+        raw.shutdown(SocketDirection.receive);
       }
     }
   }
 
   void _onPauseStateChange() {
-    if (_raw != null) {
-      _raw.readEventsEnabled = !_controller.isPaused;
-    }
+    _raw?.readEventsEnabled = !_controller.isPaused;
   }
 
   void _onData(event) {
     switch (event) {
       case RawSocketEvent.read:
         if (_raw == null) break;
-        var buffer = _raw.read();
+        var buffer = _raw!.read();
         if (buffer != null) _controller.add(buffer);
         break;
       case RawSocketEvent.write:
@@ -1900,30 +1907,28 @@
   }
 
   int _write(List<int> data, int offset, int length) {
-    if (_raw != null) {
-      return _raw.write(data, offset, length);
+    final raw = _raw;
+    if (raw != null) {
+      return raw.write(data, offset, length);
     }
     return 0;
   }
 
   void _enableWriteEvent() {
-    if (_raw != null) {
-      _raw.writeEventsEnabled = true;
-    }
+    _raw?.writeEventsEnabled = true;
   }
 
   void _disableWriteEvent() {
-    if (_raw != null) {
-      _raw.writeEventsEnabled = false;
-    }
+    _raw?.writeEventsEnabled = false;
   }
 
   void _consumerDone() {
     if (_detachReady != null) {
       _detachReady.complete(null);
     } else {
-      if (_raw != null) {
-        _raw.shutdown(SocketDirection.send);
+      final raw = _raw;
+      if (raw != null) {
+        raw.shutdown(SocketDirection.send);
         _disableWriteEvent();
       }
     }
@@ -1948,7 +1953,7 @@
 class _RawDatagramSocket extends Stream<RawSocketEvent>
     implements RawDatagramSocket {
   _NativeSocket _socket;
-  StreamController<RawSocketEvent> _controller;
+  late StreamController<RawSocketEvent> _controller;
   bool _readEventsEnabled = true;
   bool _writeEventsEnabled = true;
 
@@ -1993,8 +1998,8 @@
     });
   }
 
-  StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -2010,15 +2015,15 @@
   int send(List<int> buffer, InternetAddress address, int port) =>
       _socket.send(buffer, 0, buffer.length, address, port);
 
-  Datagram receive() {
+  Datagram? receive() {
     return _socket.receive();
   }
 
-  void joinMulticast(InternetAddress group, [NetworkInterface interface]) {
+  void joinMulticast(InternetAddress group, [NetworkInterface? interface]) {
     _socket.joinMulticast(group, interface);
   }
 
-  void leaveMulticast(InternetAddress group, [NetworkInterface interface]) {
+  void leaveMulticast(InternetAddress group, [NetworkInterface? interface]) {
     _socket.leaveMulticast(group, interface);
   }
 
@@ -2048,7 +2053,7 @@
       _socket.setOption(SocketOption._ipMulticastHops, value);
 
   NetworkInterface get multicastInterface => throw "Not implemented";
-  void set multicastInterface(NetworkInterface value) =>
+  void set multicastInterface(NetworkInterface? value) =>
       throw "Not implemented";
 
   bool get broadcastEnabled => _socket.getOption(SocketOption._ipBroadcast);
diff --git a/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart
index 58d1d0a..71e3669 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart
@@ -2,43 +2,40 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
 class _StdIOUtils {
   @patch
   static Stdin _getStdioInputStream(int fd) {
-    switch (_getStdioHandleType(fd)) {
+    final type = _getStdioHandleType(fd);
+    if (type is OSError) {
+      throw FileSystemException(
+          "Failed to get type of stdio handle (fd $fd)", "", type);
+    }
+    switch (type) {
       case _stdioHandleTypeTerminal:
       case _stdioHandleTypePipe:
       case _stdioHandleTypeSocket:
+      case _stdioHandleTypeOther:
         return new Stdin._(new _Socket._readPipe(fd), fd);
       case _stdioHandleTypeFile:
         return new Stdin._(new _FileStream.forStdin(), fd);
-      default:
-        throw new FileSystemException(
-            "Couldn't determine file type of stdin (fd $fd)");
     }
   }
 
   @patch
   static _getStdioOutputStream(int fd) {
-    switch (_getStdioHandleType(fd)) {
-      case _stdioHandleTypeTerminal:
-      case _stdioHandleTypePipe:
-      case _stdioHandleTypeSocket:
-      case _stdioHandleTypeFile:
-        return new Stdout._(new IOSink(new _StdConsumer(fd)), fd);
-      default:
-        throw new FileSystemException(
-            "Couldn't determine file type of stdio handle (fd $fd)");
+    final type = _getStdioHandleType(fd);
+    if (type is OSError) {
+      throw FileSystemException(
+          "Failed to get type of stdio handle (fd $fd)", "", type);
     }
+    return new Stdout._(new IOSink(new _StdConsumer(fd)), fd);
   }
 
   @patch
-  static int _socketType(Socket socket) {
+  static int? _socketType(Socket socket) {
     if (socket is _Socket) return _nativeSocketType(socket._nativeSocket);
     return null;
   }
diff --git a/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart
index dcdafff..cf16b88 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 // part of "common_patch.dart";
 
 @patch
@@ -34,14 +32,14 @@
 
   void closeSync() => _socket.closeSync();
 
-  int readIntoSync(List<int> buffer, [int start = 0, int end]) =>
+  int readIntoSync(List<int> buffer, [int start = 0, int? end]) =>
       _socket.readIntoSync(buffer, start, end);
 
-  List<int> readSync(int bytes) => _socket.readSync(bytes);
+  List<int>? readSync(int bytes) => _socket.readSync(bytes);
 
   void shutdown(SocketDirection direction) => _socket.shutdown(direction);
 
-  void writeFromSync(List<int> buffer, [int start = 0, int end]) =>
+  void writeFromSync(List<int> buffer, [int start = 0, int? end]) =>
       _socket.writeFromSync(buffer, start, end);
 }
 
@@ -57,18 +55,19 @@
   bool isClosedWrite = false;
 
   // Holds the address used to connect the socket.
-  InternetAddress localAddress;
+  late InternetAddress localAddress;
 
   // Holds the port of the socket, 0 if not known.
   int localPort = 0;
 
-  _ReadWriteResourceInfo resourceInfo;
+  // Always set by setupResourceInfo called by connectSync.
+  late _SocketResourceInfo resourceInfo;
 
   static _NativeSynchronousSocket connectSync(host, int port) {
     if (host == null) {
       throw new ArgumentError("Parameter host cannot be null");
     }
-    List<_InternetAddress> addresses = null;
+    late List<_InternetAddress> addresses;
     var error = null;
     if (host is _InternetAddress) {
       addresses = [host];
@@ -82,7 +81,6 @@
         throw createError(error, "Failed host lookup: '$host'");
       }
     }
-    assert(addresses is List);
     var it = addresses.iterator;
     _NativeSynchronousSocket connectNext() {
       if (!it.moveNext()) {
@@ -169,7 +167,7 @@
   // Create the appropriate error/exception from different returned
   // error objects.
   static createError(error, String message,
-      [InternetAddress address, int port]) {
+      [InternetAddress? address, int? port]) {
     if (error is OSError) {
       return new SocketException(message,
           osError: error, address: address, port: port);
@@ -184,34 +182,25 @@
     if (response is OSError) {
       throw response;
     }
-    List<_InternetAddress> addresses =
-        new List<_InternetAddress>.filled(response.length, null);
-    for (int i = 0; i < response.length; ++i) {
-      var result = response[i];
-      addresses[i] = new _InternetAddress(result[1], host, result[2]);
-    }
-    return addresses;
+    return <_InternetAddress>[
+      for (int i = 0; i < response.length; ++i)
+        new _InternetAddress(response[i][1], host, response[i][2]),
+    ];
   }
 
-  int readIntoSync(List<int> buffer, int start, int end) {
+  int readIntoSync(List<int> buffer, int start, int? end) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(buffer, "buffer");
+    ArgumentError.checkNotNull(start, "start");
     _checkAvailable();
     if (isClosedRead) {
       throw new SocketException("Socket is closed for reading");
     }
-
-    if ((buffer is! List) ||
-        ((start != null) && (start is! int)) ||
-        ((end != null) && (end is! int))) {
-      throw new ArgumentError("Invalid arguments to readIntoSync");
-    }
-    if (start == null) {
-      throw new ArgumentError("start cannot be null");
-    }
     end = RangeError.checkValidRange(start, end, buffer.length);
     if (end == start) {
       return 0;
     }
-    var result = _nativeReadInto(buffer, start, (end - start));
+    var result = _nativeReadInto(buffer, start, end! - start);
     if (result is OSError) {
       throw new SocketException("readIntoSync failed", osError: result);
     }
@@ -219,7 +208,7 @@
     return result;
   }
 
-  List<int> readSync(int len) {
+  List<int>? readSync(int len) {
     _checkAvailable();
     if (isClosedRead) {
       throw new SocketException("Socket is closed for reading");
@@ -235,15 +224,10 @@
     if (result is OSError) {
       throw result;
     }
-    assert(resourceInfo != null);
-    if (result != null) {
-      if (resourceInfo != null) {
-        resourceInfo.totalRead += result.length;
-      }
+    if (result is List<int>) {
+      resourceInfo.totalRead += result.length;
     }
-    if (resourceInfo != null) {
-      resourceInfo.didRead();
-    }
+    resourceInfo.didRead();
     return result;
   }
 
@@ -294,36 +278,26 @@
     isClosedWrite = true;
   }
 
-  void writeFromSync(List<int> buffer, int start, int end) {
+  void writeFromSync(List<int> buffer, int start, int? end) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(buffer, "buffer");
+    ArgumentError.checkNotNull(start, "start");
     _checkAvailable();
     if (isClosedWrite) {
       throw new SocketException("Socket is closed for writing");
     }
-    if ((buffer is! List) ||
-        ((start != null) && (start is! int)) ||
-        ((end != null) && (end is! int))) {
-      throw new ArgumentError("Invalid arguments to writeFromSync");
-    }
-    if (start == null) {
-      throw new ArgumentError("start cannot be equal to null");
-    }
-
     end = RangeError.checkValidRange(start, end, buffer.length);
     if (end == start) {
       return;
     }
-
     _BufferAndStart bufferAndStart =
-        _ensureFastAndSerializableByteData(buffer, start, end);
+        _ensureFastAndSerializableByteData(buffer, start, end!);
     var result = _nativeWrite(bufferAndStart.buffer, bufferAndStart.start,
         end - (start - bufferAndStart.start));
     if (result is OSError) {
       throw new SocketException("writeFromSync failed", osError: result);
     }
-    assert(resourceInfo != null);
-    if (resourceInfo != null) {
-      resourceInfo.addWrite(result);
-    }
+    resourceInfo.addWrite(result);
   }
 
   void _checkAvailable() {
diff --git a/sdk_nnbd/lib/_internal/vm/bin/vmservice_io.dart b/sdk_nnbd/lib/_internal/vm/bin/vmservice_io.dart
index 9644cd1..c6717ee 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/vmservice_io.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/vmservice_io.dart
@@ -35,6 +35,8 @@
 @pragma('vm:entry-point')
 var _signalWatch = null;
 var _signalSubscription;
+@pragma("vm:entry-point")
+bool _enableServicePortFallback = false;
 
 // HTTP server.
 Server? server;
@@ -49,7 +51,7 @@
   final service = VMService();
   // Lazily create server.
   localServer = Server(service, _ip, _port, _originCheckDisabled,
-      _authCodesDisabled, _serviceInfoFilename);
+      _authCodesDisabled, _serviceInfoFilename, _enableServicePortFallback);
   server = localServer;
   return localServer;
 }
diff --git a/sdk_nnbd/lib/_internal/vm/bin/vmservice_server.dart b/sdk_nnbd/lib/_internal/vm/bin/vmservice_server.dart
index 83409e7..1ae04a3 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/vmservice_server.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/vmservice_server.dart
@@ -147,12 +147,13 @@
 
   final VMService _service;
   final String _ip;
-  final int _port;
   final bool _originCheckDisabled;
   final bool _authCodesDisabled;
+  final bool _enableServicePortFallback;
   final String? _serviceInfoFilename;
   HttpServer? _server;
   bool get running => _server != null;
+  int _port = -1;
 
   /// Returns the server address including the auth token.
   Uri? get serverAddress {
@@ -168,8 +169,14 @@
 
   // On Fuchsia, authentication codes are disabled by default. To enable, the authentication token
   // would have to be written into the hub alongside the port number.
-  Server(this._service, this._ip, this._port, this._originCheckDisabled,
-      bool authCodesDisabled, this._serviceInfoFilename)
+  Server(
+      this._service,
+      this._ip,
+      this._port,
+      this._originCheckDisabled,
+      bool authCodesDisabled,
+      this._serviceInfoFilename,
+      this._enableServicePortFallback)
       : _authCodesDisabled = (authCodesDisabled || Platform.isFuchsia);
 
   bool _isAllowedOrigin(String origin) {
@@ -424,6 +431,10 @@
         onServerAddressChange(null);
         return this;
       }
+      if (_port != 0 && _enableServicePortFallback && attempts >= 3) {
+        _port = 0;
+        serverPrint('Falling back to automatic port selection');
+      }
       await Future<void>.delayed(const Duration(seconds: 1));
     }
     if (_service.isExiting) {
diff --git a/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart b/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart
index 044c0de..b2b57d7 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart
@@ -70,7 +70,7 @@
   // `Future` implementation could potentially invoke the callback with the
   // wrong number of arguments.
   if (Zone.current == Zone.root) return continuation;
-  return Zone.current.registerUnaryCallback((x) => continuation(x, null, null));
+  return Zone.current.registerUnaryCallback(continuation);
 }
 
 // We need to pass the exception and stack trace objects as second and third
diff --git a/sdk_nnbd/lib/_internal/vm/lib/timer_impl.dart b/sdk_nnbd/lib/_internal/vm/lib/timer_impl.dart
index b27f5e0..db626c2 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/timer_impl.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/timer_impl.dart
@@ -467,6 +467,7 @@
     _sendPort = null;
     _scheduledWakeupTime = 0;
     _receivePort!.close();
+    _receivePort = null;
   }
 
   // The Timer factory registered with the dart:async library by the embedder.
diff --git a/sdk_nnbd/lib/async/stream.dart b/sdk_nnbd/lib/async/stream.dart
index b874e5e1..0928b6a 100644
--- a/sdk_nnbd/lib/async/stream.dart
+++ b/sdk_nnbd/lib/async/stream.dart
@@ -489,9 +489,12 @@
    * The returned stream is a broadcast stream if this stream is.
    */
   Stream<E> asyncMap<E>(FutureOr<E> convert(T event)) {
-    _StreamControllerBase<E> controller = isBroadcast
-        ? _SyncBroadcastStreamController<E>(null, null)
-        : _SyncStreamController<E>(null, null, null, null);
+    _StreamControllerBase<E> controller;
+    if (isBroadcast) {
+      controller = _SyncBroadcastStreamController<E>(null, null);
+    } else {
+      controller = _SyncStreamController<E>(null, null, null, null);
+    }
 
     controller.onListen = () {
       StreamSubscription<T> subscription = this.listen(null,
@@ -500,6 +503,7 @@
       FutureOr<Null> add(E value) {
         controller.add(value);
       }
+
       final addError = controller._addError;
       subscription.onData((T event) {
         FutureOr<E> newValue;
@@ -515,7 +519,9 @@
               .then(add, onError: addError)
               .whenComplete(subscription.resume);
         } else {
-          if (newValue is! E) throw "unreachable"; // TODO(lrn): Remove when type promotion works.
+          if (newValue is! E) {
+            throw "unreachable"; // TODO(lrn): Remove when type promotion works.
+          }
           controller.add(newValue);
         }
       });
@@ -548,9 +554,12 @@
    * The returned stream is a broadcast stream if this stream is.
    */
   Stream<E> asyncExpand<E>(Stream<E> convert(T event)) {
-    _StreamControllerBase<E> controller = isBroadcast
-        ? _SyncBroadcastStreamController<E>(null, null)
-        : _SyncStreamController<E>(null, null, null, null);
+    _StreamControllerBase<E> controller;
+    if (isBroadcast) {
+      controller = _SyncBroadcastStreamController<E>(null, null);
+    } else {
+      controller = _SyncStreamController<E>(null, null, null, null);
+    }
 
     controller.onListen = () {
       StreamSubscription<T> subscription = this.listen(null,
@@ -1498,9 +1507,12 @@
    * and the subscriptions' timers can be paused individually.
    */
   Stream<T> timeout(Duration timeLimit, {void onTimeout(EventSink<T> sink)?}) {
-    _StreamControllerBase<T> controller = isBroadcast
-        ? new _SyncBroadcastStreamController<T>(null, null)
-        : new _SyncStreamController<T>(null, null, null, null);
+    _StreamControllerBase<T> controller;
+    if (isBroadcast) {
+      controller = new _SyncBroadcastStreamController<T>(null, null);
+    } else {
+      controller = new _SyncStreamController<T>(null, null, null, null);
+    }
 
     Zone zone = Zone.current;
     // Register callback immediately.
diff --git a/sdk_nnbd/lib/convert/base64.dart b/sdk_nnbd/lib/convert/base64.dart
index ce94d1b..c36ba1a 100644
--- a/sdk_nnbd/lib/convert/base64.dart
+++ b/sdk_nnbd/lib/convert/base64.dart
@@ -615,9 +615,7 @@
     }
     if (start == end) return Uint8List(0);
     var buffer = _allocateBuffer(input, start, end, _state);
-    if (buffer.length > 0) {
-      _state = decodeChunk(input, start, end, buffer, 0, _state);
-    }
+    _state = decodeChunk(input, start, end, buffer, 0, _state);
     return buffer;
   }
 
diff --git a/sdk_nnbd/lib/html/dart2js/html_dart2js.dart b/sdk_nnbd/lib/html/dart2js/html_dart2js.dart
index 278548d..fb306dc 100644
--- a/sdk_nnbd/lib/html/dart2js/html_dart2js.dart
+++ b/sdk_nnbd/lib/html/dart2js/html_dart2js.dart
@@ -1,4 +1,3 @@
-// @dart = 2.5
 /**
  * HTML elements and other resources for web-based applications that need to
  * interact with the browser and the DOM (Document Object Model).
@@ -158,7 +157,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AbsoluteOrientationSensor([Map sensorOptions]) {
+  factory AbsoluteOrientationSensor([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return AbsoluteOrientationSensor._create_1(sensorOptions_1);
@@ -205,7 +204,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory Accelerometer([Map sensorOptions]) {
+  factory Accelerometer([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return Accelerometer._create_1(sensorOptions_1);
@@ -258,99 +257,99 @@
   static AccessibleNode _create_1() =>
       JS('AccessibleNode', 'new AccessibleNode()');
 
-  AccessibleNode activeDescendant;
+  AccessibleNode? activeDescendant;
 
-  bool atomic;
+  bool? atomic;
 
-  String autocomplete;
+  String? autocomplete;
 
-  bool busy;
+  bool? busy;
 
-  String checked;
+  String? checked;
 
-  int colCount;
+  int? colCount;
 
-  int colIndex;
+  int? colIndex;
 
-  int colSpan;
+  int? colSpan;
 
-  AccessibleNodeList controls;
+  AccessibleNodeList? controls;
 
-  String current;
+  String? current;
 
-  AccessibleNodeList describedBy;
+  AccessibleNodeList? describedBy;
 
-  AccessibleNode details;
+  AccessibleNode? details;
 
-  bool disabled;
+  bool? disabled;
 
-  AccessibleNode errorMessage;
+  AccessibleNode? errorMessage;
 
-  bool expanded;
+  bool? expanded;
 
-  AccessibleNodeList flowTo;
+  AccessibleNodeList? flowTo;
 
-  String hasPopUp;
+  String? hasPopUp;
 
-  bool hidden;
+  bool? hidden;
 
-  String invalid;
+  String? invalid;
 
-  String keyShortcuts;
+  String? keyShortcuts;
 
-  String label;
+  String? label;
 
-  AccessibleNodeList labeledBy;
+  AccessibleNodeList? labeledBy;
 
-  int level;
+  int? level;
 
-  String live;
+  String? live;
 
-  bool modal;
+  bool? modal;
 
-  bool multiline;
+  bool? multiline;
 
-  bool multiselectable;
+  bool? multiselectable;
 
-  String orientation;
+  String? orientation;
 
-  AccessibleNodeList owns;
+  AccessibleNodeList? owns;
 
-  String placeholder;
+  String? placeholder;
 
-  int posInSet;
+  int? posInSet;
 
-  String pressed;
+  String? pressed;
 
-  bool readOnly;
+  bool? readOnly;
 
-  String relevant;
+  String? relevant;
 
-  bool required;
+  bool? required;
 
-  String role;
+  String? role;
 
-  String roleDescription;
+  String? roleDescription;
 
-  int rowCount;
+  int? rowCount;
 
-  int rowIndex;
+  int? rowIndex;
 
-  int rowSpan;
+  int? rowSpan;
 
-  bool selected;
+  bool? selected;
 
-  int setSize;
+  int? setSize;
 
-  String sort;
+  String? sort;
 
-  num valueMax;
+  num? valueMax;
 
-  num valueMin;
+  num? valueMin;
 
-  num valueNow;
+  num? valueNow;
 
-  String valueText;
+  String? valueText;
 
   void appendChild(AccessibleNode child) native;
 
@@ -381,7 +380,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AccessibleNodeList([List<AccessibleNode> nodes]) {
+  factory AccessibleNodeList([List<AccessibleNode>? nodes]) {
     if (nodes != null) {
       return AccessibleNodeList._create_1(nodes);
     }
@@ -392,11 +391,15 @@
   static AccessibleNodeList _create_2() =>
       JS('AccessibleNodeList', 'new AccessibleNodeList()');
 
-  int length;
+  int get length => JS("int", "#.length", this);
+
+  set length(int value) {
+    JS("void", "#.length = #", this, value);
+  }
 
   void __setter__(int index, AccessibleNode node) native;
 
-  void add(AccessibleNode node, AccessibleNode before) native;
+  void add(AccessibleNode node, AccessibleNode? before) native;
 
   AccessibleNode item(int index) native;
 
@@ -413,7 +416,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AmbientLightSensor([Map sensorOptions]) {
+  factory AmbientLightSensor([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return AmbientLightSensor._create_1(sensorOptions_1);
@@ -438,9 +441,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AnchorElement({String href}) {
-    AnchorElement e = JS('returns:AnchorElement;creates:AnchorElement;new:true',
-        '#.createElement(#)', document, "a");
+  factory AnchorElement({String? href}) {
+    AnchorElement e = JS<AnchorElement>(
+        'returns:AnchorElement;creates:AnchorElement;new:true',
+        '#.createElement(#)',
+        document,
+        "a");
     if (href != null) e.href = href;
     return e;
   }
@@ -451,41 +457,105 @@
    */
   AnchorElement.created() : super.created();
 
-  String download;
+  String get download => JS("String", "#.download", this);
 
-  String hreflang;
+  set download(String value) {
+    JS("void", "#.download = #", this, value);
+  }
 
-  String referrerPolicy;
+  String get hreflang => JS("String", "#.hreflang", this);
 
-  String rel;
+  set hreflang(String value) {
+    JS("void", "#.hreflang = #", this, value);
+  }
 
-  String target;
+  String get referrerPolicy => JS("String", "#.referrerPolicy", this);
 
-  String type;
+  set referrerPolicy(String value) {
+    JS("void", "#.referrerPolicy = #", this, value);
+  }
+
+  String get rel => JS("String", "#.rel", this);
+
+  set rel(String value) {
+    JS("void", "#.rel = #", this, value);
+  }
+
+  String get target => JS("String", "#.target", this);
+
+  set target(String value) {
+    JS("void", "#.target = #", this, value);
+  }
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
   // From HTMLHyperlinkElementUtils
 
-  String hash;
+  String get hash => JS("String", "#.hash", this);
 
-  String host;
+  set hash(String value) {
+    JS("void", "#.hash = #", this, value);
+  }
 
-  String hostname;
+  String get host => JS("String", "#.host", this);
 
-  String href;
+  set host(String value) {
+    JS("void", "#.host = #", this, value);
+  }
 
-  final String origin;
+  String get hostname => JS("String", "#.hostname", this);
 
-  String password;
+  set hostname(String value) {
+    JS("void", "#.hostname = #", this, value);
+  }
 
-  String pathname;
+  String get href => JS("String", "#.href", this);
 
-  String port;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
 
-  String protocol;
+  String get origin => JS("String", "#.origin", this);
 
-  String search;
+  String get password => JS("String", "#.password", this);
 
-  String username;
+  set password(String value) {
+    JS("void", "#.password = #", this, value);
+  }
+
+  String get pathname => JS("String", "#.pathname", this);
+
+  set pathname(String value) {
+    JS("void", "#.pathname = #", this, value);
+  }
+
+  String get port => JS("String", "#.port", this);
+
+  set port(String value) {
+    JS("void", "#.port = #", this, value);
+  }
+
+  String get protocol => JS("String", "#.protocol", this);
+
+  set protocol(String value) {
+    JS("void", "#.protocol = #", this, value);
+  }
+
+  String get search => JS("String", "#.search", this);
+
+  set search(String value) {
+    JS("void", "#.search = #", this, value);
+  }
+
+  String get username => JS("String", "#.username", this);
+
+  set username(String value) {
+    JS("void", "#.username = #", this, value);
+  }
 
   String toString() => JS('String', 'String(#)', this);
 }
@@ -507,7 +577,7 @@
       const EventStreamProvider<Event>('finish');
 
   factory Animation(
-      [AnimationEffectReadOnly effect, AnimationTimeline timeline]) {
+      [AnimationEffectReadOnly? effect, AnimationTimeline? timeline]) {
     if (timeline != null) {
       return Animation._create_1(effect, timeline);
     }
@@ -525,25 +595,31 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(document.body.animate)');
 
-  num currentTime;
+  num? currentTime;
 
-  AnimationEffectReadOnly effect;
+  AnimationEffectReadOnly? effect;
 
-  Future<Animation> get finished =>
-      promiseToFuture<Animation>(JS("", "#.finished", this));
+  Future get finished => JS("Future", "#.finished", this);
 
-  String id;
+  String get id => JS("String", "#.id", this);
 
-  final String playState;
+  set id(String value) {
+    JS("void", "#.id = #", this, value);
+  }
 
-  num playbackRate;
+  String get playState => JS("String", "#.playState", this);
 
-  Future<Animation> get ready =>
-      promiseToFuture<Animation>(JS("", "#.ready", this));
+  num get playbackRate => JS("num", "#.playbackRate", this);
 
-  num startTime;
+  set playbackRate(num value) {
+    JS("void", "#.playbackRate = #", this, value);
+  }
 
-  final AnimationTimeline timeline;
+  Future get ready => JS("Future", "#.ready", this);
+
+  num? startTime;
+
+  final AnimationTimeline? timeline;
 
   void cancel() native;
 
@@ -570,7 +646,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final AnimationEffectTimingReadOnly timing;
+  AnimationEffectTimingReadOnly get timing =>
+      JS("AnimationEffectTimingReadOnly", "#.timing", this);
 
   Map getComputedTiming() {
     return convertNativeToDart_Dictionary(_getComputedTiming_1());
@@ -591,6 +668,7 @@
   }
 
   // Shadowing definition.
+
   num get delay => JS("num", "#.delay", this);
 
   set delay(num value) {
@@ -598,6 +676,7 @@
   }
 
   // Shadowing definition.
+
   String get direction => JS("String", "#.direction", this);
 
   set direction(String value) {
@@ -605,6 +684,7 @@
   }
 
   // Shadowing definition.
+
   Object get duration => JS("Object", "#.duration", this);
 
   set duration(Object value) {
@@ -612,6 +692,7 @@
   }
 
   // Shadowing definition.
+
   String get easing => JS("String", "#.easing", this);
 
   set easing(String value) {
@@ -619,6 +700,7 @@
   }
 
   // Shadowing definition.
+
   num get endDelay => JS("num", "#.endDelay", this);
 
   set endDelay(num value) {
@@ -626,6 +708,7 @@
   }
 
   // Shadowing definition.
+
   String get fill => JS("String", "#.fill", this);
 
   set fill(String value) {
@@ -633,6 +716,7 @@
   }
 
   // Shadowing definition.
+
   num get iterationStart => JS("num", "#.iterationStart", this);
 
   set iterationStart(num value) {
@@ -640,6 +724,7 @@
   }
 
   // Shadowing definition.
+
   num get iterations => JS("num", "#.iterations", this);
 
   set iterations(num value) {
@@ -657,21 +742,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num delay;
+  num get delay => JS("num", "#.delay", this);
 
-  final String direction;
+  String get direction => JS("String", "#.direction", this);
 
-  final Object duration;
+  Object get duration => JS("Object", "#.duration", this);
 
-  final String easing;
+  String get easing => JS("String", "#.easing", this);
 
-  final num endDelay;
+  num get endDelay => JS("num", "#.endDelay", this);
 
-  final String fill;
+  String get fill => JS("String", "#.fill", this);
 
-  final num iterationStart;
+  num get iterationStart => JS("num", "#.iterationStart", this);
 
-  final num iterations;
+  num get iterations => JS("num", "#.iterations", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -684,7 +769,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AnimationEvent(String type, [Map eventInitDict]) {
+  factory AnimationEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return AnimationEvent._create_1(type, eventInitDict_1);
@@ -696,9 +781,9 @@
   static AnimationEvent _create_2(type) =>
       JS('AnimationEvent', 'new AnimationEvent(#)', type);
 
-  final String animationName;
+  String get animationName => JS("String", "#.animationName", this);
 
-  final num elapsedTime;
+  num get elapsedTime => JS("num", "#.elapsedTime", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -711,7 +796,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AnimationPlaybackEvent(String type, [Map eventInitDict]) {
+  factory AnimationPlaybackEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return AnimationPlaybackEvent._create_1(type, eventInitDict_1);
@@ -863,7 +948,7 @@
 
   static const int UPDATEREADY = 4;
 
-  final int status;
+  int get status => JS("int", "#.status", this);
 
   void abort() native;
 
@@ -906,7 +991,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ApplicationCacheErrorEvent(String type, [Map eventInitDict]) {
+  factory ApplicationCacheErrorEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return ApplicationCacheErrorEvent._create_1(type, eventInitDict_1);
@@ -921,13 +1006,13 @@
   static ApplicationCacheErrorEvent _create_2(type) => JS(
       'ApplicationCacheErrorEvent', 'new ApplicationCacheErrorEvent(#)', type);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
-  final String reason;
+  String get reason => JS("String", "#.reason", this);
 
-  final int status;
+  int get status => JS("int", "#.status", this);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 }
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -950,7 +1035,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AreaElement() => JS(
+  factory AreaElement() => JS<AreaElement>(
       'returns:AreaElement;creates:AreaElement;new:true',
       '#.createElement(#)',
       document,
@@ -962,43 +1047,111 @@
    */
   AreaElement.created() : super.created();
 
-  String alt;
+  String get alt => JS("String", "#.alt", this);
 
-  String coords;
+  set alt(String value) {
+    JS("void", "#.alt = #", this, value);
+  }
 
-  String download;
+  String get coords => JS("String", "#.coords", this);
 
-  String referrerPolicy;
+  set coords(String value) {
+    JS("void", "#.coords = #", this, value);
+  }
 
-  String rel;
+  String get download => JS("String", "#.download", this);
 
-  String shape;
+  set download(String value) {
+    JS("void", "#.download = #", this, value);
+  }
 
-  String target;
+  String get referrerPolicy => JS("String", "#.referrerPolicy", this);
+
+  set referrerPolicy(String value) {
+    JS("void", "#.referrerPolicy = #", this, value);
+  }
+
+  String get rel => JS("String", "#.rel", this);
+
+  set rel(String value) {
+    JS("void", "#.rel = #", this, value);
+  }
+
+  String get shape => JS("String", "#.shape", this);
+
+  set shape(String value) {
+    JS("void", "#.shape = #", this, value);
+  }
+
+  String get target => JS("String", "#.target", this);
+
+  set target(String value) {
+    JS("void", "#.target = #", this, value);
+  }
 
   // From HTMLHyperlinkElementUtils
 
-  String hash;
+  String get hash => JS("String", "#.hash", this);
 
-  String host;
+  set hash(String value) {
+    JS("void", "#.hash = #", this, value);
+  }
 
-  String hostname;
+  String get host => JS("String", "#.host", this);
 
-  String href;
+  set host(String value) {
+    JS("void", "#.host = #", this, value);
+  }
 
-  final String origin;
+  String get hostname => JS("String", "#.hostname", this);
 
-  String password;
+  set hostname(String value) {
+    JS("void", "#.hostname = #", this, value);
+  }
 
-  String pathname;
+  String get href => JS("String", "#.href", this);
 
-  String port;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
 
-  String protocol;
+  String get origin => JS("String", "#.origin", this);
 
-  String search;
+  String get password => JS("String", "#.password", this);
 
-  String username;
+  set password(String value) {
+    JS("void", "#.password = #", this, value);
+  }
+
+  String get pathname => JS("String", "#.pathname", this);
+
+  set pathname(String value) {
+    JS("void", "#.pathname = #", this, value);
+  }
+
+  String get port => JS("String", "#.port", this);
+
+  set port(String value) {
+    JS("void", "#.port = #", this, value);
+  }
+
+  String get protocol => JS("String", "#.protocol", this);
+
+  set protocol(String value) {
+    JS("void", "#.protocol = #", this, value);
+  }
+
+  String get search => JS("String", "#.search", this);
+
+  set search(String value) {
+    JS("void", "#.search = #", this, value);
+  }
+
+  String get username => JS("String", "#.username", this);
+
+  set username(String value) {
+    JS("void", "#.username = #", this, value);
+  }
 
   String toString() => JS('String', 'String(#)', this);
 }
@@ -1008,7 +1161,7 @@
 
 @Native("HTMLAudioElement")
 class AudioElement extends MediaElement {
-  factory AudioElement._([String src]) {
+  factory AudioElement._([String? src]) {
     if (src != null) {
       return AudioElement._create_1(src);
     }
@@ -1036,9 +1189,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final ByteBuffer authenticatorData;
+  ByteBuffer get authenticatorData =>
+      JS("ByteBuffer", "#.authenticatorData", this);
 
-  final ByteBuffer signature;
+  ByteBuffer get signature => JS("ByteBuffer", "#.signature", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1051,7 +1205,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final ByteBuffer attestationObject;
+  ByteBuffer get attestationObject =>
+      JS("ByteBuffer", "#.attestationObject", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1065,7 +1220,7 @@
   }
 
   @JSName('clientDataJSON')
-  final ByteBuffer clientDataJson;
+  ByteBuffer get clientDataJson => JS("ByteBuffer", "#.clientDataJSON", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1078,8 +1233,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory BRElement() => JS('returns:BRElement;creates:BRElement;new:true',
-      '#.createElement(#)', document, "br");
+  factory BRElement() => JS<BRElement>(
+      'returns:BRElement;creates:BRElement;new:true',
+      '#.createElement(#)',
+      document,
+      "br");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1108,7 +1266,7 @@
       type,
       init);
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1128,7 +1286,7 @@
   static BackgroundFetchEvent _create_1(type, init) =>
       JS('BackgroundFetchEvent', 'new BackgroundFetchEvent(#,#)', type, init);
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1151,7 +1309,8 @@
       type,
       init);
 
-  final List<BackgroundFetchSettledFetch> fetches;
+  List<BackgroundFetchSettledFetch> get fetches =>
+      JS("List<BackgroundFetchSettledFetch>", "#.fetches", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1164,7 +1323,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final _Request request;
+  _Request get request => JS("_Request", "#.request", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1178,7 +1337,7 @@
   }
 
   Future<BackgroundFetchRegistration> fetch(String id, Object requests,
-      [Map options]) {
+      [Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -1205,19 +1364,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int downloadTotal;
+  int get downloadTotal => JS("int", "#.downloadTotal", this);
 
-  final int downloaded;
+  int get downloaded => JS("int", "#.downloaded", this);
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String title;
+  String get title => JS("String", "#.title", this);
 
-  final int totalDownloadSize;
+  int get totalDownloadSize => JS("int", "#.totalDownloadSize", this);
 
-  final int uploadTotal;
+  int get uploadTotal => JS("int", "#.uploadTotal", this);
 
-  final int uploaded;
+  int get uploaded => JS("int", "#.uploaded", this);
 
   Future<bool> abort() => promiseToFuture<bool>(JS("", "#.abort()", this));
 }
@@ -1241,7 +1400,7 @@
       request,
       response);
 
-  final _Response response;
+  final _Response? response;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1261,7 +1420,8 @@
   static BackgroundFetchedEvent _create_1(type, init) => JS(
       'BackgroundFetchedEvent', 'new BackgroundFetchedEvent(#,#)', type, init);
 
-  final List<BackgroundFetchSettledFetch> fetches;
+  List<BackgroundFetchSettledFetch> get fetches =>
+      JS("List<BackgroundFetchSettledFetch>", "#.fetches", this);
 
   Future updateUI(String title) =>
       promiseToFuture(JS("", "#.updateUI(#)", this, title));
@@ -1279,7 +1439,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool visible;
+  bool get visible => JS("bool", "#.visible", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1312,7 +1472,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory BaseElement() => JS(
+  factory BaseElement() => JS<BaseElement>(
       'returns:BaseElement;creates:BaseElement;new:true',
       '#.createElement(#)',
       document,
@@ -1324,9 +1484,17 @@
    */
   BaseElement.created() : super.created();
 
-  String href;
+  String get href => JS("String", "#.href", this);
 
-  String target;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
+
+  String get target => JS("String", "#.target", this);
+
+  set target(String value) {
+    JS("void", "#.target = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1339,13 +1507,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool charging;
+  bool get charging => JS("bool", "#.charging", this);
 
-  final num chargingTime;
+  num get chargingTime => JS("num", "#.chargingTime", this);
 
-  final num dischargingTime;
+  num get dischargingTime => JS("num", "#.dischargingTime", this);
 
-  final num level;
+  num get level => JS("num", "#.level", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1358,7 +1526,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory BeforeInstallPromptEvent(String type, [Map eventInitDict]) {
+  factory BeforeInstallPromptEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return BeforeInstallPromptEvent._create_1(type, eventInitDict_1);
@@ -1373,10 +1541,9 @@
   static BeforeInstallPromptEvent _create_2(type) =>
       JS('BeforeInstallPromptEvent', 'new BeforeInstallPromptEvent(#)', type);
 
-  final List<String> platforms;
+  List<String> get platforms => JS("List<String>", "#.platforms", this);
 
-  Future<Map<String, dynamic>> get userChoice =>
-      promiseToFutureAsMap(JS("", "#.userChoice", this));
+  Future get userChoice => JS("Future", "#.userChoice", this);
 
   Future prompt() => promiseToFuture(JS("", "#.prompt()", this));
 }
@@ -1392,6 +1559,7 @@
   }
 
   // Shadowing definition.
+
   String get returnValue => JS("String", "#.returnValue", this);
 
   set returnValue(String value) {
@@ -1409,11 +1577,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int size;
+  int get size => JS("int", "#.size", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  Blob slice([int start, int end, String contentType]) native;
+  Blob slice([int? start, int? end, String? contentType]) native;
 
   factory Blob(List blobParts, [String type, String endings]) {
     // TODO: validate that blobParts is a JS Array and convert if not.
@@ -1442,7 +1610,7 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void BlobCallback(Blob blob);
+typedef void BlobCallback(Blob? blob);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -1461,9 +1629,9 @@
   static BlobEvent _create_1(type, eventInitDict) =>
       JS('BlobEvent', 'new BlobEvent(#,#)', type, eventInitDict);
 
-  final Blob data;
+  Blob get data => JS("Blob", "#.data", this);
 
-  final num timecode;
+  num get timecode => JS("num", "#.timecode", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1476,11 +1644,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final _BluetoothRemoteGATTCharacteristic characteristic;
+  _BluetoothRemoteGATTCharacteristic get characteristic =>
+      JS("_BluetoothRemoteGATTCharacteristic", "#.characteristic", this);
 
-  final String uuid;
+  String get uuid => JS("String", "#.uuid", this);
 
-  final ByteData value;
+  final ByteData? value;
 
   Future readValue() => promiseToFuture(JS("", "#.readValue()", this));
 
@@ -1498,7 +1667,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool bodyUsed;
+  bool get bodyUsed => JS("bool", "#.bodyUsed", this);
 
   Future arrayBuffer() => promiseToFuture(JS("", "#.arrayBuffer()", this));
 
@@ -1633,7 +1802,7 @@
   static const EventStreamProvider<Event> unloadEvent =
       const EventStreamProvider<Event>('unload');
 
-  factory BodyElement() => JS(
+  factory BodyElement() => JS<BodyElement>(
       'returns:BodyElement;creates:BodyElement;new:true',
       '#.createElement(#)',
       document,
@@ -1703,7 +1872,7 @@
   static BroadcastChannel _create_1(name) =>
       JS('BroadcastChannel', 'new BroadcastChannel(#)', name);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   void close() native;
 
@@ -1722,9 +1891,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num budgetAt;
+  num get budgetAt => JS("num", "#.budgetAt", this);
 
-  final int time;
+  int get time => JS("int", "#.time", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1737,7 +1906,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ButtonElement() => JS(
+  factory ButtonElement() => JS<ButtonElement>(
       'returns:ButtonElement;creates:ButtonElement;new:true',
       '#.createElement(#)',
       document,
@@ -1749,38 +1918,78 @@
    */
   ButtonElement.created() : super.created();
 
-  bool autofocus;
+  bool get autofocus => JS("bool", "#.autofocus", this);
 
-  bool disabled;
+  set autofocus(bool value) {
+    JS("void", "#.autofocus = #", this, value);
+  }
 
-  final FormElement form;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  String formAction;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
-  String formEnctype;
+  final FormElement? form;
 
-  String formMethod;
+  String get formAction => JS("String", "#.formAction", this);
 
-  bool formNoValidate;
+  set formAction(String value) {
+    JS("void", "#.formAction = #", this, value);
+  }
 
-  String formTarget;
+  String get formEnctype => JS("String", "#.formEnctype", this);
+
+  set formEnctype(String value) {
+    JS("void", "#.formEnctype = #", this, value);
+  }
+
+  String get formMethod => JS("String", "#.formMethod", this);
+
+  set formMethod(String value) {
+    JS("void", "#.formMethod = #", this, value);
+  }
+
+  bool get formNoValidate => JS("bool", "#.formNoValidate", this);
+
+  set formNoValidate(bool value) {
+    JS("void", "#.formNoValidate = #", this, value);
+  }
+
+  String get formTarget => JS("String", "#.formTarget", this);
+
+  set formTarget(String value) {
+    JS("void", "#.formTarget = #", this, value);
+  }
 
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  String type;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  final String validationMessage;
+  String get type => JS("String", "#.type", this);
 
-  final ValidityState validity;
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
-  String value;
+  String get validationMessage => JS("String", "#.validationMessage", this);
 
-  final bool willValidate;
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
+
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
 
   bool checkValidity() native;
 
@@ -1820,7 +2029,7 @@
 
   Future keys() => promiseToFuture(JS("", "#.keys()", this));
 
-  Future match(/*RequestInfo*/ request, [Map options]) {
+  Future match(/*RequestInfo*/ request, [Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -1853,13 +2062,14 @@
       type,
       eventInitDict);
 
-  final List methodData;
+  List get methodData => JS("List", "#.methodData", this);
 
-  final List modifiers;
+  List get modifiers => JS("List", "#.modifiers", this);
 
-  final String paymentRequestOrigin;
+  String get paymentRequestOrigin =>
+      JS("String", "#.paymentRequestOrigin", this);
 
-  final String topLevelOrigin;
+  String get topLevelOrigin => JS("String", "#.topLevelOrigin", this);
 
   void respondWith(Future canMakePaymentResponse) native;
 }
@@ -1874,7 +2084,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final CanvasElement canvas;
+  CanvasElement get canvas => JS("CanvasElement", "#.canvas", this);
 
   void requestFrame() native;
 }
@@ -1907,9 +2117,12 @@
   static const EventStreamProvider<gl.ContextEvent> webGlContextRestoredEvent =
       const EventStreamProvider<gl.ContextEvent>('webglcontextrestored');
 
-  factory CanvasElement({int width, int height}) {
-    CanvasElement e = JS('returns:CanvasElement;creates:CanvasElement;new:true',
-        '#.createElement(#)', document, "canvas");
+  factory CanvasElement({int? width, int? height}) {
+    CanvasElement e = JS<CanvasElement>(
+        'returns:CanvasElement;creates:CanvasElement;new:true',
+        '#.createElement(#)',
+        document,
+        "canvas");
     if (width != null) e.width = width;
     if (height != null) e.height = height;
     return e;
@@ -1922,16 +2135,30 @@
   CanvasElement.created() : super.created();
 
   /// The height of this canvas element in CSS pixels.
-  int height;
+
+  int get height => JS("int", "#.height", this);
+
+  /// The height of this canvas element in CSS pixels.
+
+  set height(int value) {
+    JS("void", "#.height = #", this, value);
+  }
 
   /// The width of this canvas element in CSS pixels.
-  int width;
 
-  MediaStream captureStream([num frameRate]) native;
+  int get width => JS("int", "#.width", this);
+
+  /// The width of this canvas element in CSS pixels.
+
+  set width(int value) {
+    JS("void", "#.width = #", this, value);
+  }
+
+  MediaStream captureStream([num? frameRate]) native;
 
   @Creates('CanvasRenderingContext2D|RenderingContext|RenderingContext2')
   @Returns('CanvasRenderingContext2D|RenderingContext|RenderingContext2|Null')
-  Object getContext(String contextId, [Map attributes]) {
+  Object getContext(String contextId, [Map? attributes]) {
     if (attributes != null) {
       var attributes_1 = convertDartToNative_Dictionary(attributes);
       return _getContext_1(contextId, attributes_1);
@@ -2043,9 +2270,9 @@
       _toDataUrl(type, quality);
 
   @JSName('toBlob')
-  void _toBlob(BlobCallback callback, String type, [Object arguments]) native;
+  void _toBlob(BlobCallback callback, String type, [Object? arguments]) native;
 
-  Future<Blob> toBlob(String type, [Object arguments]) {
+  Future<Blob> toBlob(String type, [Object? arguments]) {
     var completer = new Completer<Blob>();
     _toBlob((value) {
       completer.complete(value);
@@ -2162,23 +2389,54 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final CanvasElement canvas;
+  CanvasElement get canvas => JS("CanvasElement", "#.canvas", this);
 
-  Matrix currentTransform;
+  Matrix get currentTransform => JS("Matrix", "#.currentTransform", this);
 
-  String direction;
+  set currentTransform(Matrix value) {
+    JS("void", "#.currentTransform = #", this, value);
+  }
+
+  String get direction => JS("String", "#.direction", this);
+
+  set direction(String value) {
+    JS("void", "#.direction = #", this, value);
+  }
 
   @Creates('String|CanvasGradient|CanvasPattern')
   @Returns('String|CanvasGradient|CanvasPattern')
-  Object fillStyle;
+  Object get fillStyle => JS("Object", "#.fillStyle", this);
 
-  String filter;
+  @Creates('String|CanvasGradient|CanvasPattern')
+  @Returns('String|CanvasGradient|CanvasPattern')
+  set fillStyle(Object value) {
+    JS("void", "#.fillStyle = #", this, value);
+  }
 
-  String font;
+  String get filter => JS("String", "#.filter", this);
 
-  num globalAlpha;
+  set filter(String value) {
+    JS("void", "#.filter = #", this, value);
+  }
 
-  String globalCompositeOperation;
+  String get font => JS("String", "#.font", this);
+
+  set font(String value) {
+    JS("void", "#.font = #", this, value);
+  }
+
+  num get globalAlpha => JS("num", "#.globalAlpha", this);
+
+  set globalAlpha(num value) {
+    JS("void", "#.globalAlpha = #", this, value);
+  }
+
+  String get globalCompositeOperation =>
+      JS("String", "#.globalCompositeOperation", this);
+
+  set globalCompositeOperation(String value) {
+    JS("void", "#.globalCompositeOperation = #", this, value);
+  }
 
   /**
    * Whether images and patterns on this canvas will be smoothed when this
@@ -2190,35 +2448,102 @@
    *   smoothing](https://html.spec.whatwg.org/multipage/scripting.html#image-smoothing)
    *   from WHATWG.
    */
-  bool imageSmoothingEnabled;
 
-  String imageSmoothingQuality;
+  bool get imageSmoothingEnabled => JS("bool", "#.imageSmoothingEnabled", this);
 
-  String lineCap;
+  /**
+   * Whether images and patterns on this canvas will be smoothed when this
+   * canvas is scaled.
+   *
+   * ## Other resources
+   *
+   * * [Image
+   *   smoothing](https://html.spec.whatwg.org/multipage/scripting.html#image-smoothing)
+   *   from WHATWG.
+   */
 
-  String lineJoin;
+  set imageSmoothingEnabled(bool value) {
+    JS("void", "#.imageSmoothingEnabled = #", this, value);
+  }
 
-  num lineWidth;
+  String get imageSmoothingQuality =>
+      JS("String", "#.imageSmoothingQuality", this);
 
-  num miterLimit;
+  set imageSmoothingQuality(String value) {
+    JS("void", "#.imageSmoothingQuality = #", this, value);
+  }
 
-  num shadowBlur;
+  String get lineCap => JS("String", "#.lineCap", this);
 
-  String shadowColor;
+  set lineCap(String value) {
+    JS("void", "#.lineCap = #", this, value);
+  }
 
-  num shadowOffsetX;
+  String get lineJoin => JS("String", "#.lineJoin", this);
 
-  num shadowOffsetY;
+  set lineJoin(String value) {
+    JS("void", "#.lineJoin = #", this, value);
+  }
+
+  num get lineWidth => JS("num", "#.lineWidth", this);
+
+  set lineWidth(num value) {
+    JS("void", "#.lineWidth = #", this, value);
+  }
+
+  num get miterLimit => JS("num", "#.miterLimit", this);
+
+  set miterLimit(num value) {
+    JS("void", "#.miterLimit = #", this, value);
+  }
+
+  num get shadowBlur => JS("num", "#.shadowBlur", this);
+
+  set shadowBlur(num value) {
+    JS("void", "#.shadowBlur = #", this, value);
+  }
+
+  String get shadowColor => JS("String", "#.shadowColor", this);
+
+  set shadowColor(String value) {
+    JS("void", "#.shadowColor = #", this, value);
+  }
+
+  num get shadowOffsetX => JS("num", "#.shadowOffsetX", this);
+
+  set shadowOffsetX(num value) {
+    JS("void", "#.shadowOffsetX = #", this, value);
+  }
+
+  num get shadowOffsetY => JS("num", "#.shadowOffsetY", this);
+
+  set shadowOffsetY(num value) {
+    JS("void", "#.shadowOffsetY = #", this, value);
+  }
 
   @Creates('String|CanvasGradient|CanvasPattern')
   @Returns('String|CanvasGradient|CanvasPattern')
-  Object strokeStyle;
+  Object get strokeStyle => JS("Object", "#.strokeStyle", this);
 
-  String textAlign;
+  @Creates('String|CanvasGradient|CanvasPattern')
+  @Returns('String|CanvasGradient|CanvasPattern')
+  set strokeStyle(Object value) {
+    JS("void", "#.strokeStyle = #", this, value);
+  }
 
-  String textBaseline;
+  String get textAlign => JS("String", "#.textAlign", this);
 
-  void addHitRegion([Map options]) {
+  set textAlign(String value) {
+    JS("void", "#.textAlign = #", this, value);
+  }
+
+  String get textBaseline => JS("String", "#.textBaseline", this);
+
+  set textBaseline(String value) {
+    JS("void", "#.textBaseline = #", this, value);
+  }
+
+  void addHitRegion([Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       _addHitRegion_1(options_1);
@@ -2239,13 +2564,13 @@
 
   void clearRect(num x, num y, num width, num height) native;
 
-  void clip([path_OR_winding, String winding]) native;
+  void clip([path_OR_winding, String? winding]) native;
 
   @Creates('ImageData|=Object')
   ImageData createImageData(data_OR_imagedata_OR_sw,
-      [int sh_OR_sw,
+      [int? sh_OR_sw,
       imageDataColorSettings_OR_sh,
-      Map imageDataColorSettings]) {
+      Map? imageDataColorSettings]) {
     if ((data_OR_imagedata_OR_sw is ImageData) &&
         sh_OR_sw == null &&
         imageDataColorSettings_OR_sh == null &&
@@ -2314,9 +2639,9 @@
   CanvasGradient createRadialGradient(
       num x0, num y0, num r0, num x1, num y1, num r1) native;
 
-  void drawFocusIfNeeded(element_OR_path, [Element element]) native;
+  void drawFocusIfNeeded(element_OR_path, [Element? element]) native;
 
-  void fill([path_OR_winding, String winding]) native;
+  void fill([path_OR_winding, String? winding]) native;
 
   void fillRect(num x, num y, num width, num height) native;
 
@@ -2341,15 +2666,15 @@
 
   bool isContextLost() native;
 
-  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
+  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String? winding])
       native;
 
-  bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
+  bool isPointInStroke(path_OR_x, num x_OR_y, [num? y]) native;
 
   TextMetrics measureText(String text) native;
 
   void putImageData(ImageData imagedata, int dx, int dy,
-      [int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight]) {
+      [int? dirtyX, int? dirtyY, int? dirtyWidth, int? dirtyHeight]) {
     if (dirtyX == null &&
         dirtyY == null &&
         dirtyWidth == null &&
@@ -2388,15 +2713,15 @@
 
   void scale(num x, num y) native;
 
-  void scrollPathIntoView([Path2D path]) native;
+  void scrollPathIntoView([Path2D? path]) native;
 
   void setTransform(num a, num b, num c, num d, num e, num f) native;
 
-  void stroke([Path2D path]) native;
+  void stroke([Path2D? path]) native;
 
   void strokeRect(num x, num y, num width, num height) native;
 
-  void strokeText(String text, num x, num y, [num maxWidth]) native;
+  void strokeText(String text, num x, num y, [num? maxWidth]) native;
 
   void transform(num a, num b, num c, num d, num e, num f) native;
 
@@ -2731,9 +3056,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String data;
+  String get data => JS("String", "#.data", this);
 
-  final int length;
+  set data(String value) {
+    JS("void", "#.data = #", this, value);
+  }
+
+  int get length => JS("int", "#.length", this);
 
   void appendData(String data) native;
 
@@ -2753,9 +3082,9 @@
 
   // From NonDocumentTypeChildNode
 
-  final Element nextElementSibling;
+  final Element? nextElementSibling;
 
-  final Element previousElementSibling;
+  final Element? previousElementSibling;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2784,15 +3113,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String frameType;
+  String get frameType => JS("String", "#.frameType", this);
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 
-  void postMessage(Object message, [List<Object> transfer]) native;
+  void postMessage(Object message, [List<Object>? transfer]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2809,7 +3138,7 @@
 
   Future get(String id) => promiseToFuture(JS("", "#.get(#)", this, id));
 
-  Future<List<dynamic>> matchAll([Map options]) {
+  Future<List<dynamic>> matchAll([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -2832,7 +3161,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ClipboardEvent(String type, [Map eventInitDict]) {
+  factory ClipboardEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return ClipboardEvent._create_1(type, eventInitDict_1);
@@ -2844,7 +3173,7 @@
   static ClipboardEvent _create_2(type) =>
       JS('ClipboardEvent', 'new ClipboardEvent(#)', type);
 
-  final DataTransfer clipboardData;
+  final DataTransfer? clipboardData;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2857,7 +3186,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory CloseEvent(String type, [Map eventInitDict]) {
+  factory CloseEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return CloseEvent._create_1(type, eventInitDict_1);
@@ -2869,11 +3198,11 @@
   static CloseEvent _create_2(type) =>
       JS('CloseEvent', 'new CloseEvent(#)', type);
 
-  final int code;
+  int get code => JS("int", "#.code", this);
 
-  final String reason;
+  String get reason => JS("String", "#.reason", this);
 
-  final bool wasClean;
+  bool get wasClean => JS("bool", "#.wasClean", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2920,7 +3249,7 @@
     return e;
   }
 
-  factory CompositionEvent._(String type, [Map eventInitDict]) {
+  factory CompositionEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return CompositionEvent._create_1(type, eventInitDict_1);
@@ -2932,11 +3261,11 @@
   static CompositionEvent _create_2(type) =>
       JS('CompositionEvent', 'new CompositionEvent(#)', type);
 
-  final String data;
+  String get data => JS("String", "#.data", this);
 
   @JSName('initCompositionEvent')
   void _initCompositionEvent(String type, bool bubbles, bool cancelable,
-      Window view, String data) native;
+      Window? view, String data) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2950,7 +3279,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ContentElement() => document.createElement("content");
+  factory ContentElement() =>
+      document.createElement("content") as ContentElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2961,7 +3291,11 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('content');
 
-  String select;
+  String get select => JS("String", "#.select", this);
+
+  set select(String value) {
+    JS("void", "#.select = #", this, value);
+  }
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
@@ -2978,7 +3312,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  Future getAll([Map options]) {
+  Future getAll([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -2986,7 +3320,7 @@
     return promiseToFuture(JS("", "#.getAll(#)", this, options_dict));
   }
 
-  Future set(String name, String value, [Map options]) {
+  Future set(String name, String value, [Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -3006,7 +3340,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num accuracy;
+  num get accuracy => JS("num", "#.accuracy", this);
 
   final num altitude;
 
@@ -3014,9 +3348,9 @@
 
   final num heading;
 
-  final num latitude;
+  num get latitude => JS("num", "#.latitude", this);
 
-  final num longitude;
+  num get longitude => JS("num", "#.longitude", this);
 
   final num speed;
 }
@@ -3031,9 +3365,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3047,9 +3381,9 @@
   }
 
   @JSName('iconURL')
-  final String iconUrl;
+  String get iconUrl => JS("String", "#.iconURL", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3062,7 +3396,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  Future create([Map options]) {
+  Future create([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -3070,7 +3404,7 @@
     return promiseToFuture(JS("", "#.create(#)", this, options_dict));
   }
 
-  Future get([Map options]) {
+  Future get([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -3108,7 +3442,7 @@
   static bool get supported =>
       JS('bool', '!!(window.crypto && window.crypto.getRandomValues)');
 
-  final _SubtleCrypto subtle;
+  _SubtleCrypto get subtle => JS("_SubtleCrypto", "#.subtle", this);
 
   @JSName('getRandomValues')
   @Creates('TypedData')
@@ -3127,13 +3461,13 @@
   }
 
   @Creates('Null')
-  final Object algorithm;
+  Object get algorithm => JS("Object", "#.algorithm", this);
 
-  final bool extractable;
+  bool get extractable => JS("bool", "#.extractable", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  final Object usages;
+  Object get usages => JS("Object", "#.usages", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3146,7 +3480,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  static final _Worklet paintWorklet;
+  _Worklet get paintWorklet => JS("_Worklet", "#.paintWorklet", this);
 
   static CssUnitValue Hz(num value) native;
 
@@ -3232,7 +3566,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String encoding;
+  String get encoding => JS("String", "#.encoding", this);
+
+  set encoding(String value) {
+    JS("void", "#.encoding = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3245,7 +3583,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String conditionText;
+  String get conditionText => JS("String", "#.conditionText", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3258,7 +3596,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final CssStyleDeclaration style;
+  CssStyleDeclaration get style => JS("CssStyleDeclaration", "#.style", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3273,7 +3611,7 @@
 
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
-  final List<CssRule> cssRules;
+  List<CssRule> get cssRules => JS("_CssRuleList", "#.cssRules", this);
 
   void deleteRule(int index) native;
 
@@ -3307,11 +3645,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String href;
+  String get href => JS("String", "#.href", this);
 
-  final MediaList media;
+  MediaList get media => JS("MediaList", "#.media", this);
 
-  final CssStyleSheet styleSheet;
+  CssStyleSheet get styleSheet => JS("CssStyleSheet", "#.styleSheet", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3324,9 +3662,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String keyText;
+  String get keyText => JS("String", "#.keyText", this);
 
-  final CssStyleDeclaration style;
+  set keyText(String value) {
+    JS("void", "#.keyText = #", this, value);
+  }
+
+  CssStyleDeclaration get style => JS("CssStyleDeclaration", "#.style", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3341,9 +3683,13 @@
 
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
-  final List<CssRule> cssRules;
+  List<CssRule> get cssRules => JS("_CssRuleList", "#.cssRules", this);
 
-  String name;
+  String get name => JS("String", "#.name", this);
+
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
   CssKeyframeRule __getter__(int index) native;
 
@@ -3370,7 +3716,11 @@
   static CssKeywordValue _create_1(keyword) =>
       JS('CssKeywordValue', 'new CSSKeywordValue(#)', keyword);
 
-  String value;
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3383,7 +3733,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory CssMatrixComponent(DomMatrixReadOnly matrix, [Map options]) {
+  factory CssMatrixComponent(DomMatrixReadOnly matrix, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return CssMatrixComponent._create_1(matrix, options_1);
@@ -3395,7 +3745,11 @@
   static CssMatrixComponent _create_2(matrix) =>
       JS('CssMatrixComponent', 'new CSSMatrixComponent(#)', matrix);
 
-  DomMatrix matrix;
+  DomMatrix get matrix => JS("DomMatrix", "#.matrix", this);
+
+  set matrix(DomMatrix value) {
+    JS("void", "#.matrix = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3408,7 +3762,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final MediaList media;
+  MediaList get media => JS("MediaList", "#.media", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3422,9 +3776,9 @@
   }
 
   @JSName('namespaceURI')
-  final String namespaceUri;
+  String get namespaceUri => JS("String", "#.namespaceURI", this);
 
-  final String prefix;
+  String get prefix => JS("String", "#.prefix", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3460,9 +3814,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String selectorText;
+  String get selectorText => JS("String", "#.selectorText", this);
 
-  final CssStyleDeclaration style;
+  set selectorText(String value) {
+    JS("void", "#.selectorText = #", this, value);
+  }
+
+  CssStyleDeclaration get style => JS("CssStyleDeclaration", "#.style", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3481,7 +3839,11 @@
   static CssPerspective _create_1(length) =>
       JS('CssPerspective', 'new CSSPerspective(#)', length);
 
-  CssNumericValue length;
+  CssNumericValue get length => JS("CssNumericValue", "#.length", this);
+
+  set length(CssNumericValue value) {
+    JS("void", "#.length = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3500,9 +3862,17 @@
   static CssPositionValue _create_1(x, y) =>
       JS('CssPositionValue', 'new CSSPositionValue(#,#)', x, y);
 
-  CssNumericValue x;
+  CssNumericValue get x => JS("CssNumericValue", "#.x", this);
 
-  CssNumericValue y;
+  set x(CssNumericValue value) {
+    JS("void", "#.x = #", this, value);
+  }
+
+  CssNumericValue get y => JS("CssNumericValue", "#.y", this);
+
+  set y(CssNumericValue value) {
+    JS("void", "#.y = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3515,7 +3885,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3528,7 +3898,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory CssRotation(angleValue_OR_x, [num y, num z, CssNumericValue angle]) {
+  factory CssRotation(angleValue_OR_x,
+      [num? y, num? z, CssNumericValue? angle]) {
     if ((angleValue_OR_x is CssNumericValue) &&
         y == null &&
         z == null &&
@@ -3548,13 +3919,29 @@
   static CssRotation _create_2(angleValue_OR_x, y, z, angle) => JS(
       'CssRotation', 'new CSSRotation(#,#,#,#)', angleValue_OR_x, y, z, angle);
 
-  CssNumericValue angle;
+  CssNumericValue get angle => JS("CssNumericValue", "#.angle", this);
 
-  num x;
+  set angle(CssNumericValue value) {
+    JS("void", "#.angle = #", this, value);
+  }
 
-  num y;
+  num get x => JS("num", "#.x", this);
 
-  num z;
+  set x(num value) {
+    JS("void", "#.x = #", this, value);
+  }
+
+  num get y => JS("num", "#.y", this);
+
+  set y(num value) {
+    JS("void", "#.y = #", this, value);
+  }
+
+  num get z => JS("num", "#.z", this);
+
+  set z(num value) {
+    JS("void", "#.z = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3589,13 +3976,17 @@
 
   static const int VIEWPORT_RULE = 15;
 
-  String cssText;
+  String get cssText => JS("String", "#.cssText", this);
 
-  final CssRule parentRule;
+  set cssText(String value) {
+    JS("void", "#.cssText = #", this, value);
+  }
 
-  final CssStyleSheet parentStyleSheet;
+  final CssRule? parentRule;
 
-  final int type;
+  final CssStyleSheet? parentStyleSheet;
+
+  int get type => JS("int", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3608,7 +3999,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory CssScale(num x, num y, [num z]) {
+  factory CssScale(num x, num y, [num? z]) {
     if ((y is num) && (x is num) && z == null) {
       return CssScale._create_1(x, y);
     }
@@ -3621,11 +4012,23 @@
   static CssScale _create_2(x, y, z) =>
       JS('CssScale', 'new CSSScale(#,#,#)', x, y, z);
 
-  num x;
+  num get x => JS("num", "#.x", this);
 
-  num y;
+  set x(num value) {
+    JS("void", "#.x = #", this, value);
+  }
 
-  num z;
+  num get y => JS("num", "#.y", this);
+
+  set y(num value) {
+    JS("void", "#.y = #", this, value);
+  }
+
+  num get z => JS("num", "#.z", this);
+
+  set z(num value) {
+    JS("void", "#.z = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3643,9 +4046,17 @@
   }
   static CssSkew _create_1(ax, ay) => JS('CssSkew', 'new CSSSkew(#,#)', ax, ay);
 
-  CssNumericValue ax;
+  CssNumericValue get ax => JS("CssNumericValue", "#.ax", this);
 
-  CssNumericValue ay;
+  set ax(CssNumericValue value) {
+    JS("void", "#.ax = #", this, value);
+  }
+
+  CssNumericValue get ay => JS("CssNumericValue", "#.ay", this);
+
+  set ay(CssNumericValue value) {
+    JS("void", "#.ay = #", this, value);
+  }
 }
 
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
@@ -3705,7 +4116,7 @@
   }
 
   String _browserPropertyName(String propertyName) {
-    String name = _readCache(propertyName);
+    String? name = _readCache(propertyName);
     if (name is String) return name;
     name = _supportedBrowserPropertyName(propertyName);
     _writeCache(propertyName, name);
@@ -3725,7 +4136,7 @@
   }
 
   static final _propertyCache = JS('', '{}');
-  static String _readCache(String key) =>
+  static String? _readCache(String key) =>
       JS('String|Null', '#[#]', _propertyCache, key);
   static void _writeCache(String key, String value) {
     JS('void', '#[#] = #', _propertyCache, key, value);
@@ -3740,8 +4151,8 @@
         replacedMs);
   }
 
-  void _setPropertyHelper(String propertyName, String value,
-      [String priority]) {
+  void _setPropertyHelper(String propertyName, String? value,
+      [String? priority]) {
     if (value == null) value = '';
     if (priority == null) priority = '';
     JS('void', '#.setProperty(#, #, #)', this, propertyName, value, priority);
@@ -3759,13 +4170,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String cssFloat;
+  String get cssFloat => JS("String", "#.cssFloat", this);
 
-  String cssText;
+  set cssFloat(String value) {
+    JS("void", "#.cssFloat = #", this, value);
+  }
 
-  final int length;
+  String get cssText => JS("String", "#.cssText", this);
 
-  final CssRule parentRule;
+  set cssText(String value) {
+    JS("void", "#.cssText = #", this, value);
+  }
+
+  int get length => JS("int", "#.length", this);
+
+  final CssRule? parentRule;
 
   String getPropertyPriority(String property) native;
 
@@ -3780,7 +4199,7 @@
   String get background => this._background;
 
   /** Sets the value of "background" */
-  set background(String value) {
+  set background(String? value) {
     _background = value == null ? '' : value;
   }
 
@@ -3792,7 +4211,7 @@
   String get backgroundAttachment => this._backgroundAttachment;
 
   /** Sets the value of "background-attachment" */
-  set backgroundAttachment(String value) {
+  set backgroundAttachment(String? value) {
     _backgroundAttachment = value == null ? '' : value;
   }
 
@@ -3804,7 +4223,7 @@
   String get backgroundColor => this._backgroundColor;
 
   /** Sets the value of "background-color" */
-  set backgroundColor(String value) {
+  set backgroundColor(String? value) {
     _backgroundColor = value == null ? '' : value;
   }
 
@@ -3816,7 +4235,7 @@
   String get backgroundImage => this._backgroundImage;
 
   /** Sets the value of "background-image" */
-  set backgroundImage(String value) {
+  set backgroundImage(String? value) {
     _backgroundImage = value == null ? '' : value;
   }
 
@@ -3828,7 +4247,7 @@
   String get backgroundPosition => this._backgroundPosition;
 
   /** Sets the value of "background-position" */
-  set backgroundPosition(String value) {
+  set backgroundPosition(String? value) {
     _backgroundPosition = value == null ? '' : value;
   }
 
@@ -3840,7 +4259,7 @@
   String get backgroundRepeat => this._backgroundRepeat;
 
   /** Sets the value of "background-repeat" */
-  set backgroundRepeat(String value) {
+  set backgroundRepeat(String? value) {
     _backgroundRepeat = value == null ? '' : value;
   }
 
@@ -3852,7 +4271,7 @@
   String get border => this._border;
 
   /** Sets the value of "border" */
-  set border(String value) {
+  set border(String? value) {
     _border = value == null ? '' : value;
   }
 
@@ -3864,7 +4283,7 @@
   String get borderBottom => this._borderBottom;
 
   /** Sets the value of "border-bottom" */
-  set borderBottom(String value) {
+  set borderBottom(String? value) {
     _borderBottom = value == null ? '' : value;
   }
 
@@ -3876,7 +4295,7 @@
   String get borderBottomColor => this._borderBottomColor;
 
   /** Sets the value of "border-bottom-color" */
-  set borderBottomColor(String value) {
+  set borderBottomColor(String? value) {
     _borderBottomColor = value == null ? '' : value;
   }
 
@@ -3888,7 +4307,7 @@
   String get borderBottomStyle => this._borderBottomStyle;
 
   /** Sets the value of "border-bottom-style" */
-  set borderBottomStyle(String value) {
+  set borderBottomStyle(String? value) {
     _borderBottomStyle = value == null ? '' : value;
   }
 
@@ -3900,7 +4319,7 @@
   String get borderBottomWidth => this._borderBottomWidth;
 
   /** Sets the value of "border-bottom-width" */
-  set borderBottomWidth(String value) {
+  set borderBottomWidth(String? value) {
     _borderBottomWidth = value == null ? '' : value;
   }
 
@@ -3912,7 +4331,7 @@
   String get borderCollapse => this._borderCollapse;
 
   /** Sets the value of "border-collapse" */
-  set borderCollapse(String value) {
+  set borderCollapse(String? value) {
     _borderCollapse = value == null ? '' : value;
   }
 
@@ -3924,7 +4343,7 @@
   String get borderColor => this._borderColor;
 
   /** Sets the value of "border-color" */
-  set borderColor(String value) {
+  set borderColor(String? value) {
     _borderColor = value == null ? '' : value;
   }
 
@@ -3936,7 +4355,7 @@
   String get borderLeft => this._borderLeft;
 
   /** Sets the value of "border-left" */
-  set borderLeft(String value) {
+  set borderLeft(String? value) {
     _borderLeft = value == null ? '' : value;
   }
 
@@ -3948,7 +4367,7 @@
   String get borderLeftColor => this._borderLeftColor;
 
   /** Sets the value of "border-left-color" */
-  set borderLeftColor(String value) {
+  set borderLeftColor(String? value) {
     _borderLeftColor = value == null ? '' : value;
   }
 
@@ -3960,7 +4379,7 @@
   String get borderLeftStyle => this._borderLeftStyle;
 
   /** Sets the value of "border-left-style" */
-  set borderLeftStyle(String value) {
+  set borderLeftStyle(String? value) {
     _borderLeftStyle = value == null ? '' : value;
   }
 
@@ -3972,7 +4391,7 @@
   String get borderLeftWidth => this._borderLeftWidth;
 
   /** Sets the value of "border-left-width" */
-  set borderLeftWidth(String value) {
+  set borderLeftWidth(String? value) {
     _borderLeftWidth = value == null ? '' : value;
   }
 
@@ -3984,7 +4403,7 @@
   String get borderRight => this._borderRight;
 
   /** Sets the value of "border-right" */
-  set borderRight(String value) {
+  set borderRight(String? value) {
     _borderRight = value == null ? '' : value;
   }
 
@@ -3996,7 +4415,7 @@
   String get borderRightColor => this._borderRightColor;
 
   /** Sets the value of "border-right-color" */
-  set borderRightColor(String value) {
+  set borderRightColor(String? value) {
     _borderRightColor = value == null ? '' : value;
   }
 
@@ -4008,7 +4427,7 @@
   String get borderRightStyle => this._borderRightStyle;
 
   /** Sets the value of "border-right-style" */
-  set borderRightStyle(String value) {
+  set borderRightStyle(String? value) {
     _borderRightStyle = value == null ? '' : value;
   }
 
@@ -4020,7 +4439,7 @@
   String get borderRightWidth => this._borderRightWidth;
 
   /** Sets the value of "border-right-width" */
-  set borderRightWidth(String value) {
+  set borderRightWidth(String? value) {
     _borderRightWidth = value == null ? '' : value;
   }
 
@@ -4032,7 +4451,7 @@
   String get borderSpacing => this._borderSpacing;
 
   /** Sets the value of "border-spacing" */
-  set borderSpacing(String value) {
+  set borderSpacing(String? value) {
     _borderSpacing = value == null ? '' : value;
   }
 
@@ -4044,7 +4463,7 @@
   String get borderStyle => this._borderStyle;
 
   /** Sets the value of "border-style" */
-  set borderStyle(String value) {
+  set borderStyle(String? value) {
     _borderStyle = value == null ? '' : value;
   }
 
@@ -4056,7 +4475,7 @@
   String get borderTop => this._borderTop;
 
   /** Sets the value of "border-top" */
-  set borderTop(String value) {
+  set borderTop(String? value) {
     _borderTop = value == null ? '' : value;
   }
 
@@ -4068,7 +4487,7 @@
   String get borderTopColor => this._borderTopColor;
 
   /** Sets the value of "border-top-color" */
-  set borderTopColor(String value) {
+  set borderTopColor(String? value) {
     _borderTopColor = value == null ? '' : value;
   }
 
@@ -4080,7 +4499,7 @@
   String get borderTopStyle => this._borderTopStyle;
 
   /** Sets the value of "border-top-style" */
-  set borderTopStyle(String value) {
+  set borderTopStyle(String? value) {
     _borderTopStyle = value == null ? '' : value;
   }
 
@@ -4092,7 +4511,7 @@
   String get borderTopWidth => this._borderTopWidth;
 
   /** Sets the value of "border-top-width" */
-  set borderTopWidth(String value) {
+  set borderTopWidth(String? value) {
     _borderTopWidth = value == null ? '' : value;
   }
 
@@ -4104,7 +4523,7 @@
   String get borderWidth => this._borderWidth;
 
   /** Sets the value of "border-width" */
-  set borderWidth(String value) {
+  set borderWidth(String? value) {
     _borderWidth = value == null ? '' : value;
   }
 
@@ -4116,7 +4535,7 @@
   String get bottom => this._bottom;
 
   /** Sets the value of "bottom" */
-  set bottom(String value) {
+  set bottom(String? value) {
     _bottom = value == null ? '' : value;
   }
 
@@ -4128,7 +4547,7 @@
   String get captionSide => this._captionSide;
 
   /** Sets the value of "caption-side" */
-  set captionSide(String value) {
+  set captionSide(String? value) {
     _captionSide = value == null ? '' : value;
   }
 
@@ -4140,7 +4559,7 @@
   String get clear => this._clear;
 
   /** Sets the value of "clear" */
-  set clear(String value) {
+  set clear(String? value) {
     _clear = value == null ? '' : value;
   }
 
@@ -4152,7 +4571,7 @@
   String get clip => this._clip;
 
   /** Sets the value of "clip" */
-  set clip(String value) {
+  set clip(String? value) {
     _clip = value == null ? '' : value;
   }
 
@@ -4164,7 +4583,7 @@
   String get color => this._color;
 
   /** Sets the value of "color" */
-  set color(String value) {
+  set color(String? value) {
     _color = value == null ? '' : value;
   }
 
@@ -4176,7 +4595,7 @@
   String get content => this._content;
 
   /** Sets the value of "content" */
-  set content(String value) {
+  set content(String? value) {
     _content = value == null ? '' : value;
   }
 
@@ -4188,7 +4607,7 @@
   String get cursor => this._cursor;
 
   /** Sets the value of "cursor" */
-  set cursor(String value) {
+  set cursor(String? value) {
     _cursor = value == null ? '' : value;
   }
 
@@ -4200,7 +4619,7 @@
   String get direction => this._direction;
 
   /** Sets the value of "direction" */
-  set direction(String value) {
+  set direction(String? value) {
     _direction = value == null ? '' : value;
   }
 
@@ -4212,7 +4631,7 @@
   String get display => this._display;
 
   /** Sets the value of "display" */
-  set display(String value) {
+  set display(String? value) {
     _display = value == null ? '' : value;
   }
 
@@ -4224,7 +4643,7 @@
   String get emptyCells => this._emptyCells;
 
   /** Sets the value of "empty-cells" */
-  set emptyCells(String value) {
+  set emptyCells(String? value) {
     _emptyCells = value == null ? '' : value;
   }
 
@@ -4236,7 +4655,7 @@
   String get font => this._font;
 
   /** Sets the value of "font" */
-  set font(String value) {
+  set font(String? value) {
     _font = value == null ? '' : value;
   }
 
@@ -4248,7 +4667,7 @@
   String get fontFamily => this._fontFamily;
 
   /** Sets the value of "font-family" */
-  set fontFamily(String value) {
+  set fontFamily(String? value) {
     _fontFamily = value == null ? '' : value;
   }
 
@@ -4260,7 +4679,7 @@
   String get fontSize => this._fontSize;
 
   /** Sets the value of "font-size" */
-  set fontSize(String value) {
+  set fontSize(String? value) {
     _fontSize = value == null ? '' : value;
   }
 
@@ -4272,7 +4691,7 @@
   String get fontStyle => this._fontStyle;
 
   /** Sets the value of "font-style" */
-  set fontStyle(String value) {
+  set fontStyle(String? value) {
     _fontStyle = value == null ? '' : value;
   }
 
@@ -4284,7 +4703,7 @@
   String get fontVariant => this._fontVariant;
 
   /** Sets the value of "font-variant" */
-  set fontVariant(String value) {
+  set fontVariant(String? value) {
     _fontVariant = value == null ? '' : value;
   }
 
@@ -4296,7 +4715,7 @@
   String get fontWeight => this._fontWeight;
 
   /** Sets the value of "font-weight" */
-  set fontWeight(String value) {
+  set fontWeight(String? value) {
     _fontWeight = value == null ? '' : value;
   }
 
@@ -4308,7 +4727,7 @@
   String get height => this._height;
 
   /** Sets the value of "height" */
-  set height(String value) {
+  set height(String? value) {
     _height = value == null ? '' : value;
   }
 
@@ -4320,7 +4739,7 @@
   String get left => this._left;
 
   /** Sets the value of "left" */
-  set left(String value) {
+  set left(String? value) {
     _left = value == null ? '' : value;
   }
 
@@ -4332,7 +4751,7 @@
   String get letterSpacing => this._letterSpacing;
 
   /** Sets the value of "letter-spacing" */
-  set letterSpacing(String value) {
+  set letterSpacing(String? value) {
     _letterSpacing = value == null ? '' : value;
   }
 
@@ -4344,7 +4763,7 @@
   String get lineHeight => this._lineHeight;
 
   /** Sets the value of "line-height" */
-  set lineHeight(String value) {
+  set lineHeight(String? value) {
     _lineHeight = value == null ? '' : value;
   }
 
@@ -4356,7 +4775,7 @@
   String get listStyle => this._listStyle;
 
   /** Sets the value of "list-style" */
-  set listStyle(String value) {
+  set listStyle(String? value) {
     _listStyle = value == null ? '' : value;
   }
 
@@ -4368,7 +4787,7 @@
   String get listStyleImage => this._listStyleImage;
 
   /** Sets the value of "list-style-image" */
-  set listStyleImage(String value) {
+  set listStyleImage(String? value) {
     _listStyleImage = value == null ? '' : value;
   }
 
@@ -4380,7 +4799,7 @@
   String get listStylePosition => this._listStylePosition;
 
   /** Sets the value of "list-style-position" */
-  set listStylePosition(String value) {
+  set listStylePosition(String? value) {
     _listStylePosition = value == null ? '' : value;
   }
 
@@ -4392,7 +4811,7 @@
   String get listStyleType => this._listStyleType;
 
   /** Sets the value of "list-style-type" */
-  set listStyleType(String value) {
+  set listStyleType(String? value) {
     _listStyleType = value == null ? '' : value;
   }
 
@@ -4404,7 +4823,7 @@
   String get margin => this._margin;
 
   /** Sets the value of "margin" */
-  set margin(String value) {
+  set margin(String? value) {
     _margin = value == null ? '' : value;
   }
 
@@ -4416,7 +4835,7 @@
   String get marginBottom => this._marginBottom;
 
   /** Sets the value of "margin-bottom" */
-  set marginBottom(String value) {
+  set marginBottom(String? value) {
     _marginBottom = value == null ? '' : value;
   }
 
@@ -4428,7 +4847,7 @@
   String get marginLeft => this._marginLeft;
 
   /** Sets the value of "margin-left" */
-  set marginLeft(String value) {
+  set marginLeft(String? value) {
     _marginLeft = value == null ? '' : value;
   }
 
@@ -4440,7 +4859,7 @@
   String get marginRight => this._marginRight;
 
   /** Sets the value of "margin-right" */
-  set marginRight(String value) {
+  set marginRight(String? value) {
     _marginRight = value == null ? '' : value;
   }
 
@@ -4452,7 +4871,7 @@
   String get marginTop => this._marginTop;
 
   /** Sets the value of "margin-top" */
-  set marginTop(String value) {
+  set marginTop(String? value) {
     _marginTop = value == null ? '' : value;
   }
 
@@ -4464,7 +4883,7 @@
   String get maxHeight => this._maxHeight;
 
   /** Sets the value of "max-height" */
-  set maxHeight(String value) {
+  set maxHeight(String? value) {
     _maxHeight = value == null ? '' : value;
   }
 
@@ -4476,7 +4895,7 @@
   String get maxWidth => this._maxWidth;
 
   /** Sets the value of "max-width" */
-  set maxWidth(String value) {
+  set maxWidth(String? value) {
     _maxWidth = value == null ? '' : value;
   }
 
@@ -4488,7 +4907,7 @@
   String get minHeight => this._minHeight;
 
   /** Sets the value of "min-height" */
-  set minHeight(String value) {
+  set minHeight(String? value) {
     _minHeight = value == null ? '' : value;
   }
 
@@ -4500,7 +4919,7 @@
   String get minWidth => this._minWidth;
 
   /** Sets the value of "min-width" */
-  set minWidth(String value) {
+  set minWidth(String? value) {
     _minWidth = value == null ? '' : value;
   }
 
@@ -4512,7 +4931,7 @@
   String get outline => this._outline;
 
   /** Sets the value of "outline" */
-  set outline(String value) {
+  set outline(String? value) {
     _outline = value == null ? '' : value;
   }
 
@@ -4524,7 +4943,7 @@
   String get outlineColor => this._outlineColor;
 
   /** Sets the value of "outline-color" */
-  set outlineColor(String value) {
+  set outlineColor(String? value) {
     _outlineColor = value == null ? '' : value;
   }
 
@@ -4536,7 +4955,7 @@
   String get outlineStyle => this._outlineStyle;
 
   /** Sets the value of "outline-style" */
-  set outlineStyle(String value) {
+  set outlineStyle(String? value) {
     _outlineStyle = value == null ? '' : value;
   }
 
@@ -4548,7 +4967,7 @@
   String get outlineWidth => this._outlineWidth;
 
   /** Sets the value of "outline-width" */
-  set outlineWidth(String value) {
+  set outlineWidth(String? value) {
     _outlineWidth = value == null ? '' : value;
   }
 
@@ -4560,7 +4979,7 @@
   String get overflow => this._overflow;
 
   /** Sets the value of "overflow" */
-  set overflow(String value) {
+  set overflow(String? value) {
     _overflow = value == null ? '' : value;
   }
 
@@ -4572,7 +4991,7 @@
   String get padding => this._padding;
 
   /** Sets the value of "padding" */
-  set padding(String value) {
+  set padding(String? value) {
     _padding = value == null ? '' : value;
   }
 
@@ -4584,7 +5003,7 @@
   String get paddingBottom => this._paddingBottom;
 
   /** Sets the value of "padding-bottom" */
-  set paddingBottom(String value) {
+  set paddingBottom(String? value) {
     _paddingBottom = value == null ? '' : value;
   }
 
@@ -4596,7 +5015,7 @@
   String get paddingLeft => this._paddingLeft;
 
   /** Sets the value of "padding-left" */
-  set paddingLeft(String value) {
+  set paddingLeft(String? value) {
     _paddingLeft = value == null ? '' : value;
   }
 
@@ -4608,7 +5027,7 @@
   String get paddingRight => this._paddingRight;
 
   /** Sets the value of "padding-right" */
-  set paddingRight(String value) {
+  set paddingRight(String? value) {
     _paddingRight = value == null ? '' : value;
   }
 
@@ -4620,7 +5039,7 @@
   String get paddingTop => this._paddingTop;
 
   /** Sets the value of "padding-top" */
-  set paddingTop(String value) {
+  set paddingTop(String? value) {
     _paddingTop = value == null ? '' : value;
   }
 
@@ -4632,7 +5051,7 @@
   String get pageBreakAfter => this._pageBreakAfter;
 
   /** Sets the value of "page-break-after" */
-  set pageBreakAfter(String value) {
+  set pageBreakAfter(String? value) {
     _pageBreakAfter = value == null ? '' : value;
   }
 
@@ -4644,7 +5063,7 @@
   String get pageBreakBefore => this._pageBreakBefore;
 
   /** Sets the value of "page-break-before" */
-  set pageBreakBefore(String value) {
+  set pageBreakBefore(String? value) {
     _pageBreakBefore = value == null ? '' : value;
   }
 
@@ -4656,7 +5075,7 @@
   String get pageBreakInside => this._pageBreakInside;
 
   /** Sets the value of "page-break-inside" */
-  set pageBreakInside(String value) {
+  set pageBreakInside(String? value) {
     _pageBreakInside = value == null ? '' : value;
   }
 
@@ -4668,7 +5087,7 @@
   String get position => this._position;
 
   /** Sets the value of "position" */
-  set position(String value) {
+  set position(String? value) {
     _position = value == null ? '' : value;
   }
 
@@ -4680,7 +5099,7 @@
   String get quotes => this._quotes;
 
   /** Sets the value of "quotes" */
-  set quotes(String value) {
+  set quotes(String? value) {
     _quotes = value == null ? '' : value;
   }
 
@@ -4692,7 +5111,7 @@
   String get right => this._right;
 
   /** Sets the value of "right" */
-  set right(String value) {
+  set right(String? value) {
     _right = value == null ? '' : value;
   }
 
@@ -4704,7 +5123,7 @@
   String get tableLayout => this._tableLayout;
 
   /** Sets the value of "table-layout" */
-  set tableLayout(String value) {
+  set tableLayout(String? value) {
     _tableLayout = value == null ? '' : value;
   }
 
@@ -4716,7 +5135,7 @@
   String get textAlign => this._textAlign;
 
   /** Sets the value of "text-align" */
-  set textAlign(String value) {
+  set textAlign(String? value) {
     _textAlign = value == null ? '' : value;
   }
 
@@ -4728,7 +5147,7 @@
   String get textDecoration => this._textDecoration;
 
   /** Sets the value of "text-decoration" */
-  set textDecoration(String value) {
+  set textDecoration(String? value) {
     _textDecoration = value == null ? '' : value;
   }
 
@@ -4740,7 +5159,7 @@
   String get textIndent => this._textIndent;
 
   /** Sets the value of "text-indent" */
-  set textIndent(String value) {
+  set textIndent(String? value) {
     _textIndent = value == null ? '' : value;
   }
 
@@ -4752,7 +5171,7 @@
   String get textTransform => this._textTransform;
 
   /** Sets the value of "text-transform" */
-  set textTransform(String value) {
+  set textTransform(String? value) {
     _textTransform = value == null ? '' : value;
   }
 
@@ -4764,7 +5183,7 @@
   String get top => this._top;
 
   /** Sets the value of "top" */
-  set top(String value) {
+  set top(String? value) {
     _top = value == null ? '' : value;
   }
 
@@ -4776,7 +5195,7 @@
   String get unicodeBidi => this._unicodeBidi;
 
   /** Sets the value of "unicode-bidi" */
-  set unicodeBidi(String value) {
+  set unicodeBidi(String? value) {
     _unicodeBidi = value == null ? '' : value;
   }
 
@@ -4788,7 +5207,7 @@
   String get verticalAlign => this._verticalAlign;
 
   /** Sets the value of "vertical-align" */
-  set verticalAlign(String value) {
+  set verticalAlign(String? value) {
     _verticalAlign = value == null ? '' : value;
   }
 
@@ -4800,7 +5219,7 @@
   String get visibility => this._visibility;
 
   /** Sets the value of "visibility" */
-  set visibility(String value) {
+  set visibility(String? value) {
     _visibility = value == null ? '' : value;
   }
 
@@ -4812,7 +5231,7 @@
   String get whiteSpace => this._whiteSpace;
 
   /** Sets the value of "white-space" */
-  set whiteSpace(String value) {
+  set whiteSpace(String? value) {
     _whiteSpace = value == null ? '' : value;
   }
 
@@ -4824,7 +5243,7 @@
   String get width => this._width;
 
   /** Sets the value of "width" */
-  set width(String value) {
+  set width(String? value) {
     _width = value == null ? '' : value;
   }
 
@@ -4836,7 +5255,7 @@
   String get wordSpacing => this._wordSpacing;
 
   /** Sets the value of "word-spacing" */
-  set wordSpacing(String value) {
+  set wordSpacing(String? value) {
     _wordSpacing = value == null ? '' : value;
   }
 
@@ -4848,7 +5267,7 @@
   String get zIndex => this._zIndex;
 
   /** Sets the value of "z-index" */
-  set zIndex(String value) {
+  set zIndex(String? value) {
     _zIndex = value == null ? '' : value;
   }
 
@@ -4875,7 +5294,7 @@
         .forEach((e) => e.setProperty(propertyName, value, priority));
   }
 
-  void _setAll(String propertyName, String value) {
+  void _setAll(String propertyName, String? value) {
     value = value == null ? '' : value;
     for (Element element in _elementIterable) {
       JS('void', '#.style[#] = #', element, propertyName, value);
@@ -8111,9 +8530,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String selectorText;
+  String get selectorText => JS("String", "#.selectorText", this);
 
-  final CssStyleDeclaration style;
+  set selectorText(String value) {
+    JS("void", "#.selectorText = #", this, value);
+  }
+
+  CssStyleDeclaration get style => JS("CssStyleDeclaration", "#.style", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8128,19 +8551,19 @@
 
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
-  final List<CssRule> cssRules;
+  List<CssRule> get cssRules => JS("_CssRuleList", "#.cssRules", this);
 
-  final CssRule ownerRule;
+  final CssRule? ownerRule;
 
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
-  final List<CssRule> rules;
+  List<CssRule> get rules => JS("_CssRuleList", "#.rules", this);
 
-  int addRule(String selector, String style, [int index]) native;
+  int addRule(String selector, String style, [int? index]) native;
 
   void deleteRule(int index) native;
 
-  int insertRule(String rule, [int index]) native;
+  int insertRule(String rule, [int? index]) native;
 
   void removeRule(int index) native;
 }
@@ -8179,7 +8602,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  bool is2D;
+  bool get is2D => JS("bool", "#.is2D", this);
+
+  set is2D(bool value) {
+    JS("void", "#.is2D = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8192,7 +8619,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory CssTransformValue([List<CssTransformComponent> transformComponents]) {
+  factory CssTransformValue(
+      [List<CssTransformComponent>? transformComponents]) {
     if (transformComponents == null) {
       return CssTransformValue._create_1();
     }
@@ -8206,9 +8634,9 @@
   static CssTransformValue _create_2(transformComponents) =>
       JS('CssTransformValue', 'new CSSTransformValue(#)', transformComponents);
 
-  final bool is2D;
+  bool get is2D => JS("bool", "#.is2D", this);
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   CssTransformComponent componentAtIndex(int index) native;
 
@@ -8226,7 +8654,7 @@
   }
 
   factory CssTranslation(CssNumericValue x, CssNumericValue y,
-      [CssNumericValue z]) {
+      [CssNumericValue? z]) {
     if ((y is CssNumericValue) && (x is CssNumericValue) && z == null) {
       return CssTranslation._create_1(x, y);
     }
@@ -8242,11 +8670,23 @@
   static CssTranslation _create_2(x, y, z) =>
       JS('CssTranslation', 'new CSSTranslation(#,#,#)', x, y, z);
 
-  CssNumericValue x;
+  CssNumericValue get x => JS("CssNumericValue", "#.x", this);
 
-  CssNumericValue y;
+  set x(CssNumericValue value) {
+    JS("void", "#.x = #", this, value);
+  }
 
-  CssNumericValue z;
+  CssNumericValue get y => JS("CssNumericValue", "#.y", this);
+
+  set y(CssNumericValue value) {
+    JS("void", "#.y = #", this, value);
+  }
+
+  CssNumericValue get z => JS("CssNumericValue", "#.z", this);
+
+  set z(CssNumericValue value) {
+    JS("void", "#.z = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8265,11 +8705,19 @@
   static CssUnitValue _create_1(value, unit) =>
       JS('CssUnitValue', 'new CSSUnitValue(#,#)', value, unit);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  String unit;
+  String get unit => JS("String", "#.unit", this);
 
-  num value;
+  set unit(String value) {
+    JS("void", "#.unit = #", this, value);
+  }
+
+  num get value => JS("num", "#.value", this);
+
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8282,7 +8730,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   Object fragmentAtIndex(int index) native;
 }
@@ -8297,9 +8745,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final CssUnparsedValue fallback;
+  CssUnparsedValue get fallback => JS("CssUnparsedValue", "#.fallback", this);
 
-  final String variable;
+  String get variable => JS("String", "#.variable", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8312,7 +8760,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final CssStyleDeclaration style;
+  CssStyleDeclaration get style => JS("CssStyleDeclaration", "#.style", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8331,7 +8779,7 @@
   static CssurlImageValue _create_1(url) =>
       JS('CssurlImageValue', 'new CSSURLImageValue(#)', url);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8353,7 +8801,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  void define(String name, Object constructor, [Map options]) {
+  void define(String name, Object constructor, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       _define_1(name, constructor, options_1);
@@ -8413,7 +8861,7 @@
     return _detail;
   }
 
-  factory CustomEvent._(String type, [Map eventInitDict]) {
+  factory CustomEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return CustomEvent._create_1(type, eventInitDict_1);
@@ -8433,7 +8881,7 @@
 
   @JSName('initCustomEvent')
   void _initCustomEvent(String type,
-      [bool bubbles, bool cancelable, Object detail]) native;
+      [bool? bubbles, bool? cancelable, Object? detail]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8446,7 +8894,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DListElement() => JS(
+  factory DListElement() => JS<DListElement>(
       'returns:DListElement;creates:DListElement;new:true',
       '#.createElement(#)',
       document,
@@ -8475,7 +8923,11 @@
    */
   DataElement.created() : super.created();
 
-  String value;
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8492,7 +8944,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DataListElement() => document.createElement("datalist");
+  factory DataListElement() =>
+      document.createElement("datalist") as DataListElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -8505,7 +8958,7 @@
 
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> options;
+  List<Node> get options => JS("HtmlCollection", "#.options", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8523,19 +8976,27 @@
   }
   static DataTransfer _create_1() => JS('DataTransfer', 'new DataTransfer()');
 
-  String dropEffect;
+  String get dropEffect => JS("String", "#.dropEffect", this);
 
-  String effectAllowed;
+  set dropEffect(String value) {
+    JS("void", "#.dropEffect = #", this, value);
+  }
+
+  String get effectAllowed => JS("String", "#.effectAllowed", this);
+
+  set effectAllowed(String value) {
+    JS("void", "#.effectAllowed = #", this, value);
+  }
 
   @Returns('FileList|Null')
   @Creates('FileList')
-  final List<File> files;
+  List<File> get files => JS("FileList", "#.files", this);
 
-  final DataTransferItemList items;
+  DataTransferItemList get items => JS("DataTransferItemList", "#.items", this);
 
-  final List<String> types;
+  List<String> get types => JS("List<String>", "#.types", this);
 
-  void clearData([String format]) native;
+  void clearData([String? format]) native;
 
   String getData(String format) native;
 
@@ -8567,9 +9028,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String kind;
+  String get kind => JS("String", "#.kind", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   File getAsFile() native;
 
@@ -8589,9 +9050,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  DataTransferItem add(data_OR_file, [String type]) native;
+  DataTransferItem add(data_OR_file, [String? type]) native;
 
   @JSName('add')
   DataTransferItem addData(String data, String type) native;
@@ -8656,7 +9117,7 @@
 
   void close() native;
 
-  void postMessage(/*any*/ message, [List<Object> transfer]) {
+  void postMessage(/*any*/ message, [List<Object>? transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, transfer);
@@ -8676,8 +9137,8 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   void _webkitRequestFileSystem(int type, int size,
-      [_FileSystemCallback successCallback,
-      _ErrorCallback errorCallback]) native;
+      [_FileSystemCallback? successCallback,
+      _ErrorCallback? errorCallback]) native;
 
   @JSName('webkitRequestFileSystemSync')
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -8694,7 +9155,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   void _webkitResolveLocalFileSystemUrl(
       String url, _EntryCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   /// Stream of `message` events handled by this [DedicatedWorkerGlobalScope].
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
@@ -8720,12 +9181,12 @@
   static const int TEMPORARY = 0;
 
   void queryUsageAndQuota(int storageType,
-      [StorageUsageCallback usageCallback,
-      StorageErrorCallback errorCallback]) native;
+      [StorageUsageCallback? usageCallback,
+      StorageErrorCallback? errorCallback]) native;
 
   void requestQuota(int storageType, int newQuotaInBytes,
-      [StorageQuotaCallback quotaCallback,
-      StorageErrorCallback errorCallback]) native;
+      [StorageQuotaCallback? quotaCallback,
+      StorageErrorCallback? errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8739,11 +9200,11 @@
   }
 
   void queryUsageAndQuota(StorageUsageCallback usageCallback,
-      [StorageErrorCallback errorCallback]) native;
+      [StorageErrorCallback? errorCallback]) native;
 
   void requestQuota(int newQuotaInBytes,
-      [StorageQuotaCallback quotaCallback,
-      StorageErrorCallback errorCallback]) native;
+      [StorageQuotaCallback? quotaCallback,
+      StorageErrorCallback? errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8756,11 +9217,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int lineNumber;
+  int get lineNumber => JS("int", "#.lineNumber", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
-  final String sourceFile;
+  String get sourceFile => JS("String", "#.sourceFile", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8775,7 +9236,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DetailsElement() => document.createElement("details");
+  factory DetailsElement() =>
+      document.createElement("details") as DetailsElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -8786,7 +9248,11 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('details');
 
-  bool open;
+  bool get open => JS("bool", "#.open", this);
+
+  set open(bool value) {
+    JS("void", "#.open = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8805,11 +9271,11 @@
   static DetectedBarcode _create_1() =>
       JS('DetectedBarcode', 'new DetectedBarcode()');
 
-  final Rectangle boundingBox;
+  Rectangle get boundingBox => JS("Rectangle", "#.boundingBox", this);
 
-  final List cornerPoints;
+  List get cornerPoints => JS("List", "#.cornerPoints", this);
 
-  final String rawValue;
+  String get rawValue => JS("String", "#.rawValue", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8827,9 +9293,9 @@
   }
   static DetectedFace _create_1() => JS('DetectedFace', 'new DetectedFace()');
 
-  final Rectangle boundingBox;
+  Rectangle get boundingBox => JS("Rectangle", "#.boundingBox", this);
 
-  final List landmarks;
+  List get landmarks => JS("List", "#.landmarks", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8847,11 +9313,11 @@
   }
   static DetectedText _create_1() => JS('DetectedText', 'new DetectedText()');
 
-  final Rectangle boundingBox;
+  Rectangle get boundingBox => JS("Rectangle", "#.boundingBox", this);
 
-  final List cornerPoints;
+  List get cornerPoints => JS("List", "#.cornerPoints", this);
 
-  final String rawValue;
+  String get rawValue => JS("String", "#.rawValue", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8881,7 +9347,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DeviceMotionEvent(String type, [Map eventInitDict]) {
+  factory DeviceMotionEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return DeviceMotionEvent._create_1(type, eventInitDict_1);
@@ -8893,13 +9359,13 @@
   static DeviceMotionEvent _create_2(type) =>
       JS('DeviceMotionEvent', 'new DeviceMotionEvent(#)', type);
 
-  final DeviceAcceleration acceleration;
+  final DeviceAcceleration? acceleration;
 
-  final DeviceAcceleration accelerationIncludingGravity;
+  final DeviceAcceleration? accelerationIncludingGravity;
 
-  final num interval;
+  num get interval => JS("num", "#.interval", this);
 
-  final DeviceRotationRate rotationRate;
+  final DeviceRotationRate? rotationRate;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -8912,7 +9378,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DeviceOrientationEvent(String type, [Map eventInitDict]) {
+  factory DeviceOrientationEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return DeviceOrientationEvent._create_1(type, eventInitDict_1);
@@ -8927,7 +9393,7 @@
   static DeviceOrientationEvent _create_2(type) =>
       JS('DeviceOrientationEvent', 'new DeviceOrientationEvent(#)', type);
 
-  final bool absolute;
+  bool get absolute => JS("bool", "#.absolute", this);
 
   final num alpha;
 
@@ -8970,11 +9436,19 @@
    */
   DialogElement.created() : super.created();
 
-  bool open;
+  bool get open => JS("bool", "#.open", this);
 
-  String returnValue;
+  set open(bool value) {
+    JS("void", "#.open = #", this, value);
+  }
 
-  void close([String returnValue]) native;
+  String get returnValue => JS("String", "#.returnValue", this);
+
+  set returnValue(String value) {
+    JS("void", "#.returnValue = #", this, value);
+  }
+
+  void close([String? returnValue]) native;
 
   void show() native;
 
@@ -9037,10 +9511,10 @@
   @JSName('createReader')
   DirectoryReader _createReader() native;
 
-  void __getDirectory(String path,
-      [Map options,
-      _EntryCallback successCallback,
-      _ErrorCallback errorCallback]) {
+  void __getDirectory(String? path,
+      [Map? options,
+      _EntryCallback? successCallback,
+      _ErrorCallback? errorCallback]) {
     if (errorCallback != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       __getDirectory_1(path, options_1, successCallback, errorCallback);
@@ -9071,7 +9545,7 @@
   void __getDirectory_4(path) native;
 
   @JSName('getDirectory')
-  Future<Entry> _getDirectory(String path, {Map options}) {
+  Future<Entry> _getDirectory(String? path, {Map? options}) {
     var completer = new Completer<Entry>();
     __getDirectory(path, options, (value) {
       completer.complete(value);
@@ -9081,10 +9555,10 @@
     return completer.future;
   }
 
-  void __getFile(String path,
-      [Map options,
-      _EntryCallback successCallback,
-      _ErrorCallback errorCallback]) {
+  void __getFile(String? path,
+      [Map? options,
+      _EntryCallback? successCallback,
+      _ErrorCallback? errorCallback]) {
     if (errorCallback != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       __getFile_1(path, options_1, successCallback, errorCallback);
@@ -9115,7 +9589,7 @@
   void __getFile_4(path) native;
 
   @JSName('getFile')
-  Future<Entry> _getFile(String path, {Map options}) {
+  Future<Entry> _getFile(String? path, {Map? options}) {
     var completer = new Completer<Entry>();
     __getFile(path, options, (value) {
       applyExtension('FileEntry', value);
@@ -9128,7 +9602,7 @@
 
   @JSName('removeRecursively')
   void _removeRecursively(VoidCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   @JSName('removeRecursively')
   Future removeRecursively() {
@@ -9154,7 +9628,7 @@
 
   @JSName('readEntries')
   void _readEntries(_EntriesCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   Future<List<Entry>> readEntries() {
     var completer = new Completer<List<Entry>>();
@@ -9207,8 +9681,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DivElement() => JS('returns:DivElement;creates:DivElement;new:true',
-      '#.createElement(#)', document, "div");
+  factory DivElement() => JS<DivElement>(
+      'returns:DivElement;creates:DivElement;new:true',
+      '#.createElement(#)',
+      document,
+      "div");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -9276,18 +9753,22 @@
   }
   static Document _create_1() => JS('Document', 'new Document()');
 
-  final String addressSpace;
+  String get addressSpace => JS("String", "#.addressSpace", this);
 
   @JSName('body')
-  HtmlElement _body;
+  HtmlElement? _body;
 
-  final String contentType;
+  String get contentType => JS("String", "#.contentType", this);
 
-  String cookie;
+  String get cookie => JS("String", "#.cookie", this);
 
-  final ScriptElement currentScript;
+  set cookie(String value) {
+    JS("void", "#.cookie = #", this, value);
+  }
 
-  WindowBase get window => _convertNativeToDart_Window(this._get_window);
+  final ScriptElement? currentScript;
+
+  WindowBase? get window => _convertNativeToDart_Window(this._get_window);
   @JSName('defaultView')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
@@ -9295,70 +9776,79 @@
   @Returns('Window|=Object|Null')
   final dynamic _get_window;
 
-  final Element documentElement;
+  final Element? documentElement;
 
-  final String domain;
+  String get domain => JS("String", "#.domain", this);
 
-  final bool fullscreenEnabled;
+  bool get fullscreenEnabled => JS("bool", "#.fullscreenEnabled", this);
 
   @JSName('head')
-  final HeadElement _head;
+  final HeadElement? _head;
 
-  final bool hidden;
+  bool get hidden => JS("bool", "#.hidden", this);
 
-  final DomImplementation implementation;
+  DomImplementation get implementation =>
+      JS("DomImplementation", "#.implementation", this);
 
   @JSName('lastModified')
-  final String _lastModified;
+  String get _lastModified => JS("String", "#.lastModified", this);
 
-  final String origin;
+  String get origin => JS("String", "#.origin", this);
 
   @JSName('preferredStylesheetSet')
-  final String _preferredStylesheetSet;
+  final String? _preferredStylesheetSet;
 
-  final String readyState;
+  String get readyState => JS("String", "#.readyState", this);
 
   @JSName('referrer')
-  final String _referrer;
+  String get _referrer => JS("String", "#.referrer", this);
 
-  final SvgSvgElement rootElement;
+  SvgSvgElement get rootElement => JS("SvgSvgElement", "#.rootElement", this);
 
-  Element rootScroller;
+  Element? rootScroller;
 
-  final Element scrollingElement;
+  final Element? scrollingElement;
 
   @JSName('selectedStylesheetSet')
-  String _selectedStylesheetSet;
+  String? _selectedStylesheetSet;
 
-  final String suborigin;
+  String get suborigin => JS("String", "#.suborigin", this);
 
-  final DocumentTimeline timeline;
+  DocumentTimeline get timeline => JS("DocumentTimeline", "#.timeline", this);
 
   @JSName('title')
-  String _title;
+  String get _title => JS("String", "#.title", this);
+
+  @JSName('title')
+  set _title(String value) {
+    JS("void", "#.title = #", this, value);
+  }
 
   @JSName('visibilityState')
-  final String _visibilityState;
+  String get _visibilityState => JS("String", "#.visibilityState", this);
 
   @JSName('webkitFullscreenElement')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final Element _webkitFullscreenElement;
+  Element get _webkitFullscreenElement =>
+      JS("Element", "#.webkitFullscreenElement", this);
 
   @JSName('webkitFullscreenEnabled')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final bool _webkitFullscreenEnabled;
+  bool get _webkitFullscreenEnabled =>
+      JS("bool", "#.webkitFullscreenEnabled", this);
 
   @JSName('webkitHidden')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final bool _webkitHidden;
+  bool get _webkitHidden => JS("bool", "#.webkitHidden", this);
 
   @JSName('webkitVisibilityState')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final String _webkitVisibilityState;
+  String get _webkitVisibilityState =>
+      JS("String", "#.webkitVisibilityState", this);
 
   Node adoptNode(Node node) native;
 
@@ -9372,7 +9862,7 @@
       [options_OR_typeExtension]) native;
 
   @JSName('createElementNS')
-  Element _createElementNS(String namespaceURI, String qualifiedName,
+  Element _createElementNS(String? namespaceURI, String qualifiedName,
       [options_OR_typeExtension]) native;
 
   @JSName('createEvent')
@@ -9385,7 +9875,7 @@
 
   Touch _createTouch(Window view, EventTarget target, int identifier, num pageX,
       num pageY, num screenX, num screenY,
-      [num radiusX, num radiusY, num rotationAngle, num force]) {
+      [num? radiusX, num? radiusY, num? rotationAngle, num? force]) {
     if (force != null) {
       var target_1 = _convertDartToNative_EventTarget(target);
       return _createTouch_1(view, target_1, identifier, pageX, pageY, screenX,
@@ -9430,7 +9920,7 @@
   @JSName('createTouchList')
   TouchList _createTouchList(Touch touches) native;
 
-  bool execCommand(String commandId, [bool showUI, String value]) native;
+  bool execCommand(String commandId, [bool? showUI, String? value]) native;
 
   void exitFullscreen() native;
 
@@ -9450,7 +9940,7 @@
   @Returns('NodeList|HtmlCollection')
   List<Node> getElementsByTagName(String localName) native;
 
-  Node importNode(Node node, [bool deep]) native;
+  Node importNode(Node node, [bool? deep]) native;
 
   bool queryCommandEnabled(String commandId) native;
 
@@ -9462,7 +9952,7 @@
 
   String queryCommandValue(String commandId) native;
 
-  Function registerElement2(String type, [Map options]) {
+  Function registerElement2(String type, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return _registerElement2_1(type, options_1);
@@ -9486,16 +9976,17 @@
 
   // From DocumentOrShadowRoot
 
-  final Element activeElement;
+  final Element? activeElement;
 
-  final Element fullscreenElement;
+  final Element? fullscreenElement;
 
-  final Element pointerLockElement;
+  final Element? pointerLockElement;
 
   @JSName('styleSheets')
   @Returns('_StyleSheetList|Null')
   @Creates('_StyleSheetList')
-  final List<StyleSheet> _styleSheets;
+  List<StyleSheet> get _styleSheets =>
+      JS("_StyleSheetList", "#.styleSheets", this);
 
   @JSName('elementFromPoint')
   Element _elementFromPoint(int x, int y) native;
@@ -9504,23 +9995,23 @@
 
   // From FontFaceSource
 
-  final FontFaceSet fonts;
+  FontFaceSet get fonts => JS("FontFaceSet", "#.fonts", this);
 
   // From ParentNode
 
   @JSName('childElementCount')
-  final int _childElementCount;
+  int get _childElementCount => JS("int", "#.childElementCount", this);
 
   @JSName('children')
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> _children;
+  List<Node> get _children => JS("HtmlCollection", "#.children", this);
 
   @JSName('firstElementChild')
-  final Element _firstElementChild;
+  final Element? _firstElementChild;
 
   @JSName('lastElementChild')
-  final Element _lastElementChild;
+  final Element? _lastElementChild;
 
   /**
    * Finds the first descendant element of this document that matches the
@@ -9937,13 +10428,13 @@
   // From ParentNode
 
   @JSName('childElementCount')
-  final int _childElementCount;
+  int get _childElementCount => JS("int", "#.childElementCount", this);
 
   @JSName('firstElementChild')
-  final Element _firstElementChild;
+  final Element? _firstElementChild;
 
   @JSName('lastElementChild')
-  final Element _lastElementChild;
+  final Element? _lastElementChild;
 
   /**
    * Finds the first descendant element of this document fragment that matches
@@ -9975,15 +10466,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Element activeElement;
+  final Element? activeElement;
 
-  final Element fullscreenElement;
+  final Element? fullscreenElement;
 
-  final Element pointerLockElement;
+  final Element? pointerLockElement;
 
   @Returns('_StyleSheetList|Null')
   @Creates('_StyleSheetList')
-  final List<StyleSheet> styleSheets;
+  List<StyleSheet> get styleSheets =>
+      JS("_StyleSheetList", "#.styleSheets", this);
 
   Element elementFromPoint(int x, int y) native;
 
@@ -10002,7 +10494,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DocumentTimeline([Map options]) {
+  factory DocumentTimeline([Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return DocumentTimeline._create_1(options_1);
@@ -10025,7 +10517,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomError(String name, [String message]) {
+  factory DomError(String name, [String? message]) {
     if (message != null) {
       return DomError._create_1(name, message);
     }
@@ -10035,9 +10527,9 @@
       JS('DomError', 'new DOMError(#,#)', name, message);
   static DomError _create_2(name) => JS('DomError', 'new DOMError(#)', name);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -10095,7 +10587,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
   String toString() => JS('String', 'String(#)', this);
 }
@@ -10110,14 +10602,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  XmlDocument createDocument(
-      String namespaceURI, String qualifiedName, _DocumentType doctype) native;
+  XmlDocument createDocument(String? namespaceURI, String qualifiedName,
+      _DocumentType? doctype) native;
 
   _DocumentType createDocumentType(
       String qualifiedName, String publicId, String systemId) native;
 
   @JSName('createHTMLDocument')
-  HtmlDocument createHtmlDocument([String title]) native;
+  HtmlDocument createHtmlDocument([String? title]) native;
 
   bool hasFeature() native;
 }
@@ -10132,7 +10624,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  Object next([Object value]) native;
+  Object next([Object? value]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -10145,7 +10637,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomMatrix([Object init]) {
+  factory DomMatrix([Object? init]) {
     if (init != null) {
       return DomMatrix._create_1(init);
     }
@@ -10155,6 +10647,7 @@
   static DomMatrix _create_2() => JS('DomMatrix', 'new DOMMatrix()');
 
   // Shadowing definition.
+
   num get a => JS("num", "#.a", this);
 
   set a(num value) {
@@ -10162,6 +10655,7 @@
   }
 
   // Shadowing definition.
+
   num get b => JS("num", "#.b", this);
 
   set b(num value) {
@@ -10169,6 +10663,7 @@
   }
 
   // Shadowing definition.
+
   num get c => JS("num", "#.c", this);
 
   set c(num value) {
@@ -10176,6 +10671,7 @@
   }
 
   // Shadowing definition.
+
   num get d => JS("num", "#.d", this);
 
   set d(num value) {
@@ -10183,6 +10679,7 @@
   }
 
   // Shadowing definition.
+
   num get e => JS("num", "#.e", this);
 
   set e(num value) {
@@ -10190,6 +10687,7 @@
   }
 
   // Shadowing definition.
+
   num get f => JS("num", "#.f", this);
 
   set f(num value) {
@@ -10197,6 +10695,7 @@
   }
 
   // Shadowing definition.
+
   num get m11 => JS("num", "#.m11", this);
 
   set m11(num value) {
@@ -10204,6 +10703,7 @@
   }
 
   // Shadowing definition.
+
   num get m12 => JS("num", "#.m12", this);
 
   set m12(num value) {
@@ -10211,6 +10711,7 @@
   }
 
   // Shadowing definition.
+
   num get m13 => JS("num", "#.m13", this);
 
   set m13(num value) {
@@ -10218,6 +10719,7 @@
   }
 
   // Shadowing definition.
+
   num get m14 => JS("num", "#.m14", this);
 
   set m14(num value) {
@@ -10225,6 +10727,7 @@
   }
 
   // Shadowing definition.
+
   num get m21 => JS("num", "#.m21", this);
 
   set m21(num value) {
@@ -10232,6 +10735,7 @@
   }
 
   // Shadowing definition.
+
   num get m22 => JS("num", "#.m22", this);
 
   set m22(num value) {
@@ -10239,6 +10743,7 @@
   }
 
   // Shadowing definition.
+
   num get m23 => JS("num", "#.m23", this);
 
   set m23(num value) {
@@ -10246,6 +10751,7 @@
   }
 
   // Shadowing definition.
+
   num get m24 => JS("num", "#.m24", this);
 
   set m24(num value) {
@@ -10253,6 +10759,7 @@
   }
 
   // Shadowing definition.
+
   num get m31 => JS("num", "#.m31", this);
 
   set m31(num value) {
@@ -10260,6 +10767,7 @@
   }
 
   // Shadowing definition.
+
   num get m32 => JS("num", "#.m32", this);
 
   set m32(num value) {
@@ -10267,6 +10775,7 @@
   }
 
   // Shadowing definition.
+
   num get m33 => JS("num", "#.m33", this);
 
   set m33(num value) {
@@ -10274,6 +10783,7 @@
   }
 
   // Shadowing definition.
+
   num get m34 => JS("num", "#.m34", this);
 
   set m34(num value) {
@@ -10281,6 +10791,7 @@
   }
 
   // Shadowing definition.
+
   num get m41 => JS("num", "#.m41", this);
 
   set m41(num value) {
@@ -10288,6 +10799,7 @@
   }
 
   // Shadowing definition.
+
   num get m42 => JS("num", "#.m42", this);
 
   set m42(num value) {
@@ -10295,6 +10807,7 @@
   }
 
   // Shadowing definition.
+
   num get m43 => JS("num", "#.m43", this);
 
   set m43(num value) {
@@ -10302,6 +10815,7 @@
   }
 
   // Shadowing definition.
+
   num get m44 => JS("num", "#.m44", this);
 
   set m44(num value) {
@@ -10312,7 +10826,7 @@
 
   static DomMatrix fromFloat64Array(Float64List array64) native;
 
-  static DomMatrix fromMatrix([Map other]) {
+  static DomMatrix fromMatrix([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromMatrix_1(other_1);
@@ -10327,7 +10841,7 @@
 
   DomMatrix invertSelf() native;
 
-  DomMatrix multiplySelf([Map other]) {
+  DomMatrix multiplySelf([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _multiplySelf_1(other_1);
@@ -10340,7 +10854,7 @@
   @JSName('multiplySelf')
   DomMatrix _multiplySelf_2() native;
 
-  DomMatrix preMultiplySelf([Map other]) {
+  DomMatrix preMultiplySelf([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _preMultiplySelf_1(other_1);
@@ -10353,30 +10867,30 @@
   @JSName('preMultiplySelf')
   DomMatrix _preMultiplySelf_2() native;
 
-  DomMatrix rotateAxisAngleSelf([num x, num y, num z, num angle]) native;
+  DomMatrix rotateAxisAngleSelf([num? x, num? y, num? z, num? angle]) native;
 
-  DomMatrix rotateFromVectorSelf([num x, num y]) native;
+  DomMatrix rotateFromVectorSelf([num? x, num? y]) native;
 
-  DomMatrix rotateSelf([num rotX, num rotY, num rotZ]) native;
+  DomMatrix rotateSelf([num? rotX, num? rotY, num? rotZ]) native;
 
-  DomMatrix scale3dSelf([num scale, num originX, num originY, num originZ])
+  DomMatrix scale3dSelf([num? scale, num? originX, num? originY, num? originZ])
       native;
 
   DomMatrix scaleSelf(
-      [num scaleX,
-      num scaleY,
-      num scaleZ,
-      num originX,
-      num originY,
-      num originZ]) native;
+      [num? scaleX,
+      num? scaleY,
+      num? scaleZ,
+      num? originX,
+      num? originY,
+      num? originZ]) native;
 
   DomMatrix setMatrixValue(String transformList) native;
 
-  DomMatrix skewXSelf([num sx]) native;
+  DomMatrix skewXSelf([num? sx]) native;
 
-  DomMatrix skewYSelf([num sy]) native;
+  DomMatrix skewYSelf([num? sy]) native;
 
-  DomMatrix translateSelf([num tx, num ty, num tz]) native;
+  DomMatrix translateSelf([num? tx, num? ty, num? tz]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -10389,7 +10903,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomMatrixReadOnly([Object init]) {
+  factory DomMatrixReadOnly([Object? init]) {
     if (init != null) {
       return DomMatrixReadOnly._create_1(init);
     }
@@ -10456,7 +10970,7 @@
 
   static DomMatrixReadOnly fromFloat64Array(Float64List array64) native;
 
-  static DomMatrixReadOnly fromMatrix([Map other]) {
+  static DomMatrixReadOnly fromMatrix([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromMatrix_1(other_1);
@@ -10471,7 +10985,7 @@
 
   DomMatrix inverse() native;
 
-  DomMatrix multiply([Map other]) {
+  DomMatrix multiply([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _multiply_1(other_1);
@@ -10484,31 +10998,32 @@
   @JSName('multiply')
   DomMatrix _multiply_2() native;
 
-  DomMatrix rotate([num rotX, num rotY, num rotZ]) native;
+  DomMatrix rotate([num? rotX, num? rotY, num? rotZ]) native;
 
-  DomMatrix rotateAxisAngle([num x, num y, num z, num angle]) native;
+  DomMatrix rotateAxisAngle([num? x, num? y, num? z, num? angle]) native;
 
-  DomMatrix rotateFromVector([num x, num y]) native;
+  DomMatrix rotateFromVector([num? x, num? y]) native;
 
   DomMatrix scale(
-      [num scaleX,
-      num scaleY,
-      num scaleZ,
-      num originX,
-      num originY,
-      num originZ]) native;
+      [num? scaleX,
+      num? scaleY,
+      num? scaleZ,
+      num? originX,
+      num? originY,
+      num? originZ]) native;
 
-  DomMatrix scale3d([num scale, num originX, num originY, num originZ]) native;
+  DomMatrix scale3d([num? scale, num? originX, num? originY, num? originZ])
+      native;
 
-  DomMatrix skewX([num sx]) native;
+  DomMatrix skewX([num? sx]) native;
 
-  DomMatrix skewY([num sy]) native;
+  DomMatrix skewY([num? sy]) native;
 
   Float32List toFloat32Array() native;
 
   Float64List toFloat64Array() native;
 
-  DomPoint transformPoint([Map point]) {
+  DomPoint transformPoint([Map? point]) {
     if (point != null) {
       var point_1 = convertDartToNative_Dictionary(point);
       return _transformPoint_1(point_1);
@@ -10521,7 +11036,7 @@
   @JSName('transformPoint')
   DomPoint _transformPoint_2() native;
 
-  DomMatrix translate([num tx, num ty, num tz]) native;
+  DomMatrix translate([num? tx, num? ty, num? tz]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -10552,7 +11067,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomPoint([num x, num y, num z, num w]) {
+  factory DomPoint([num? x, num? y, num? z, num? w]) {
     if (w != null) {
       return DomPoint._create_1(x, y, z, w);
     }
@@ -10580,6 +11095,7 @@
       JS('bool', '!!(window.DOMPoint) || !!(window.WebKitPoint)');
 
   // Shadowing definition.
+
   num get w => JS("num", "#.w", this);
 
   set w(num value) {
@@ -10587,6 +11103,7 @@
   }
 
   // Shadowing definition.
+
   num get x => JS("num", "#.x", this);
 
   set x(num value) {
@@ -10594,6 +11111,7 @@
   }
 
   // Shadowing definition.
+
   num get y => JS("num", "#.y", this);
 
   set y(num value) {
@@ -10601,13 +11119,14 @@
   }
 
   // Shadowing definition.
+
   num get z => JS("num", "#.z", this);
 
   set z(num value) {
     JS("void", "#.z = #", this, value);
   }
 
-  static DomPoint fromPoint([Map other]) {
+  static DomPoint fromPoint([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromPoint_1(other_1);
@@ -10631,7 +11150,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomPointReadOnly([num x, num y, num z, num w]) {
+  factory DomPointReadOnly([num? x, num? y, num? z, num? w]) {
     if (w != null) {
       return DomPointReadOnly._create_1(x, y, z, w);
     }
@@ -10665,7 +11184,7 @@
 
   num get z => JS("num", "#.z", this);
 
-  static DomPointReadOnly fromPoint([Map other]) {
+  static DomPointReadOnly fromPoint([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromPoint_1(other_1);
@@ -10678,7 +11197,7 @@
   @JSName('fromPoint')
   static DomPointReadOnly _fromPoint_2() native;
 
-  DomPoint matrixTransform([Map matrix]) {
+  DomPoint matrixTransform([Map? matrix]) {
     if (matrix != null) {
       var matrix_1 = convertDartToNative_Dictionary(matrix);
       return _matrixTransform_1(matrix_1);
@@ -10702,7 +11221,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomQuad([Map p1, Map p2, Map p3, Map p4]) {
+  factory DomQuad([Map? p1, Map? p2, Map? p3, Map? p4]) {
     if (p4 != null) {
       var p1_1 = convertDartToNative_Dictionary(p1);
       var p2_2 = convertDartToNative_Dictionary(p2);
@@ -10735,15 +11254,15 @@
   static DomQuad _create_4(p1) => JS('DomQuad', 'new DOMQuad(#)', p1);
   static DomQuad _create_5() => JS('DomQuad', 'new DOMQuad()');
 
-  final DomPoint p1;
+  DomPoint get p1 => JS("DomPoint", "#.p1", this);
 
-  final DomPoint p2;
+  DomPoint get p2 => JS("DomPoint", "#.p2", this);
 
-  final DomPoint p3;
+  DomPoint get p3 => JS("DomPoint", "#.p3", this);
 
-  final DomPoint p4;
+  DomPoint get p4 => JS("DomPoint", "#.p4", this);
 
-  static DomQuad fromQuad([Map other]) {
+  static DomQuad fromQuad([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromQuad_1(other_1);
@@ -10756,7 +11275,7 @@
   @JSName('fromQuad')
   static DomQuad _fromQuad_2() native;
 
-  static DomQuad fromRect([Map other]) {
+  static DomQuad fromRect([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromRect_1(other_1);
@@ -10930,7 +11449,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DomRectReadOnly([num x, num y, num width, num height]) {
+  factory DomRectReadOnly([num? x, num? y, num? width, num? height]) {
     if (height != null) {
       return DomRectReadOnly._create_1(x, y, width, height);
     }
@@ -10972,7 +11491,7 @@
 
   num get y => JS("num", "#.y", this);
 
-  static DomRectReadOnly fromRect([Map other]) {
+  static DomRectReadOnly fromRect([Map? other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
       return _fromRect_1(other_1);
@@ -11074,9 +11593,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  String value;
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 
   void add(String tokens) native;
 
@@ -11090,7 +11613,7 @@
 
   bool supports(String token) native;
 
-  bool toggle(String token, [bool force]) native;
+  bool toggle(String token, [bool? force]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -11106,7 +11629,7 @@
       : _childElements = element._children,
         _element = element;
 
-  bool contains(Object element) => _childElements.contains(element);
+  bool contains(Object? element) => _childElements.contains(element);
 
   bool get isEmpty {
     return _element._firstElementChild == null;
@@ -11146,11 +11669,11 @@
     }
   }
 
-  void sort([int compare(Element a, Element b)]) {
+  void sort([int compare(Element a, Element b)?]) {
     throw new UnsupportedError('Cannot sort element lists');
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random? random]) {
     throw new UnsupportedError('Cannot shuffle element lists');
   }
 
@@ -11172,7 +11695,7 @@
     for (var e in removed) e.remove();
   }
 
-  void fillRange(int start, int end, [Element fillValue]) {
+  void fillRange(int start, int end, [Element? fillValue]) {
     throw new UnimplementedError();
   }
 
@@ -11189,7 +11712,7 @@
     throw new UnimplementedError();
   }
 
-  bool remove(Object object) {
+  bool remove(Object? object) {
     if (object is Element) {
       Element element = object;
       if (identical(element.parentNode, _element)) {
@@ -11658,11 +12181,11 @@
     throw new UnsupportedError('Cannot modify list');
   }
 
-  void sort([Comparator<E> compare]) {
+  void sort([Comparator<E>? compare]) {
     throw new UnsupportedError('Cannot sort list');
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random? random]) {
     throw new UnsupportedError('Cannot shuffle list');
   }
 
@@ -12497,7 +13020,7 @@
    * * [Pseudo-elements](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements)
    *   from MDN.
    */
-  CssStyleDeclaration getComputedStyle([String pseudoElement]) {
+  CssStyleDeclaration getComputedStyle([String? pseudoElement]) {
     if (pseudoElement == null) {
       pseudoElement = '';
     }
@@ -13057,7 +13580,7 @@
 
       // Workaround for Safari bug. Was also previously Chrome bug 229142
       // - URIs are not resolved in new doc.
-      BaseElement base = _parseDocument.createElement('base');
+      BaseElement base = _parseDocument.createElement('base') as BaseElement;
       base.href = document.baseUri;
       _parseDocument.head.append(base);
     }
@@ -13836,9 +14359,17 @@
   static const EventStreamProvider<WheelEvent> wheelEvent =
       const EventStreamProvider<WheelEvent>('wheel');
 
-  String contentEditable;
+  String get contentEditable => JS("String", "#.contentEditable", this);
 
-  String dir;
+  set contentEditable(String value) {
+    JS("void", "#.contentEditable = #", this, value);
+  }
+
+  String get dir => JS("String", "#.dir", this);
+
+  set dir(String value) {
+    JS("void", "#.dir = #", this, value);
+  }
 
   /**
    * Indicates whether the element can be dragged and dropped.
@@ -13853,7 +14384,26 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  bool draggable;
+
+  bool get draggable => JS("bool", "#.draggable", this);
+
+  /**
+   * Indicates whether the element can be dragged and dropped.
+   *
+   * ## Other resources
+   *
+   * * [Drag and drop
+   *   sample](https://github.com/dart-lang/dart-samples/tree/master/html5/web/dnd/basics)
+   *   based on [the tutorial](http://www.html5rocks.com/en/tutorials/dnd/basics/)
+   *   from HTML5Rocks.
+   * * [Drag and drop
+   *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
+   *   from WHATWG.
+   */
+
+  set draggable(bool value) {
+    JS("void", "#.draggable = #", this, value);
+  }
 
   /**
    * Indicates whether the element is not relevant to the page's current state.
@@ -13864,24 +14414,64 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute)
    *   from WHATWG.
    */
-  bool hidden;
 
-  bool inert;
+  bool get hidden => JS("bool", "#.hidden", this);
 
-  String inputMode;
+  /**
+   * Indicates whether the element is not relevant to the page's current state.
+   *
+   * ## Other resources
+   *
+   * * [Hidden attribute
+   *   specification](https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute)
+   *   from WHATWG.
+   */
+
+  set hidden(bool value) {
+    JS("void", "#.hidden = #", this, value);
+  }
+
+  bool get inert => JS("bool", "#.inert", this);
+
+  set inert(bool value) {
+    JS("void", "#.inert = #", this, value);
+  }
+
+  String get inputMode => JS("String", "#.inputMode", this);
+
+  set inputMode(String value) {
+    JS("void", "#.inputMode = #", this, value);
+  }
 
   // Using property as subclass shadows.
+
   bool get isContentEditable => JS("bool", "#.isContentEditable", this);
 
-  String lang;
+  String get lang => JS("String", "#.lang", this);
 
-  bool spellcheck;
+  set lang(String value) {
+    JS("void", "#.lang = #", this, value);
+  }
 
-  final CssStyleDeclaration style;
+  bool get spellcheck => JS("bool", "#.spellcheck", this);
 
-  int tabIndex;
+  set spellcheck(bool value) {
+    JS("void", "#.spellcheck = #", this, value);
+  }
 
-  String title;
+  CssStyleDeclaration get style => JS("CssStyleDeclaration", "#.style", this);
+
+  int get tabIndex => JS("int", "#.tabIndex", this);
+
+  set tabIndex(int value) {
+    JS("void", "#.tabIndex = #", this, value);
+  }
+
+  String get title => JS("String", "#.title", this);
+
+  set title(String value) {
+    JS("void", "#.title = #", this, value);
+  }
 
   /**
    * Specifies whether this element's text content changes when the page is
@@ -13893,7 +14483,23 @@
    *   attribute](https://html.spec.whatwg.org/multipage/dom.html#the-translate-attribute)
    *   from WHATWG.
    */
-  bool translate;
+
+  bool get translate => JS("bool", "#.translate", this);
+
+  /**
+   * Specifies whether this element's text content changes when the page is
+   * localized.
+   *
+   * ## Other resources
+   *
+   * * [The translate
+   *   attribute](https://html.spec.whatwg.org/multipage/dom.html#the-translate-attribute)
+   *   from WHATWG.
+   */
+
+  set translate(bool value) {
+    JS("void", "#.translate = #", this, value);
+  }
 
   void blur() native;
 
@@ -13901,58 +14507,86 @@
 
   void focus() native;
 
-  final AccessibleNode accessibleNode;
+  final AccessibleNode? accessibleNode;
 
-  final SlotElement assignedSlot;
+  final SlotElement? assignedSlot;
 
   @JSName('attributes')
-  final _NamedNodeMap _attributes;
+  _NamedNodeMap get _attributes => JS("_NamedNodeMap", "#.attributes", this);
 
-  String className;
+  String get className => JS("String", "#.className", this);
 
-  final int clientHeight;
+  set className(String value) {
+    JS("void", "#.className = #", this, value);
+  }
 
-  final int clientLeft;
+  int get clientHeight => JS("int", "#.clientHeight", this);
 
-  final int clientTop;
+  int get clientLeft => JS("int", "#.clientLeft", this);
 
-  final int clientWidth;
+  int get clientTop => JS("int", "#.clientTop", this);
 
-  final String computedName;
+  int get clientWidth => JS("int", "#.clientWidth", this);
 
-  final String computedRole;
+  final String? computedName;
 
-  String id;
+  final String? computedRole;
+
+  String get id => JS("String", "#.id", this);
+
+  set id(String value) {
+    JS("void", "#.id = #", this, value);
+  }
 
   @JSName('innerHTML')
-  String _innerHtml;
+  String get _innerHtml => JS("String", "#.innerHTML", this);
+
+  @JSName('innerHTML')
+  set _innerHtml(String value) {
+    JS("void", "#.innerHTML = #", this, value);
+  }
 
   @JSName('localName')
-  final String _localName;
+  String get _localName => JS("String", "#.localName", this);
 
   @JSName('namespaceURI')
-  final String _namespaceUri;
+  final String? _namespaceUri;
 
   // Using property as subclass shadows.
+
   String get outerHtml => JS("String", "#.outerHTML", this);
 
   @JSName('scrollHeight')
-  final int _scrollHeight;
+  int get _scrollHeight => JS("int", "#.scrollHeight", this);
 
   @JSName('scrollLeft')
-  num _scrollLeft;
+  num get _scrollLeft => JS("num", "#.scrollLeft", this);
+
+  @JSName('scrollLeft')
+  set _scrollLeft(num value) {
+    JS("void", "#.scrollLeft = #", this, value);
+  }
 
   @JSName('scrollTop')
-  num _scrollTop;
+  num get _scrollTop => JS("num", "#.scrollTop", this);
+
+  @JSName('scrollTop')
+  set _scrollTop(num value) {
+    JS("void", "#.scrollTop = #", this, value);
+  }
 
   @JSName('scrollWidth')
-  final int _scrollWidth;
+  int get _scrollWidth => JS("int", "#.scrollWidth", this);
 
-  String slot;
+  String get slot => JS("String", "#.slot", this);
 
-  final StylePropertyMap styleMap;
+  set slot(String value) {
+    JS("void", "#.slot = #", this, value);
+  }
 
-  final String tagName;
+  StylePropertyMap get styleMap => JS("StylePropertyMap", "#.styleMap", this);
+
+  String get tagName => JS("String", "#.tagName", this);
 
   ShadowRoot attachShadow(Map shadowRootInitDict) {
     var shadowRootInitDict_1 =
@@ -13971,7 +14605,7 @@
   String _getAttribute(String name) native;
 
   @JSName('getAttributeNS')
-  String _getAttributeNS(String namespaceURI, String localName) native;
+  String _getAttributeNS(String? namespaceURI, String localName) native;
 
   List<String> getAttributeNames() native;
 
@@ -14044,7 +14678,7 @@
   bool _hasAttribute(String name) native;
 
   @JSName('hasAttributeNS')
-  bool _hasAttributeNS(String namespaceURI, String localName) native;
+  bool _hasAttributeNS(String? namespaceURI, String localName) native;
 
   bool hasPointerCapture(int pointerId) native;
 
@@ -14054,11 +14688,11 @@
   void _removeAttribute(String name) native;
 
   @JSName('removeAttributeNS')
-  void _removeAttributeNS(String namespaceURI, String localName) native;
+  void _removeAttributeNS(String? namespaceURI, String localName) native;
 
   void requestPointerLock() native;
 
-  void scroll([options_OR_x, num y]) {
+  void scroll([options_OR_x, num? y]) {
     if (options_OR_x == null && y == null) {
       _scroll_1();
       return;
@@ -14082,7 +14716,7 @@
   @JSName('scroll')
   void _scroll_3(num x, y) native;
 
-  void scrollBy([options_OR_x, num y]) {
+  void scrollBy([options_OR_x, num? y]) {
     if (options_OR_x == null && y == null) {
       _scrollBy_1();
       return;
@@ -14107,12 +14741,12 @@
   void _scrollBy_3(num x, y) native;
 
   @JSName('scrollIntoView')
-  void _scrollIntoView([Object arg]) native;
+  void _scrollIntoView([Object? arg]) native;
 
   @JSName('scrollIntoViewIfNeeded')
-  void _scrollIntoViewIfNeeded([bool centerIfNeeded]) native;
+  void _scrollIntoViewIfNeeded([bool? centerIfNeeded]) native;
 
-  void scrollTo([options_OR_x, num y]) {
+  void scrollTo([options_OR_x, num? y]) {
     if (options_OR_x == null && y == null) {
       _scrollTo_1();
       return;
@@ -14140,7 +14774,7 @@
   void _setAttribute(String name, String value) native;
 
   @JSName('setAttributeNS')
-  void _setAttributeNS(String namespaceURI, String name, String value) native;
+  void _setAttributeNS(String? namespaceURI, String name, String value) native;
 
   void setPointerCapture(int pointerId) native;
 
@@ -14167,25 +14801,25 @@
 
   // From NonDocumentTypeChildNode
 
-  final Element nextElementSibling;
+  final Element? nextElementSibling;
 
-  final Element previousElementSibling;
+  final Element? previousElementSibling;
 
   // From ParentNode
 
   @JSName('childElementCount')
-  final int _childElementCount;
+  int get _childElementCount => JS("int", "#.childElementCount", this);
 
   @JSName('children')
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> _children;
+  List<Node> get _children => JS("HtmlCollection", "#.children", this);
 
   @JSName('firstElementChild')
-  final Element _firstElementChild;
+  final Element? _firstElementChild;
 
   @JSName('lastElementChild')
-  final Element _lastElementChild;
+  final Element? _lastElementChild;
 
   /**
    * Finds the first descendant element of this element that matches the
@@ -14563,7 +15197,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory EmbedElement() => document.createElement("embed");
+  factory EmbedElement() => document.createElement("embed") as EmbedElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -14574,15 +15208,35 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('embed');
 
-  String height;
+  String get height => JS("String", "#.height", this);
 
-  String name;
+  set height(String value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  String src;
+  String get name => JS("String", "#.name", this);
 
-  String type;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  String width;
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
+
+  String get width => JS("String", "#.width", this);
+
+  set width(String value) {
+    JS("void", "#.width = #", this, value);
+  }
 
   Node __getter__(String name) native;
 
@@ -14606,24 +15260,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final FileSystem filesystem;
+  FileSystem get filesystem => JS("FileSystem", "#.filesystem", this);
 
-  final String fullPath;
+  String get fullPath => JS("String", "#.fullPath", this);
 
-  final bool isDirectory;
+  bool get isDirectory => JS("bool", "#.isDirectory", this);
 
-  final bool isFile;
+  bool get isFile => JS("bool", "#.isFile", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   @JSName('copyTo')
   void _copyTo(DirectoryEntry parent,
-      [String name,
-      _EntryCallback successCallback,
-      _ErrorCallback errorCallback]) native;
+      [String? name,
+      _EntryCallback? successCallback,
+      _ErrorCallback? errorCallback]) native;
 
   @JSName('copyTo')
-  Future<Entry> copyTo(DirectoryEntry parent, {String name}) {
+  Future<Entry> copyTo(DirectoryEntry parent, {String? name}) {
     var completer = new Completer<Entry>();
     _copyTo(parent, name, (value) {
       completer.complete(value);
@@ -14635,7 +15289,7 @@
 
   @JSName('getMetadata')
   void _getMetadata(MetadataCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   @JSName('getMetadata')
   Future<Metadata> getMetadata() {
@@ -14651,7 +15305,7 @@
 
   @JSName('getParent')
   void _getParent(
-      [_EntryCallback successCallback, _ErrorCallback errorCallback]) native;
+      [_EntryCallback? successCallback, _ErrorCallback? errorCallback]) native;
 
   @JSName('getParent')
   Future<Entry> getParent() {
@@ -14667,12 +15321,12 @@
 
   @JSName('moveTo')
   void _moveTo(DirectoryEntry parent,
-      [String name,
-      _EntryCallback successCallback,
-      _ErrorCallback errorCallback]) native;
+      [String? name,
+      _EntryCallback? successCallback,
+      _ErrorCallback? errorCallback]) native;
 
   @JSName('moveTo')
-  Future<Entry> moveTo(DirectoryEntry parent, {String name}) {
+  Future<Entry> moveTo(DirectoryEntry parent, {String? name}) {
     var completer = new Completer<Entry>();
     _moveTo(parent, name, (value) {
       completer.complete(value);
@@ -14683,7 +15337,7 @@
   }
 
   @JSName('remove')
-  void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback])
+  void _remove(VoidCallback successCallback, [_ErrorCallback? errorCallback])
       native;
 
   @JSName('remove')
@@ -14726,7 +15380,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ErrorEvent(String type, [Map eventInitDict]) {
+  factory ErrorEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return ErrorEvent._create_1(type, eventInitDict_1);
@@ -14738,16 +15392,16 @@
   static ErrorEvent _create_2(type) =>
       JS('ErrorEvent', 'new ErrorEvent(#)', type);
 
-  final int colno;
+  int get colno => JS("int", "#.colno", this);
 
   @Creates('Null')
-  final Object error;
+  Object get error => JS("Object", "#.error", this);
 
-  final String filename;
+  String get filename => JS("String", "#.filename", this);
 
-  final int lineno;
+  int get lineno => JS("int", "#.lineno", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -14809,7 +15463,7 @@
   List<EventTarget> get path =>
       JS('bool', '!!#.composedPath', this) ? composedPath() : [];
 
-  factory Event._(String type, [Map eventInitDict]) {
+  factory Event._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return Event._create_1(type, eventInitDict_1);
@@ -14851,39 +15505,39 @@
    */
   static const int CAPTURING_PHASE = 1;
 
-  final bool bubbles;
+  bool get bubbles => JS("bool", "#.bubbles", this);
 
-  final bool cancelable;
+  bool get cancelable => JS("bool", "#.cancelable", this);
 
-  final bool composed;
+  bool get composed => JS("bool", "#.composed", this);
 
-  EventTarget get currentTarget =>
+  EventTarget? get currentTarget =>
       _convertNativeToDart_EventTarget(this._get_currentTarget);
   @JSName('currentTarget')
   @Creates('Null')
   @Returns('EventTarget|=Object|Null')
   final dynamic _get_currentTarget;
 
-  final bool defaultPrevented;
+  bool get defaultPrevented => JS("bool", "#.defaultPrevented", this);
 
-  final int eventPhase;
+  int get eventPhase => JS("int", "#.eventPhase", this);
 
-  final bool isTrusted;
+  bool get isTrusted => JS("bool", "#.isTrusted", this);
 
-  EventTarget get target => _convertNativeToDart_EventTarget(this._get_target);
+  EventTarget? get target => _convertNativeToDart_EventTarget(this._get_target);
   @JSName('target')
   @Creates('Node')
   @Returns('EventTarget|=Object')
   final dynamic _get_target;
 
-  final num timeStamp;
+  num get timeStamp => JS("num", "#.timeStamp", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   List<EventTarget> composedPath() native;
 
   @JSName('initEvent')
-  void _initEvent(String type, [bool bubbles, bool cancelable]) native;
+  void _initEvent(String type, [bool? bubbles, bool? cancelable]) native;
 
   void preventDefault() native;
 
@@ -14936,7 +15590,7 @@
       const EventStreamProvider<Event>('open');
 
   static EventSource _factoryEventSource(String url,
-      [Map eventSourceInitDict]) {
+      [Map? eventSourceInitDict]) {
     if (eventSourceInitDict != null) {
       var eventSourceInitDict_1 =
           convertDartToNative_Dictionary(eventSourceInitDict);
@@ -14956,11 +15610,11 @@
 
   static const int OPEN = 1;
 
-  final int readyState;
+  int get readyState => JS("int", "#.readyState", this);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 
-  final bool withCredentials;
+  bool get withCredentials => JS("bool", "#.withCredentials", this);
 
   void close() native;
 
@@ -15098,14 +15752,14 @@
   }
 
   @JSName('addEventListener')
-  void _addEventListener(String type, EventListener listener, [bool options])
+  void _addEventListener(String type, EventListener? listener, [bool? options])
       native;
 
   bool dispatchEvent(Event event) native;
 
   @JSName('removeEventListener')
-  void _removeEventListener(String type, EventListener listener, [bool options])
-      native;
+  void _removeEventListener(String type, EventListener? listener,
+      [bool? options]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15118,7 +15772,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ExtendableEvent(String type, [Map eventInitDict]) {
+  factory ExtendableEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return ExtendableEvent._create_1(type, eventInitDict_1);
@@ -15145,17 +15799,17 @@
 
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
-  final Object data;
+  Object get data => JS("Object", "#.data", this);
 
-  final String lastEventId;
+  String get lastEventId => JS("String", "#.lastEventId", this);
 
-  final String origin;
+  String get origin => JS("String", "#.origin", this);
 
-  final List<MessagePort> ports;
+  List<MessagePort> get ports => JS("List<MessagePort>", "#.ports", this);
 
   @Creates('Client|ServiceWorker|MessagePort')
   @Returns('Client|ServiceWorker|MessagePort|Null')
-  final Object source;
+  final Object? source;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15183,7 +15837,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FaceDetector([Map faceDetectorOptions]) {
+  factory FaceDetector([Map? faceDetectorOptions]) {
     if (faceDetectorOptions != null) {
       var faceDetectorOptions_1 =
           convertDartToNative_Dictionary(faceDetectorOptions);
@@ -15216,16 +15870,16 @@
   static FederatedCredential _create_1(data) =>
       JS('FederatedCredential', 'new FederatedCredential(#)', data);
 
-  final String protocol;
+  final String? protocol;
 
-  final String provider;
+  String get provider => JS("String", "#.provider", this);
 
   // From CredentialUserData
 
   @JSName('iconURL')
-  final String iconUrl;
+  String get iconUrl => JS("String", "#.iconURL", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15245,14 +15899,13 @@
   static FetchEvent _create_1(type, eventInitDict) =>
       JS('FetchEvent', 'new FetchEvent(#,#)', type, eventInitDict);
 
-  final String clientId;
+  final String? clientId;
 
-  final bool isReload;
+  bool get isReload => JS("bool", "#.isReload", this);
 
-  Future get preloadResponse =>
-      promiseToFuture(JS("", "#.preloadResponse", this));
+  Future get preloadResponse => JS("Future", "#.preloadResponse", this);
 
-  final _Request request;
+  _Request get request => JS("_Request", "#.request", this);
 
   void respondWith(Future r) native;
 }
@@ -15268,7 +15921,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FieldSetElement() => JS(
+  factory FieldSetElement() => JS<FieldSetElement>(
       'returns:FieldSetElement;creates:FieldSetElement;new:true',
       '#.createElement(#)',
       document,
@@ -15280,23 +15933,31 @@
    */
   FieldSetElement.created() : super.created();
 
-  bool disabled;
+  bool get disabled => JS("bool", "#.disabled", this);
+
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> elements;
+  List<Node> get elements => JS("HtmlCollection", "#.elements", this);
 
-  final FormElement form;
+  final FormElement? form;
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  final String type;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  final String validationMessage;
+  String get type => JS("String", "#.type", this);
 
-  final ValidityState validity;
+  String get validationMessage => JS("String", "#.validationMessage", this);
 
-  final bool willValidate;
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
 
   bool checkValidity() native;
 
@@ -15315,7 +15976,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory File(List<Object> fileBits, String fileName, [Map options]) {
+  factory File(List<Object> fileBits, String fileName, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return File._create_1(fileBits, fileName, options_1);
@@ -15327,7 +15988,7 @@
   static File _create_2(fileBits, fileName) =>
       JS('File', 'new File(#,#)', fileBits, fileName);
 
-  final int lastModified;
+  int get lastModified => JS("int", "#.lastModified", this);
 
   DateTime get lastModifiedDate =>
       convertNativeToDart_DateTime(this._get_lastModifiedDate);
@@ -15335,12 +15996,12 @@
   @Creates('Null')
   final dynamic _get_lastModifiedDate;
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   @JSName('webkitRelativePath')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final String relativePath;
+  String get relativePath => JS("String", "#.webkitRelativePath", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15348,7 +16009,7 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void _FileCallback(File file);
+typedef void _FileCallback(File? file);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -15362,7 +16023,7 @@
 
   @JSName('createWriter')
   void _createWriter(_FileWriterCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   @JSName('createWriter')
   Future<FileWriter> createWriter() {
@@ -15377,7 +16038,7 @@
   }
 
   @JSName('file')
-  void _file(_FileCallback successCallback, [_ErrorCallback errorCallback])
+  void _file(_FileCallback successCallback, [_ErrorCallback? errorCallback])
       native;
 
   @JSName('file')
@@ -15536,9 +16197,9 @@
 
   static const int LOADING = 1;
 
-  final DomException error;
+  final DomException? error;
 
-  final int readyState;
+  int get readyState => JS("int", "#.readyState", this);
 
   void abort() native;
 
@@ -15547,7 +16208,7 @@
   @JSName('readAsDataURL')
   void readAsDataUrl(Blob blob) native;
 
-  void readAsText(Blob blob, [String label]) native;
+  void readAsText(Blob blob, [String? label]) native;
 
   /// Stream of `abort` events handled by this [FileReader].
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -15582,9 +16243,9 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.webkitRequestFileSystem)');
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
-  final DirectoryEntry root;
+  DirectoryEntry get root => JS("DirectoryEntry", "#.root", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15664,13 +16325,13 @@
 
   static const int WRITING = 1;
 
-  final DomException error;
+  final DomException? error;
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  final int position;
+  int get position => JS("int", "#.position", this);
 
-  final int readyState;
+  int get readyState => JS("int", "#.readyState", this);
 
   void abort() native;
 
@@ -15716,7 +16377,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FocusEvent(String type, [Map eventInitDict]) {
+  factory FocusEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return FocusEvent._create_1(type, eventInitDict_1);
@@ -15728,7 +16389,7 @@
   static FocusEvent _create_2(type) =>
       JS('FocusEvent', 'new FocusEvent(#)', type);
 
-  EventTarget get relatedTarget =>
+  EventTarget? get relatedTarget =>
       _convertNativeToDart_EventTarget(this._get_relatedTarget);
   @JSName('relatedTarget')
   @Creates('Null')
@@ -15745,7 +16406,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FontFace(String family, Object source, [Map descriptors]) {
+  factory FontFace(String family, Object source, [Map? descriptors]) {
     if (descriptors != null) {
       var descriptors_1 = convertDartToNative_Dictionary(descriptors);
       return FontFace._create_1(family, source, descriptors_1);
@@ -15757,26 +16418,57 @@
   static FontFace _create_2(family, source) =>
       JS('FontFace', 'new FontFace(#,#)', family, source);
 
-  String display;
+  String get display => JS("String", "#.display", this);
 
-  String family;
+  set display(String value) {
+    JS("void", "#.display = #", this, value);
+  }
 
-  String featureSettings;
+  String get family => JS("String", "#.family", this);
 
-  Future<FontFace> get loaded =>
-      promiseToFuture<FontFace>(JS("", "#.loaded", this));
+  set family(String value) {
+    JS("void", "#.family = #", this, value);
+  }
 
-  final String status;
+  String get featureSettings => JS("String", "#.featureSettings", this);
 
-  String stretch;
+  set featureSettings(String value) {
+    JS("void", "#.featureSettings = #", this, value);
+  }
 
-  String style;
+  Future get loaded => JS("Future", "#.loaded", this);
 
-  String unicodeRange;
+  String get status => JS("String", "#.status", this);
 
-  String variant;
+  String get stretch => JS("String", "#.stretch", this);
 
-  String weight;
+  set stretch(String value) {
+    JS("void", "#.stretch = #", this, value);
+  }
+
+  String get style => JS("String", "#.style", this);
+
+  set style(String value) {
+    JS("void", "#.style = #", this, value);
+  }
+
+  String get unicodeRange => JS("String", "#.unicodeRange", this);
+
+  set unicodeRange(String value) {
+    JS("void", "#.unicodeRange = #", this, value);
+  }
+
+  String get variant => JS("String", "#.variant", this);
+
+  set variant(String value) {
+    JS("void", "#.variant = #", this, value);
+  }
+
+  String get weight => JS("String", "#.weight", this);
+
+  set weight(String value) {
+    JS("void", "#.weight = #", this, value);
+  }
 
   Future<FontFace> load() =>
       promiseToFuture<FontFace>(JS("", "#.load()", this));
@@ -15801,17 +16493,17 @@
   static const EventStreamProvider<FontFaceSetLoadEvent> loadingErrorEvent =
       const EventStreamProvider<FontFaceSetLoadEvent>('loadingerror');
 
-  final String status;
+  String get status => JS("String", "#.status", this);
 
   FontFaceSet add(FontFace arg) native;
 
-  bool check(String font, [String text]) native;
+  bool check(String font, [String? text]) native;
 
   void clear() native;
 
   bool delete(FontFace arg) native;
 
-  void forEach(FontFaceSetForEachCallback callback, [Object thisArg]) native;
+  void forEach(FontFaceSetForEachCallback callback, [Object? thisArg]) native;
 
   bool has(FontFace arg) native;
 
@@ -15834,7 +16526,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FontFaceSetLoadEvent(String type, [Map eventInitDict]) {
+  factory FontFaceSetLoadEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return FontFaceSetLoadEvent._create_1(type, eventInitDict_1);
@@ -15849,7 +16541,7 @@
   static FontFaceSetLoadEvent _create_2(type) =>
       JS('FontFaceSetLoadEvent', 'new FontFaceSetLoadEvent(#)', type);
 
-  final List<FontFace> fontfaces;
+  List<FontFace> get fontfaces => JS("List<FontFace>", "#.fontfaces", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15862,7 +16554,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final FontFaceSet fonts;
+  FontFaceSet get fonts => JS("FontFaceSet", "#.fonts", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15882,9 +16574,9 @@
   static ForeignFetchEvent _create_1(type, eventInitDict) => JS(
       'ForeignFetchEvent', 'new ForeignFetchEvent(#,#)', type, eventInitDict);
 
-  final String origin;
+  String get origin => JS("String", "#.origin", this);
 
-  final _Request request;
+  _Request get request => JS("_Request", "#.request", this);
 
   void respondWith(Future r) native;
 }
@@ -15903,7 +16595,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FormData([FormElement form]) {
+  factory FormData([FormElement? form]) {
     if (form != null) {
       return FormData._create_1(form);
     }
@@ -15918,7 +16610,7 @@
   void append(String name, String value) native;
 
   @JSName('append')
-  void appendBlob(String name, Blob value, [String filename]) native;
+  void appendBlob(String name, Blob value, [String? filename]) native;
 
   void delete(String name) native;
 
@@ -15928,7 +16620,7 @@
 
   bool has(String name) native;
 
-  void set(String name, value, [String filename]) native;
+  void set(String name, value, [String? filename]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15941,7 +16633,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory FormElement() => JS(
+  factory FormElement() => JS<FormElement>(
       'returns:FormElement;creates:FormElement;new:true',
       '#.createElement(#)',
       document,
@@ -15953,25 +16645,61 @@
    */
   FormElement.created() : super.created();
 
-  String acceptCharset;
+  String get acceptCharset => JS("String", "#.acceptCharset", this);
 
-  String action;
+  set acceptCharset(String value) {
+    JS("void", "#.acceptCharset = #", this, value);
+  }
 
-  String autocomplete;
+  String get action => JS("String", "#.action", this);
 
-  String encoding;
+  set action(String value) {
+    JS("void", "#.action = #", this, value);
+  }
 
-  String enctype;
+  String get autocomplete => JS("String", "#.autocomplete", this);
 
-  final int length;
+  set autocomplete(String value) {
+    JS("void", "#.autocomplete = #", this, value);
+  }
 
-  String method;
+  String get encoding => JS("String", "#.encoding", this);
 
-  String name;
+  set encoding(String value) {
+    JS("void", "#.encoding = #", this, value);
+  }
 
-  bool noValidate;
+  String get enctype => JS("String", "#.enctype", this);
 
-  String target;
+  set enctype(String value) {
+    JS("void", "#.enctype = #", this, value);
+  }
+
+  int get length => JS("int", "#.length", this);
+
+  String get method => JS("String", "#.method", this);
+
+  set method(String value) {
+    JS("void", "#.method = #", this, value);
+  }
+
+  String get name => JS("String", "#.name", this);
+
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
+
+  bool get noValidate => JS("bool", "#.noValidate", this);
+
+  set noValidate(bool value) {
+    JS("void", "#.noValidate = #", this, value);
+  }
+
+  String get target => JS("String", "#.target", this);
+
+  set target(String value) {
+    JS("void", "#.target = #", this, value);
+  }
 
   Object __getter__(String name) native;
 
@@ -16019,27 +16747,28 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List<num> axes;
+  List<num> get axes => JS("List<num>", "#.axes", this);
 
   @Creates('JSExtendableArray|GamepadButton')
   @Returns('JSExtendableArray')
-  final List<GamepadButton> buttons;
+  List<GamepadButton> get buttons =>
+      JS("List<GamepadButton>", "#.buttons", this);
 
-  final bool connected;
+  bool get connected => JS("bool", "#.connected", this);
 
-  final int displayId;
+  int get displayId => JS("int", "#.displayId", this);
 
-  final String hand;
+  String get hand => JS("String", "#.hand", this);
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final int index;
+  int get index => JS("int", "#.index", this);
 
-  final String mapping;
+  String get mapping => JS("String", "#.mapping", this);
 
-  final GamepadPose pose;
+  final GamepadPose? pose;
 
-  final int timestamp;
+  int get timestamp => JS("int", "#.timestamp", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16052,11 +16781,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool pressed;
+  bool get pressed => JS("bool", "#.pressed", this);
 
-  final bool touched;
+  bool get touched => JS("bool", "#.touched", this);
 
-  final num value;
+  num get value => JS("num", "#.value", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16069,7 +16798,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory GamepadEvent(String type, [Map eventInitDict]) {
+  factory GamepadEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return GamepadEvent._create_1(type, eventInitDict_1);
@@ -16081,7 +16810,7 @@
   static GamepadEvent _create_2(type) =>
       JS('GamepadEvent', 'new GamepadEvent(#)', type);
 
-  final Gamepad gamepad;
+  Gamepad get gamepad => JS("Gamepad", "#.gamepad", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16094,21 +16823,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Float32List angularAcceleration;
+  final Float32List? angularAcceleration;
 
-  final Float32List angularVelocity;
+  final Float32List? angularVelocity;
 
-  final bool hasOrientation;
+  bool get hasOrientation => JS("bool", "#.hasOrientation", this);
 
-  final bool hasPosition;
+  bool get hasPosition => JS("bool", "#.hasPosition", this);
 
-  final Float32List linearAcceleration;
+  final Float32List? linearAcceleration;
 
-  final Float32List linearVelocity;
+  final Float32List? linearVelocity;
 
-  final Float32List orientation;
+  final Float32List? orientation;
 
-  final Float32List position;
+  final Float32List? position;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16118,7 +16847,7 @@
 @Native("Geolocation")
 class Geolocation extends Interceptor {
   Future<Geoposition> getCurrentPosition(
-      {bool enableHighAccuracy, Duration timeout, Duration maximumAge}) {
+      {bool? enableHighAccuracy, Duration? timeout, Duration? maximumAge}) {
     var options = {};
     if (enableHighAccuracy != null) {
       options['enableHighAccuracy'] = enableHighAccuracy;
@@ -16143,7 +16872,7 @@
   }
 
   Stream<Geoposition> watchPosition(
-      {bool enableHighAccuracy, Duration timeout, Duration maximumAge}) {
+      {bool? enableHighAccuracy, Duration? timeout, Duration? maximumAge}) {
     var options = {};
     if (enableHighAccuracy != null) {
       options['enableHighAccuracy'] = enableHighAccuracy;
@@ -16197,7 +16926,7 @@
   void _clearWatch(int watchID) native;
 
   void _getCurrentPosition(_PositionCallback successCallback,
-      [_PositionErrorCallback errorCallback, Map options]) {
+      [_PositionErrorCallback? errorCallback, Map? options]) {
     if (options != null) {
       var successCallback_1 = convertDartClosureToJS(successCallback, 1);
       var options_2 = convertDartToNative_Dictionary(options);
@@ -16224,7 +16953,7 @@
   void _getCurrentPosition_3(successCallback) native;
 
   int _watchPosition(_PositionCallback successCallback,
-      [_PositionErrorCallback errorCallback, Map options]) {
+      [_PositionErrorCallback? errorCallback, Map? options]) {
     if (options != null) {
       var successCallback_1 = convertDartClosureToJS(successCallback, 1);
       var options_2 = convertDartToNative_Dictionary(options);
@@ -16271,9 +17000,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Coordinates coords;
+  Coordinates get coords => JS("Coordinates", "#.coords", this);
 
-  final int timestamp;
+  int get timestamp => JS("int", "#.timestamp", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16593,7 +17322,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory Gyroscope([Map sensorOptions]) {
+  factory Gyroscope([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return Gyroscope._create_1(sensorOptions_1);
@@ -16624,8 +17353,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory HRElement() => JS('returns:HRElement;creates:HRElement;new:true',
-      '#.createElement(#)', document, "hr");
+  factory HRElement() => JS<HRElement>(
+      'returns:HRElement;creates:HRElement;new:true',
+      '#.createElement(#)',
+      document,
+      "hr");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -16633,7 +17365,11 @@
    */
   HRElement.created() : super.created();
 
-  String color;
+  String get color => JS("String", "#.color", this);
+
+  set color(String value) {
+    JS("void", "#.color = #", this, value);
+  }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16662,7 +17398,7 @@
         convertDartToNative_Dictionary(options));
   }
 
-  factory HashChangeEvent._(String type, [Map eventInitDict]) {
+  factory HashChangeEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return HashChangeEvent._create_1(type, eventInitDict_1);
@@ -16678,10 +17414,10 @@
   static bool get supported => Device.isEventTypeSupported('HashChangeEvent');
 
   @JSName('newURL')
-  final String newUrl;
+  String get newUrl => JS("String", "#.newURL", this);
 
   @JSName('oldURL')
-  final String oldUrl;
+  String get oldUrl => JS("String", "#.oldURL", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16694,7 +17430,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory HeadElement() => JS(
+  factory HeadElement() => JS<HeadElement>(
       'returns:HeadElement;creates:HeadElement;new:true',
       '#.createElement(#)',
       document,
@@ -16717,7 +17453,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory Headers([Object init]) {
+  factory Headers([Object? init]) {
     if (init != null) {
       return Headers._create_1(init);
     }
@@ -16737,37 +17473,37 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory HeadingElement.h1() => JS(
+  factory HeadingElement.h1() => JS<HeadingElement>(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h1");
 
-  factory HeadingElement.h2() => JS(
+  factory HeadingElement.h2() => JS<HeadingElement>(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h2");
 
-  factory HeadingElement.h3() => JS(
+  factory HeadingElement.h3() => JS<HeadingElement>(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h3");
 
-  factory HeadingElement.h4() => JS(
+  factory HeadingElement.h4() => JS<HeadingElement>(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h4");
 
-  factory HeadingElement.h5() => JS(
+  factory HeadingElement.h5() => JS<HeadingElement>(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h5");
 
-  factory HeadingElement.h6() => JS(
+  factory HeadingElement.h6() => JS<HeadingElement>(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
@@ -16800,9 +17536,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  String scrollRestoration;
+  String get scrollRestoration => JS("String", "#.scrollRestoration", this);
+
+  set scrollRestoration(String value) {
+    JS("void", "#.scrollRestoration = #", this, value);
+  }
 
   dynamic get state =>
       convertNativeToDart_SerializedScriptValue(this._get_state);
@@ -16815,13 +17555,13 @@
 
   void forward() native;
 
-  void go([int delta]) native;
+  void go([int? delta]) native;
 
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void pushState(/*SerializedScriptValue*/ data, String title, String url) {
+  void pushState(/*SerializedScriptValue*/ data, String title, String? url) {
     var data_1 = convertDartToNative_SerializedScriptValue(data);
     _pushState_1(data_1, title, url);
     return;
@@ -16838,7 +17578,7 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void replaceState(/*SerializedScriptValue*/ data, String title, String url) {
+  void replaceState(/*SerializedScriptValue*/ data, String title, String? url) {
     var data_1 = convertDartToNative_SerializedScriptValue(data);
     _replaceState_1(data_1, title, url);
     return;
@@ -17098,7 +17838,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory HtmlHtmlElement() => JS(
+  factory HtmlHtmlElement() => JS<HtmlHtmlElement>(
       'returns:HtmlHtmlElement;creates:HtmlHtmlElement;new:true',
       '#.createElement(#)',
       document,
@@ -17121,27 +17861,67 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String hash;
+  String get hash => JS("String", "#.hash", this);
 
-  String host;
+  set hash(String value) {
+    JS("void", "#.hash = #", this, value);
+  }
 
-  String hostname;
+  String get host => JS("String", "#.host", this);
 
-  String href;
+  set host(String value) {
+    JS("void", "#.host = #", this, value);
+  }
 
-  final String origin;
+  String get hostname => JS("String", "#.hostname", this);
 
-  String password;
+  set hostname(String value) {
+    JS("void", "#.hostname = #", this, value);
+  }
 
-  String pathname;
+  String get href => JS("String", "#.href", this);
 
-  String port;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
 
-  String protocol;
+  String get origin => JS("String", "#.origin", this);
 
-  String search;
+  String get password => JS("String", "#.password", this);
 
-  String username;
+  set password(String value) {
+    JS("void", "#.password = #", this, value);
+  }
+
+  String get pathname => JS("String", "#.pathname", this);
+
+  set pathname(String value) {
+    JS("void", "#.pathname = #", this, value);
+  }
+
+  String get port => JS("String", "#.port", this);
+
+  set port(String value) {
+    JS("void", "#.port = #", this, value);
+  }
+
+  String get protocol => JS("String", "#.protocol", this);
+
+  set protocol(String value) {
+    JS("void", "#.protocol = #", this, value);
+  }
+
+  String get search => JS("String", "#.search", this);
+
+  set search(String value) {
+    JS("void", "#.search = #", this, value);
+  }
+
+  String get username => JS("String", "#.username", this);
+
+  set username(String value) {
+    JS("void", "#.username = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -17230,7 +18010,7 @@
    * * [request]
    */
   static Future<String> getString(String url,
-      {bool withCredentials, void onProgress(ProgressEvent e)}) {
+      {bool? withCredentials, void onProgress(ProgressEvent e)?}) {
     return request(url,
             withCredentials: withCredentials, onProgress: onProgress)
         .then((HttpRequest xhr) => xhr.responseText);
@@ -17628,7 +18408,8 @@
    *   </tr>
    * </table>
    */
-  final int readyState;
+
+  int get readyState => JS("int", "#.readyState", this);
 
   /**
    * The data received as a reponse from the request.
@@ -17661,7 +18442,8 @@
   /**
    * The response in String form or empty String on failure.
    */
-  final String responseText;
+
+  String get responseText => JS("String", "#.responseText", this);
 
   /**
    * [String] telling the server the desired response format.
@@ -17674,10 +18456,27 @@
    * See also: [MDN
    * responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype)
    */
-  String responseType;
+
+  String get responseType => JS("String", "#.responseType", this);
+
+  /**
+   * [String] telling the server the desired response format.
+   *
+   * Default is `String`.
+   * Other options are one of 'arraybuffer', 'blob', 'document', 'json',
+   * 'text'. Some newer browsers will throw NS_ERROR_DOM_INVALID_ACCESS_ERR if
+   * `responseType` is set while performing a synchronous request.
+   *
+   * See also: [MDN
+   * responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype)
+   */
+
+  set responseType(String value) {
+    JS("void", "#.responseType = #", this, value);
+  }
 
   @JSName('responseURL')
-  final String responseUrl;
+  String get responseUrl => JS("String", "#.responseURL", this);
 
   @JSName('responseXML')
   /**
@@ -17687,19 +18486,21 @@
    * `text/xml` stream, unless responseType = 'document' and the request is
    * synchronous.
    */
-  final Document responseXml;
+  final Document? responseXml;
 
   /**
    * The HTTP result code from the request (200, 404, etc).
    * See also: [HTTP Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
    */
-  final int status;
+
+  int get status => JS("int", "#.status", this);
 
   /**
    * The request response string (such as \"OK\").
    * See also: [HTTP Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
    */
-  final String statusText;
+
+  String get statusText => JS("String", "#.statusText", this);
 
   /**
    * Length of time in milliseconds before a request is automatically
@@ -17716,14 +18517,35 @@
    * * [The timeout attribute](http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)
    *   from W3C.
    */
-  int timeout;
+
+  int get timeout => JS("int", "#.timeout", this);
+
+  /**
+   * Length of time in milliseconds before a request is automatically
+   * terminated.
+   *
+   * When the time has passed, a [TimeoutEvent] is dispatched.
+   *
+   * If [timeout] is set to 0, then the request will not time out.
+   *
+   * ## Other resources
+   *
+   * * [XMLHttpRequest.timeout](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-timeout)
+   *   from MDN.
+   * * [The timeout attribute](http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)
+   *   from W3C.
+   */
+
+  set timeout(int value) {
+    JS("void", "#.timeout = #", this, value);
+  }
 
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
    * The events fired will be members of [HttpRequestUploadEvents].
    */
   @Unstable()
-  final HttpRequestUpload upload;
+  HttpRequestUpload get upload => JS("HttpRequestUpload", "#.upload", this);
 
   /**
    * True if cross-site requests should use credentials such as cookies
@@ -17731,7 +18553,19 @@
    *
    * This value is ignored for same-site requests.
    */
-  bool withCredentials;
+
+  bool get withCredentials => JS("bool", "#.withCredentials", this);
+
+  /**
+   * True if cross-site requests should use credentials such as cookies
+   * or authorization headers; false otherwise.
+   *
+   * This value is ignored for same-site requests.
+   */
+
+  set withCredentials(bool value) {
+    JS("void", "#.withCredentials = #", this, value);
+  }
 
   /**
    * Stop the current request.
@@ -17944,7 +18778,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory IFrameElement() => JS(
+  factory IFrameElement() => JS<IFrameElement>(
       'returns:IFrameElement;creates:IFrameElement;new:true',
       '#.createElement(#)',
       document,
@@ -17956,34 +18790,74 @@
    */
   IFrameElement.created() : super.created();
 
-  String allow;
+  String get allow => JS("String", "#.allow", this);
 
-  bool allowFullscreen;
+  set allow(String value) {
+    JS("void", "#.allow = #", this, value);
+  }
 
-  bool allowPaymentRequest;
+  bool get allowFullscreen => JS("bool", "#.allowFullscreen", this);
 
-  WindowBase get contentWindow =>
+  set allowFullscreen(bool value) {
+    JS("void", "#.allowFullscreen = #", this, value);
+  }
+
+  bool get allowPaymentRequest => JS("bool", "#.allowPaymentRequest", this);
+
+  set allowPaymentRequest(bool value) {
+    JS("void", "#.allowPaymentRequest = #", this, value);
+  }
+
+  WindowBase? get contentWindow =>
       _convertNativeToDart_Window(this._get_contentWindow);
   @JSName('contentWindow')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_contentWindow;
 
-  String csp;
+  String get csp => JS("String", "#.csp", this);
 
-  String height;
+  set csp(String value) {
+    JS("void", "#.csp = #", this, value);
+  }
 
-  String name;
+  String get height => JS("String", "#.height", this);
 
-  String referrerPolicy;
+  set height(String value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  final DomTokenList sandbox;
+  String get name => JS("String", "#.name", this);
 
-  String src;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  String srcdoc;
+  String get referrerPolicy => JS("String", "#.referrerPolicy", this);
 
-  String width;
+  set referrerPolicy(String value) {
+    JS("void", "#.referrerPolicy = #", this, value);
+  }
+
+  DomTokenList get sandbox => JS("DomTokenList", "#.sandbox", this);
+
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get srcdoc => JS("String", "#.srcdoc", this);
+
+  set srcdoc(String value) {
+    JS("void", "#.srcdoc = #", this, value);
+  }
+
+  String get width => JS("String", "#.width", this);
+
+  set width(String value) {
+    JS("void", "#.width = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -17996,7 +18870,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool didTimeout;
+  bool get didTimeout => JS("bool", "#.didTimeout", this);
 
   double timeRemaining() native;
 }
@@ -18018,9 +18892,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int height;
+  int get height => JS("int", "#.height", this);
 
-  final int width;
+  int get width => JS("int", "#.width", this);
 
   void close() native;
 }
@@ -18035,9 +18909,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final CanvasElement canvas;
+  CanvasElement get canvas => JS("CanvasElement", "#.canvas", this);
 
-  void transferFromImageBitmap(ImageBitmap bitmap) native;
+  void transferFromImageBitmap(ImageBitmap? bitmap) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -18056,7 +18930,7 @@
   static ImageCapture _create_1(track) =>
       JS('ImageCapture', 'new ImageCapture(#)', track);
 
-  final MediaStreamTrack track;
+  MediaStreamTrack get track => JS("MediaStreamTrack", "#.track", this);
 
   Future<PhotoCapabilities> getPhotoCapabilities() =>
       promiseToFuture<PhotoCapabilities>(
@@ -18073,7 +18947,7 @@
     return promiseToFuture(JS("", "#.setOptions(#)", this, photoSettings_dict));
   }
 
-  Future<Blob> takePhoto([Map photoSettings]) {
+  Future<Blob> takePhoto([Map? photoSettings]) {
     var photoSettings_dict = null;
     if (photoSettings != null) {
       photoSettings_dict = convertDartToNative_Dictionary(photoSettings);
@@ -18093,7 +18967,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ImageData(data_OR_sw, int sh_OR_sw, [int sh]) {
+  factory ImageData(data_OR_sw, int sh_OR_sw, [int? sh]) {
     if ((sh_OR_sw is int) && (data_OR_sw is int) && sh == null) {
       return ImageData._create_1(data_OR_sw, sh_OR_sw);
     }
@@ -18114,11 +18988,11 @@
 
   @Creates('NativeUint8ClampedList')
   @Returns('NativeUint8ClampedList')
-  final Uint8ClampedList data;
+  Uint8ClampedList get data => JS("Uint8ClampedList", "#.data", this);
 
-  final int height;
+  int get height => JS("int", "#.height", this);
 
-  final int width;
+  int get width => JS("int", "#.width", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -18131,9 +19005,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ImageElement({String src, int width, int height}) {
-    ImageElement e = JS('returns:ImageElement;creates:ImageElement;new:true',
-        '#.createElement(#)', document, "img");
+  factory ImageElement({String? src, int? width, int? height}) {
+    ImageElement e = JS<ImageElement>(
+        'returns:ImageElement;creates:ImageElement;new:true',
+        '#.createElement(#)',
+        document,
+        "img");
     if (src != null) e.src = src;
     if (width != null) e.width = width;
     if (height != null) e.height = height;
@@ -18146,35 +19023,75 @@
    */
   ImageElement.created() : super.created();
 
-  String alt;
+  String get alt => JS("String", "#.alt", this);
 
-  String async;
+  set alt(String value) {
+    JS("void", "#.alt = #", this, value);
+  }
 
-  final bool complete;
+  String get async => JS("String", "#.async", this);
 
-  String crossOrigin;
+  set async(String value) {
+    JS("void", "#.async = #", this, value);
+  }
 
-  final String currentSrc;
+  bool get complete => JS("bool", "#.complete", this);
 
-  int height;
+  String? crossOrigin;
 
-  bool isMap;
+  String get currentSrc => JS("String", "#.currentSrc", this);
 
-  final int naturalHeight;
+  int get height => JS("int", "#.height", this);
 
-  final int naturalWidth;
+  set height(int value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  String referrerPolicy;
+  bool get isMap => JS("bool", "#.isMap", this);
 
-  String sizes;
+  set isMap(bool value) {
+    JS("void", "#.isMap = #", this, value);
+  }
 
-  String src;
+  int get naturalHeight => JS("int", "#.naturalHeight", this);
 
-  String srcset;
+  int get naturalWidth => JS("int", "#.naturalWidth", this);
 
-  String useMap;
+  String get referrerPolicy => JS("String", "#.referrerPolicy", this);
 
-  int width;
+  set referrerPolicy(String value) {
+    JS("void", "#.referrerPolicy = #", this, value);
+  }
+
+  String get sizes => JS("String", "#.sizes", this);
+
+  set sizes(String value) {
+    JS("void", "#.sizes = #", this, value);
+  }
+
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get srcset => JS("String", "#.srcset", this);
+
+  set srcset(String value) {
+    JS("void", "#.srcset = #", this, value);
+  }
+
+  String get useMap => JS("String", "#.useMap", this);
+
+  set useMap(String value) {
+    JS("void", "#.useMap = #", this, value);
+  }
+
+  int get width => JS("int", "#.width", this);
+
+  set width(int value) {
+    JS("void", "#.width = #", this, value);
+  }
 
   Future decode() => promiseToFuture(JS("", "#.decode()", this));
 }
@@ -18189,7 +19106,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory InputDeviceCapabilities([Map deviceInitDict]) {
+  factory InputDeviceCapabilities([Map? deviceInitDict]) {
     if (deviceInitDict != null) {
       var deviceInitDict_1 = convertDartToNative_Dictionary(deviceInitDict);
       return InputDeviceCapabilities._create_1(deviceInitDict_1);
@@ -18203,7 +19120,7 @@
   static InputDeviceCapabilities _create_2() =>
       JS('InputDeviceCapabilities', 'new InputDeviceCapabilities()');
 
-  final bool firesTouchEvents;
+  bool get firesTouchEvents => JS("bool", "#.firesTouchEvents", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -18233,7 +19150,7 @@
         ImageButtonInputElement,
         ResetButtonInputElement,
         ButtonInputElement {
-  factory InputElement({String type}) {
+  factory InputElement({String? type}) {
     InputElement e = document.createElement("input");
     if (type != null) {
       try {
@@ -18255,95 +19172,231 @@
    */
   InputElement.created() : super.created();
 
-  String accept;
+  String get accept => JS("String", "#.accept", this);
 
-  String alt;
+  set accept(String value) {
+    JS("void", "#.accept = #", this, value);
+  }
 
-  String autocapitalize;
+  String get alt => JS("String", "#.alt", this);
 
-  String autocomplete;
+  set alt(String value) {
+    JS("void", "#.alt = #", this, value);
+  }
 
-  bool autofocus;
+  String get autocapitalize => JS("String", "#.autocapitalize", this);
 
-  String capture;
+  set autocapitalize(String value) {
+    JS("void", "#.autocapitalize = #", this, value);
+  }
 
-  bool checked;
+  String get autocomplete => JS("String", "#.autocomplete", this);
 
-  bool defaultChecked;
+  set autocomplete(String value) {
+    JS("void", "#.autocomplete = #", this, value);
+  }
 
-  String defaultValue;
+  bool get autofocus => JS("bool", "#.autofocus", this);
 
-  String dirName;
+  set autofocus(bool value) {
+    JS("void", "#.autofocus = #", this, value);
+  }
 
-  bool disabled;
+  String get capture => JS("String", "#.capture", this);
+
+  set capture(String value) {
+    JS("void", "#.capture = #", this, value);
+  }
+
+  bool get checked => JS("bool", "#.checked", this);
+
+  set checked(bool value) {
+    JS("void", "#.checked = #", this, value);
+  }
+
+  bool get defaultChecked => JS("bool", "#.defaultChecked", this);
+
+  set defaultChecked(bool value) {
+    JS("void", "#.defaultChecked = #", this, value);
+  }
+
+  String get defaultValue => JS("String", "#.defaultValue", this);
+
+  set defaultValue(String value) {
+    JS("void", "#.defaultValue = #", this, value);
+  }
+
+  String get dirName => JS("String", "#.dirName", this);
+
+  set dirName(String value) {
+    JS("void", "#.dirName = #", this, value);
+  }
+
+  bool get disabled => JS("bool", "#.disabled", this);
+
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
   @Returns('FileList|Null')
   @Creates('FileList')
-  List<File> files;
+  List<File>? files;
 
-  final FormElement form;
+  final FormElement? form;
 
-  String formAction;
+  String get formAction => JS("String", "#.formAction", this);
 
-  String formEnctype;
+  set formAction(String value) {
+    JS("void", "#.formAction = #", this, value);
+  }
 
-  String formMethod;
+  String get formEnctype => JS("String", "#.formEnctype", this);
 
-  bool formNoValidate;
+  set formEnctype(String value) {
+    JS("void", "#.formEnctype = #", this, value);
+  }
 
-  String formTarget;
+  String get formMethod => JS("String", "#.formMethod", this);
 
-  int height;
+  set formMethod(String value) {
+    JS("void", "#.formMethod = #", this, value);
+  }
 
-  bool incremental;
+  bool get formNoValidate => JS("bool", "#.formNoValidate", this);
 
-  bool indeterminate;
+  set formNoValidate(bool value) {
+    JS("void", "#.formNoValidate = #", this, value);
+  }
+
+  String get formTarget => JS("String", "#.formTarget", this);
+
+  set formTarget(String value) {
+    JS("void", "#.formTarget = #", this, value);
+  }
+
+  int get height => JS("int", "#.height", this);
+
+  set height(int value) {
+    JS("void", "#.height = #", this, value);
+  }
+
+  bool get incremental => JS("bool", "#.incremental", this);
+
+  set incremental(bool value) {
+    JS("void", "#.incremental = #", this, value);
+  }
+
+  bool get indeterminate => JS("bool", "#.indeterminate", this);
+
+  set indeterminate(bool value) {
+    JS("void", "#.indeterminate = #", this, value);
+  }
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  final HtmlElement list;
+  final HtmlElement? list;
 
-  String max;
+  String get max => JS("String", "#.max", this);
 
-  int maxLength;
+  set max(String value) {
+    JS("void", "#.max = #", this, value);
+  }
 
-  String min;
+  int get maxLength => JS("int", "#.maxLength", this);
 
-  int minLength;
+  set maxLength(int value) {
+    JS("void", "#.maxLength = #", this, value);
+  }
 
-  bool multiple;
+  String get min => JS("String", "#.min", this);
 
-  String name;
+  set min(String value) {
+    JS("void", "#.min = #", this, value);
+  }
 
-  String pattern;
+  int get minLength => JS("int", "#.minLength", this);
 
-  String placeholder;
+  set minLength(int value) {
+    JS("void", "#.minLength = #", this, value);
+  }
 
-  bool readOnly;
+  bool get multiple => JS("bool", "#.multiple", this);
 
-  bool required;
+  set multiple(bool value) {
+    JS("void", "#.multiple = #", this, value);
+  }
 
-  String selectionDirection;
+  String get name => JS("String", "#.name", this);
 
-  int selectionEnd;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  int selectionStart;
+  String get pattern => JS("String", "#.pattern", this);
 
-  int size;
+  set pattern(String value) {
+    JS("void", "#.pattern = #", this, value);
+  }
 
-  String src;
+  String get placeholder => JS("String", "#.placeholder", this);
 
-  String step;
+  set placeholder(String value) {
+    JS("void", "#.placeholder = #", this, value);
+  }
 
-  String type;
+  bool get readOnly => JS("bool", "#.readOnly", this);
 
-  final String validationMessage;
+  set readOnly(bool value) {
+    JS("void", "#.readOnly = #", this, value);
+  }
 
-  final ValidityState validity;
+  bool get required => JS("bool", "#.required", this);
 
-  String value;
+  set required(bool value) {
+    JS("void", "#.required = #", this, value);
+  }
+
+  String? selectionDirection;
+
+  int? selectionEnd;
+
+  int? selectionStart;
+
+  int get size => JS("int", "#.size", this);
+
+  set size(int value) {
+    JS("void", "#.size = #", this, value);
+  }
+
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get step => JS("String", "#.step", this);
+
+  set step(String value) {
+    JS("void", "#.step = #", this, value);
+  }
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
+
+  String get validationMessage => JS("String", "#.validationMessage", this);
+
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
+
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 
   DateTime get valueAsDate =>
       convertNativeToDart_DateTime(this._get_valueAsDate);
@@ -18355,25 +19408,40 @@
     this._set_valueAsDate = convertDartToNative_DateTime(value);
   }
 
-  set _set_valueAsDate(/*dynamic*/ value) {
+  set _set_valueAsDate(/*dynamic?*/ value) {
     JS("void", "#.valueAsDate = #", this, value);
   }
 
-  num valueAsNumber;
+  num get valueAsNumber => JS("num", "#.valueAsNumber", this);
+
+  set valueAsNumber(num value) {
+    JS("void", "#.valueAsNumber = #", this, value);
+  }
 
   @JSName('webkitEntries')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final List<Entry> entries;
+  List<Entry> get entries => JS("List<Entry>", "#.webkitEntries", this);
 
   @JSName('webkitdirectory')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  bool directory;
+  bool get directory => JS("bool", "#.webkitdirectory", this);
 
-  int width;
+  @JSName('webkitdirectory')
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @SupportedBrowser(SupportedBrowser.SAFARI)
+  set directory(bool value) {
+    JS("void", "#.webkitdirectory = #", this, value);
+  }
 
-  final bool willValidate;
+  int get width => JS("int", "#.width", this);
+
+  set width(int value) {
+    JS("void", "#.width = #", this, value);
+  }
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
 
   bool checkValidity() native;
 
@@ -18384,13 +19452,13 @@
   void setCustomValidity(String error) native;
 
   void setRangeText(String replacement,
-      {int start, int end, String selectionMode}) native;
+      {int? start, int? end, String? selectionMode}) native;
 
-  void setSelectionRange(int start, int end, [String direction]) native;
+  void setSelectionRange(int start, int end, [String? direction]) native;
 
-  void stepDown([int n]) native;
+  void stepDown([int? n]) native;
 
-  void stepUp([int n]) native;
+  void stepUp([int? n]) native;
 }
 
 // Interfaces representing the InputElement APIs which are supported
@@ -18477,7 +19545,7 @@
 
   String dirName;
 
-  Element get list;
+  Element? get list;
 
   /// Returns true if this input type is supported on the current platform.
   static bool get supported {
@@ -18493,7 +19561,7 @@
 
   String dirName;
 
-  Element get list;
+  Element? get list;
 }
 
 /**
@@ -18508,7 +19576,7 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  Element get list;
+  Element? get list;
 
   /// Returns true if this input type is supported on the current platform.
   static bool get supported {
@@ -18531,7 +19599,7 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  Element get list;
+  Element? get list;
 
   /// Returns true if this input type is supported on the current platform.
   static bool get supported {
@@ -18555,7 +19623,7 @@
 
   bool autofocus;
 
-  Element get list;
+  Element? get list;
 
   int maxLength;
 
@@ -18588,7 +19656,7 @@
  * Base interface for all input element types which involve ranges.
  */
 abstract class RangeInputElementBase implements InputElementBase {
-  Element get list;
+  Element? get list;
 
   String max;
 
@@ -18861,7 +19929,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory InstallEvent(String type, [Map eventInitDict]) {
+  factory InstallEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return InstallEvent._create_1(type, eventInitDict_1);
@@ -18894,7 +19962,7 @@
   }
 
   factory IntersectionObserver(IntersectionObserverCallback callback,
-      [Map options]) {
+      [Map? options]) {
     if (options != null) {
       var callback_1 = convertDartClosureToJS(callback, 2);
       var options_2 = convertDartToNative_Dictionary(options);
@@ -18911,11 +19979,11 @@
   static IntersectionObserver _create_2(callback) =>
       JS('IntersectionObserver', 'new IntersectionObserver(#)', callback);
 
-  final Element root;
+  final Element? root;
 
-  final String rootMargin;
+  String get rootMargin => JS("String", "#.rootMargin", this);
 
-  final List<num> thresholds;
+  List<num> get thresholds => JS("List<num>", "#.thresholds", this);
 
   void disconnect() native;
 
@@ -18944,19 +20012,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final DomRectReadOnly boundingClientRect;
+  DomRectReadOnly get boundingClientRect =>
+      JS("DomRectReadOnly", "#.boundingClientRect", this);
 
-  final num intersectionRatio;
+  num get intersectionRatio => JS("num", "#.intersectionRatio", this);
 
-  final DomRectReadOnly intersectionRect;
+  DomRectReadOnly get intersectionRect =>
+      JS("DomRectReadOnly", "#.intersectionRect", this);
 
-  final bool isIntersecting;
+  bool get isIntersecting => JS("bool", "#.isIntersecting", this);
 
-  final DomRectReadOnly rootBounds;
+  final DomRectReadOnly? rootBounds;
 
-  final Element target;
+  Element get target => JS("Element", "#.target", this);
 
-  final num time;
+  num get time => JS("num", "#.time", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -18969,11 +20039,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int lineNumber;
+  int get lineNumber => JS("int", "#.lineNumber", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
-  final String sourceFile;
+  String get sourceFile => JS("String", "#.sourceFile", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19063,7 +20133,7 @@
 
   int get which => _which;
 
-  factory KeyboardEvent._(String type, [Map eventInitDict]) {
+  factory KeyboardEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return KeyboardEvent._create_1(type, eventInitDict_1);
@@ -19083,29 +20153,29 @@
 
   static const int DOM_KEY_LOCATION_STANDARD = 0x00;
 
-  final bool altKey;
+  bool get altKey => JS("bool", "#.altKey", this);
 
   @JSName('charCode')
-  final int _charCode;
+  int get _charCode => JS("int", "#.charCode", this);
 
-  final String code;
+  String get code => JS("String", "#.code", this);
 
-  final bool ctrlKey;
+  bool get ctrlKey => JS("bool", "#.ctrlKey", this);
 
-  final bool isComposing;
+  bool get isComposing => JS("bool", "#.isComposing", this);
 
-  final String key;
+  String get key => JS("String", "#.key", this);
 
   @JSName('keyCode')
-  final int _keyCode;
+  int get _keyCode => JS("int", "#.keyCode", this);
 
-  final int location;
+  int get location => JS("int", "#.location", this);
 
-  final bool metaKey;
+  bool get metaKey => JS("bool", "#.metaKey", this);
 
-  final bool repeat;
+  bool get repeat => JS("bool", "#.repeat", this);
 
-  final bool shiftKey;
+  bool get shiftKey => JS("bool", "#.shiftKey", this);
 
   bool getModifierState(String keyArg) native;
 }
@@ -19120,7 +20190,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory KeyframeEffect(Element target, Object effect, [Object options]) {
+  factory KeyframeEffect(Element? target, Object? effect, [Object? options]) {
     if (options != null) {
       return KeyframeEffect._create_1(target, effect, options);
     }
@@ -19142,8 +20212,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory KeyframeEffectReadOnly(Element target, Object effect,
-      [Object options]) {
+  factory KeyframeEffectReadOnly(Element? target, Object? effect,
+      [Object? options]) {
     if (options != null) {
       return KeyframeEffectReadOnly._create_1(target, effect, options);
     }
@@ -19172,8 +20242,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory LIElement() => JS('returns:LIElement;creates:LIElement;new:true',
-      '#.createElement(#)', document, "li");
+  factory LIElement() => JS<LIElement>(
+      'returns:LIElement;creates:LIElement;new:true',
+      '#.createElement(#)',
+      document,
+      "li");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -19181,7 +20254,11 @@
    */
   LIElement.created() : super.created();
 
-  int value;
+  int get value => JS("int", "#.value", this);
+
+  set value(int value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19194,7 +20271,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory LabelElement() => JS(
+  factory LabelElement() => JS<LabelElement>(
       'returns:LabelElement;creates:LabelElement;new:true',
       '#.createElement(#)',
       document,
@@ -19206,11 +20283,15 @@
    */
   LabelElement.created() : super.created();
 
-  final HtmlElement control;
+  final HtmlElement? control;
 
-  final FormElement form;
+  final FormElement? form;
 
-  String htmlFor;
+  String get htmlFor => JS("String", "#.htmlFor", this);
+
+  set htmlFor(String value) {
+    JS("void", "#.htmlFor = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19223,7 +20304,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory LegendElement() => JS(
+  factory LegendElement() => JS<LegendElement>(
       'returns:LegendElement;creates:LegendElement;new:true',
       '#.createElement(#)',
       document,
@@ -19235,7 +20316,7 @@
    */
   LegendElement.created() : super.created();
 
-  final FormElement form;
+  final FormElement? form;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19248,7 +20329,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory LinearAccelerationSensor([Map sensorOptions]) {
+  factory LinearAccelerationSensor([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return LinearAccelerationSensor._create_1(sensorOptions_1);
@@ -19273,7 +20354,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory LinkElement() => JS(
+  factory LinkElement() => JS<LinkElement>(
       'returns:LinkElement;creates:LinkElement;new:true',
       '#.createElement(#)',
       document,
@@ -19285,35 +20366,75 @@
    */
   LinkElement.created() : super.created();
 
-  String as;
+  String get as => JS("String", "#.as", this);
 
-  String crossOrigin;
+  set as(String value) {
+    JS("void", "#.as = #", this, value);
+  }
 
-  bool disabled;
+  String? crossOrigin;
 
-  String href;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  String hreflang;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
-  final Document import;
+  String get href => JS("String", "#.href", this);
 
-  String integrity;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
 
-  String media;
+  String get hreflang => JS("String", "#.hreflang", this);
 
-  String referrerPolicy;
+  set hreflang(String value) {
+    JS("void", "#.hreflang = #", this, value);
+  }
 
-  String rel;
+  final Document? import;
 
-  final DomTokenList relList;
+  String get integrity => JS("String", "#.integrity", this);
 
-  String scope;
+  set integrity(String value) {
+    JS("void", "#.integrity = #", this, value);
+  }
 
-  final StyleSheet sheet;
+  String get media => JS("String", "#.media", this);
 
-  final DomTokenList sizes;
+  set media(String value) {
+    JS("void", "#.media = #", this, value);
+  }
 
-  String type;
+  String get referrerPolicy => JS("String", "#.referrerPolicy", this);
+
+  set referrerPolicy(String value) {
+    JS("void", "#.referrerPolicy = #", this, value);
+  }
+
+  String get rel => JS("String", "#.rel", this);
+
+  set rel(String value) {
+    JS("void", "#.rel = #", this, value);
+  }
+
+  DomTokenList get relList => JS("DomTokenList", "#.relList", this);
+
+  String get scope => JS("String", "#.scope", this);
+
+  set scope(String value) {
+    JS("void", "#.scope = #", this, value);
+  }
+
+  final StyleSheet? sheet;
+
+  DomTokenList get sizes => JS("DomTokenList", "#.sizes", this);
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
   /// Checks if HTML imports are supported on the current platform.
   bool get supportsImport {
@@ -19333,27 +20454,64 @@
 
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
-  final List<String> ancestorOrigins;
+  List<String> get ancestorOrigins =>
+      JS("DomStringList", "#.ancestorOrigins", this);
 
-  String hash;
+  String get hash => JS("String", "#.hash", this);
 
-  String host;
+  set hash(String value) {
+    JS("void", "#.hash = #", this, value);
+  }
 
-  String hostname;
+  String get host => JS("String", "#.host", this);
 
-  String href;
+  set host(String value) {
+    JS("void", "#.host = #", this, value);
+  }
 
-  String pathname;
+  String get hostname => JS("String", "#.hostname", this);
 
-  String port;
+  set hostname(String value) {
+    JS("void", "#.hostname = #", this, value);
+  }
 
-  String protocol;
+  String get href => JS("String", "#.href", this);
 
-  String search;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
 
-  TrustedUrl trustedHref;
+  String get pathname => JS("String", "#.pathname", this);
 
-  void assign([String url]) native;
+  set pathname(String value) {
+    JS("void", "#.pathname = #", this, value);
+  }
+
+  String get port => JS("String", "#.port", this);
+
+  set port(String value) {
+    JS("void", "#.port = #", this, value);
+  }
+
+  String get protocol => JS("String", "#.protocol", this);
+
+  set protocol(String value) {
+    JS("void", "#.protocol = #", this, value);
+  }
+
+  String get search => JS("String", "#.search", this);
+
+  set search(String value) {
+    JS("void", "#.search = #", this, value);
+  }
+
+  TrustedUrl get trustedHref => JS("TrustedUrl", "#.trustedHref", this);
+
+  set trustedHref(TrustedUrl value) {
+    JS("void", "#.trustedHref = #", this, value);
+  }
+
+  void assign([String? url]) native;
 
   void reload() native;
 
@@ -19379,7 +20537,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory Magnetometer([Map sensorOptions]) {
+  factory Magnetometer([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return Magnetometer._create_1(sensorOptions_1);
@@ -19407,8 +20565,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MapElement() => JS('returns:MapElement;creates:MapElement;new:true',
-      '#.createElement(#)', document, "map");
+  factory MapElement() => JS<MapElement>(
+      'returns:MapElement;creates:MapElement;new:true',
+      '#.createElement(#)',
+      document,
+      "map");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -19418,9 +20579,13 @@
 
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> areas;
+  List<Node> get areas => JS("HtmlCollection", "#.areas", this);
 
-  String name;
+  String get name => JS("String", "#.name", this);
+
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19456,11 +20621,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool powerEfficient;
+  bool get powerEfficient => JS("bool", "#.powerEfficient", this);
 
-  final bool smooth;
+  bool get smooth => JS("bool", "#.smooth", this);
 
-  final bool supported;
+  bool get supported => JS("bool", "#.supported", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19473,13 +20638,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String deviceId;
+  String get deviceId => JS("String", "#.deviceId", this);
 
-  final String groupId;
+  String get groupId => JS("String", "#.groupId", this);
 
-  final String kind;
+  String get kind => JS("String", "#.kind", this);
 
-  final String label;
+  String get label => JS("String", "#.label", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19538,84 +20703,138 @@
 
   static const int NETWORK_NO_SOURCE = 3;
 
-  final AudioTrackList audioTracks;
+  AudioTrackList get audioTracks => JS("AudioTrackList", "#.audioTracks", this);
 
-  bool autoplay;
+  bool get autoplay => JS("bool", "#.autoplay", this);
 
-  final TimeRanges buffered;
+  set autoplay(bool value) {
+    JS("void", "#.autoplay = #", this, value);
+  }
 
-  bool controls;
+  TimeRanges get buffered => JS("TimeRanges", "#.buffered", this);
 
-  final DomTokenList controlsList;
+  bool get controls => JS("bool", "#.controls", this);
 
-  String crossOrigin;
+  set controls(bool value) {
+    JS("void", "#.controls = #", this, value);
+  }
 
-  final String currentSrc;
+  DomTokenList get controlsList => JS("DomTokenList", "#.controlsList", this);
 
-  num currentTime;
+  String? crossOrigin;
 
-  bool defaultMuted;
+  String get currentSrc => JS("String", "#.currentSrc", this);
 
-  num defaultPlaybackRate;
+  num get currentTime => JS("num", "#.currentTime", this);
 
-  bool disableRemotePlayback;
+  set currentTime(num value) {
+    JS("void", "#.currentTime = #", this, value);
+  }
 
-  final num duration;
+  bool get defaultMuted => JS("bool", "#.defaultMuted", this);
 
-  final bool ended;
+  set defaultMuted(bool value) {
+    JS("void", "#.defaultMuted = #", this, value);
+  }
 
-  final MediaError error;
+  num get defaultPlaybackRate => JS("num", "#.defaultPlaybackRate", this);
 
-  bool loop;
+  set defaultPlaybackRate(num value) {
+    JS("void", "#.defaultPlaybackRate = #", this, value);
+  }
 
-  final MediaKeys mediaKeys;
+  bool get disableRemotePlayback => JS("bool", "#.disableRemotePlayback", this);
 
-  bool muted;
+  set disableRemotePlayback(bool value) {
+    JS("void", "#.disableRemotePlayback = #", this, value);
+  }
 
-  final int networkState;
+  num get duration => JS("num", "#.duration", this);
 
-  final bool paused;
+  bool get ended => JS("bool", "#.ended", this);
 
-  num playbackRate;
+  final MediaError? error;
 
-  final TimeRanges played;
+  bool get loop => JS("bool", "#.loop", this);
 
-  String preload;
+  set loop(bool value) {
+    JS("void", "#.loop = #", this, value);
+  }
 
-  final int readyState;
+  MediaKeys get mediaKeys => JS("MediaKeys", "#.mediaKeys", this);
 
-  final RemotePlayback remote;
+  bool get muted => JS("bool", "#.muted", this);
 
-  final TimeRanges seekable;
+  set muted(bool value) {
+    JS("void", "#.muted = #", this, value);
+  }
 
-  final bool seeking;
+  int get networkState => JS("int", "#.networkState", this);
 
-  final String sinkId;
+  bool get paused => JS("bool", "#.paused", this);
 
-  String src;
+  num get playbackRate => JS("num", "#.playbackRate", this);
 
-  MediaStream srcObject;
+  set playbackRate(num value) {
+    JS("void", "#.playbackRate = #", this, value);
+  }
 
-  final TextTrackList textTracks;
+  TimeRanges get played => JS("TimeRanges", "#.played", this);
 
-  final VideoTrackList videoTracks;
+  String get preload => JS("String", "#.preload", this);
 
-  num volume;
+  set preload(String value) {
+    JS("void", "#.preload = #", this, value);
+  }
+
+  int get readyState => JS("int", "#.readyState", this);
+
+  RemotePlayback get remote => JS("RemotePlayback", "#.remote", this);
+
+  TimeRanges get seekable => JS("TimeRanges", "#.seekable", this);
+
+  bool get seeking => JS("bool", "#.seeking", this);
+
+  String get sinkId => JS("String", "#.sinkId", this);
+
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  MediaStream get srcObject => JS("MediaStream", "#.srcObject", this);
+
+  set srcObject(MediaStream value) {
+    JS("void", "#.srcObject = #", this, value);
+  }
+
+  TextTrackList get textTracks => JS("TextTrackList", "#.textTracks", this);
+
+  VideoTrackList get videoTracks => JS("VideoTrackList", "#.videoTracks", this);
+
+  num get volume => JS("num", "#.volume", this);
+
+  set volume(num value) {
+    JS("void", "#.volume = #", this, value);
+  }
 
   @JSName('webkitAudioDecodedByteCount')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final int audioDecodedByteCount;
+  int get audioDecodedByteCount =>
+      JS("int", "#.webkitAudioDecodedByteCount", this);
 
   @JSName('webkitVideoDecodedByteCount')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final int videoDecodedByteCount;
+  int get videoDecodedByteCount =>
+      JS("int", "#.webkitVideoDecodedByteCount", this);
 
-  TextTrack addTextTrack(String kind, [String label, String language]) native;
+  TextTrack addTextTrack(String kind, [String? label, String? language]) native;
 
   @Unstable()
-  String canPlayType(String type, [String keySystem]) native;
+  String canPlayType(String type, [String? keySystem]) native;
 
   MediaStream captureStream() native;
 
@@ -19625,7 +20844,7 @@
 
   Future play() => promiseToFuture(JS("", "#.play()", this));
 
-  Future setMediaKeys(MediaKeys mediaKeys) =>
+  Future setMediaKeys(MediaKeys? mediaKeys) =>
       promiseToFuture(JS("", "#.setMediaKeys(#)", this, mediaKeys));
 
   Future setSinkId(String sinkId) =>
@@ -19642,7 +20861,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MediaEncryptedEvent(String type, [Map eventInitDict]) {
+  factory MediaEncryptedEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MediaEncryptedEvent._create_1(type, eventInitDict_1);
@@ -19657,9 +20876,9 @@
   static MediaEncryptedEvent _create_2(type) =>
       JS('MediaEncryptedEvent', 'new MediaEncryptedEvent(#)', type);
 
-  final ByteBuffer initData;
+  final ByteBuffer? initData;
 
-  final String initDataType;
+  String get initDataType => JS("String", "#.initDataType", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19681,9 +20900,9 @@
 
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
-  final int code;
+  int get code => JS("int", "#.code", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19706,9 +20925,9 @@
       type,
       eventInitDict);
 
-  final ByteBuffer message;
+  ByteBuffer get message => JS("ByteBuffer", "#.message", this);
 
-  final String messageType;
+  String get messageType => JS("String", "#.messageType", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19724,13 +20943,14 @@
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  Future<void> get closed => promiseToFuture<void>(JS("", "#.closed", this));
+  Future get closed => JS("Future", "#.closed", this);
 
-  final num expiration;
+  num get expiration => JS("num", "#.expiration", this);
 
-  final MediaKeyStatusMap keyStatuses;
+  MediaKeyStatusMap get keyStatuses =>
+      JS("MediaKeyStatusMap", "#.keyStatuses", this);
 
-  final String sessionId;
+  String get sessionId => JS("String", "#.sessionId", this);
 
   Future close() => promiseToFuture(JS("", "#.close()", this));
 
@@ -19759,7 +20979,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int size;
+  int get size => JS("int", "#.size", this);
 
   Object get(/*BufferSource*/ keyId) native;
 
@@ -19776,7 +20996,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String keySystem;
+  String get keySystem => JS("String", "#.keySystem", this);
 
   Future createMediaKeys() =>
       promiseToFuture(JS("", "#.createMediaKeys()", this));
@@ -19800,7 +21020,7 @@
   }
 
   @JSName('createSession')
-  MediaKeySession _createSession([String sessionType]) native;
+  MediaKeySession _createSession([String? sessionType]) native;
 
   Future getStatusForPolicy(MediaKeysPolicy policy) =>
       promiseToFuture(JS("", "#.getStatusForPolicy(#)", this, policy));
@@ -19827,7 +21047,7 @@
   static MediaKeysPolicy _create_1(init) =>
       JS('MediaKeysPolicy', 'new MediaKeysPolicy(#)', init);
 
-  final String minHdcpVersion;
+  String get minHdcpVersion => JS("String", "#.minHdcpVersion", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19841,9 +21061,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  String mediaText;
+  String? mediaText;
 
   void appendMedium(String medium) native;
 
@@ -19862,7 +21082,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MediaMetadata([Map metadata]) {
+  factory MediaMetadata([Map? metadata]) {
     if (metadata != null) {
       var metadata_1 = convertDartToNative_Dictionary(metadata);
       return MediaMetadata._create_1(metadata_1);
@@ -19874,13 +21094,29 @@
   static MediaMetadata _create_2() =>
       JS('MediaMetadata', 'new MediaMetadata()');
 
-  String album;
+  String get album => JS("String", "#.album", this);
 
-  String artist;
+  set album(String value) {
+    JS("void", "#.album = #", this, value);
+  }
 
-  List artwork;
+  String get artist => JS("String", "#.artist", this);
 
-  String title;
+  set artist(String value) {
+    JS("void", "#.artist = #", this, value);
+  }
+
+  List get artwork => JS("List", "#.artwork", this);
+
+  set artwork(List value) {
+    JS("void", "#.artwork = #", this, value);
+  }
+
+  String get title => JS("String", "#.title", this);
+
+  set title(String value) {
+    JS("void", "#.title = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19897,13 +21133,13 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final bool matches;
+  bool get matches => JS("bool", "#.matches", this);
 
-  final String media;
+  String get media => JS("String", "#.media", this);
 
-  void addListener(EventListener listener) native;
+  void addListener(EventListener? listener) native;
 
-  void removeListener(EventListener listener) native;
+  void removeListener(EventListener? listener) native;
 
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
@@ -19918,7 +21154,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MediaQueryListEvent(String type, [Map eventInitDict]) {
+  factory MediaQueryListEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MediaQueryListEvent._create_1(type, eventInitDict_1);
@@ -19933,9 +21169,9 @@
   static MediaQueryListEvent _create_2(type) =>
       JS('MediaQueryListEvent', 'new MediaQueryListEvent(#)', type);
 
-  final bool matches;
+  bool get matches => JS("bool", "#.matches", this);
 
-  final String media;
+  String get media => JS("String", "#.media", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19954,7 +21190,7 @@
   static const EventStreamProvider<Event> pauseEvent =
       const EventStreamProvider<Event>('pause');
 
-  factory MediaRecorder(MediaStream stream, [Map options]) {
+  factory MediaRecorder(MediaStream stream, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return MediaRecorder._create_1(stream, options_1);
@@ -19966,15 +21202,15 @@
   static MediaRecorder _create_2(stream) =>
       JS('MediaRecorder', 'new MediaRecorder(#)', stream);
 
-  final int audioBitsPerSecond;
+  int get audioBitsPerSecond => JS("int", "#.audioBitsPerSecond", this);
 
-  final String mimeType;
+  String get mimeType => JS("String", "#.mimeType", this);
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 
-  final MediaStream stream;
+  MediaStream get stream => JS("MediaStream", "#.stream", this);
 
-  final int videoBitsPerSecond;
+  int get videoBitsPerSecond => JS("int", "#.videoBitsPerSecond", this);
 
   static bool isTypeSupported(String type) native;
 
@@ -19984,7 +21220,7 @@
 
   void resume() native;
 
-  void start([int timeslice]) native;
+  void start([int? timeslice]) native;
 
   void stop() native;
 
@@ -20003,11 +21239,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  MediaMetadata metadata;
+  MediaMetadata? metadata;
 
-  String playbackState;
+  String get playbackState => JS("String", "#.playbackState", this);
 
-  void setActionHandler(String action, MediaSessionActionHandler handler)
+  set playbackState(String value) {
+    JS("void", "#.playbackState = #", this, value);
+  }
+
+  void setActionHandler(String action, MediaSessionActionHandler? handler)
       native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20028,11 +21268,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num max;
+  num get max => JS("num", "#.max", this);
 
-  final num min;
+  num get min => JS("num", "#.min", this);
 
-  final num step;
+  num get step => JS("num", "#.step", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20055,19 +21295,25 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.MediaSource)');
 
-  final SourceBufferList activeSourceBuffers;
+  SourceBufferList get activeSourceBuffers =>
+      JS("SourceBufferList", "#.activeSourceBuffers", this);
 
-  num duration;
+  num get duration => JS("num", "#.duration", this);
 
-  final String readyState;
+  set duration(num value) {
+    JS("void", "#.duration = #", this, value);
+  }
 
-  final SourceBufferList sourceBuffers;
+  String get readyState => JS("String", "#.readyState", this);
+
+  SourceBufferList get sourceBuffers =>
+      JS("SourceBufferList", "#.sourceBuffers", this);
 
   SourceBuffer addSourceBuffer(String type) native;
 
   void clearLiveSeekableRange() native;
 
-  void endOfStream([String error]) native;
+  void endOfStream([String? error]) native;
 
   static bool isTypeSupported(String type) native;
 
@@ -20123,9 +21369,9 @@
   static MediaStream _create_3(stream_OR_tracks) =>
       JS('MediaStream', 'new MediaStream(#)', stream_OR_tracks);
 
-  final bool active;
+  bool get active => JS("bool", "#.active", this);
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
   void addTrack(MediaStreamTrack track) native;
 
@@ -20179,7 +21425,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MediaStreamEvent(String type, [Map eventInitDict]) {
+  factory MediaStreamEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MediaStreamEvent._create_1(type, eventInitDict_1);
@@ -20194,7 +21440,7 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Device.isEventTypeSupported('MediaStreamEvent');
 
-  final MediaStream stream;
+  final MediaStream? stream;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20235,21 +21481,29 @@
   static const EventStreamProvider<Event> unmuteEvent =
       const EventStreamProvider<Event>('unmute');
 
-  String contentHint;
+  String get contentHint => JS("String", "#.contentHint", this);
 
-  bool enabled;
+  set contentHint(String value) {
+    JS("void", "#.contentHint = #", this, value);
+  }
 
-  final String id;
+  bool get enabled => JS("bool", "#.enabled", this);
 
-  final String kind;
+  set enabled(bool value) {
+    JS("void", "#.enabled = #", this, value);
+  }
 
-  final String label;
+  String get id => JS("String", "#.id", this);
 
-  final bool muted;
+  String get kind => JS("String", "#.kind", this);
 
-  final String readyState;
+  String get label => JS("String", "#.label", this);
 
-  Future applyConstraints([Map constraints]) {
+  bool get muted => JS("bool", "#.muted", this);
+
+  String get readyState => JS("String", "#.readyState", this);
+
+  Future applyConstraints([Map? constraints]) {
     var constraints_dict = null;
     if (constraints != null) {
       constraints_dict = convertDartToNative_Dictionary(constraints);
@@ -20318,7 +21572,7 @@
   static bool get supported =>
       Device.isEventTypeSupported('MediaStreamTrackEvent');
 
-  final MediaStreamTrack track;
+  MediaStreamTrack get track => JS("MediaStreamTrack", "#.track", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20331,11 +21585,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int jsHeapSizeLimit;
+  int get jsHeapSizeLimit => JS("int", "#.jsHeapSizeLimit", this);
 
-  final int totalJSHeapSize;
+  int get totalJSHeapSize => JS("int", "#.totalJSHeapSize", this);
 
-  final int usedJSHeapSize;
+  int get usedJSHeapSize => JS("int", "#.usedJSHeapSize", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20358,7 +21612,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MenuElement() => JS(
+  factory MenuElement() => JS<MenuElement>(
       'returns:MenuElement;creates:MenuElement;new:true',
       '#.createElement(#)',
       document,
@@ -20395,9 +21649,9 @@
   static MessageChannel _create_1() =>
       JS('MessageChannel', 'new MessageChannel()');
 
-  final MessagePort port1;
+  MessagePort get port1 => JS("MessagePort", "#.port1", this);
 
-  final MessagePort port2;
+  MessagePort get port2 => JS("MessagePort", "#.port2", this);
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20449,7 +21703,7 @@
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_data;
 
-  factory MessageEvent._(String type, [Map eventInitDict]) {
+  factory MessageEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MessageEvent._create_1(type, eventInitDict_1);
@@ -20462,21 +21716,21 @@
       JS('MessageEvent', 'new MessageEvent(#)', type);
 
   @Unstable()
-  final String lastEventId;
+  String get lastEventId => JS("String", "#.lastEventId", this);
 
-  final String origin;
+  String get origin => JS("String", "#.origin", this);
 
   @Unstable()
   @Creates('JSExtendableArray')
-  final List<MessagePort> ports;
+  List<MessagePort> get ports => JS("List<MessagePort>", "#.ports", this);
 
-  EventTarget get source => _convertNativeToDart_EventTarget(this._get_source);
+  EventTarget? get source => _convertNativeToDart_EventTarget(this._get_source);
   @JSName('source')
   @Creates('Null')
   @Returns('EventTarget|=Object')
   final dynamic _get_source;
 
-  final String suborigin;
+  String get suborigin => JS("String", "#.suborigin", this);
 
   void _initMessageEvent(
       String typeArg,
@@ -20533,7 +21787,7 @@
 
   void close() native;
 
-  void postMessage(/*any*/ message, [List<Object> transfer]) {
+  void postMessage(/*any*/ message, [List<Object>? transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, transfer);
@@ -20567,7 +21821,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MetaElement() => JS(
+  factory MetaElement() => JS<MetaElement>(
       'returns:MetaElement;creates:MetaElement;new:true',
       '#.createElement(#)',
       document,
@@ -20579,11 +21833,23 @@
    */
   MetaElement.created() : super.created();
 
-  String content;
+  String get content => JS("String", "#.content", this);
 
-  String httpEquiv;
+  set content(String value) {
+    JS("void", "#.content = #", this, value);
+  }
 
-  String name;
+  String get httpEquiv => JS("String", "#.httpEquiv", this);
+
+  set httpEquiv(String value) {
+    JS("void", "#.httpEquiv = #", this, value);
+  }
+
+  String get name => JS("String", "#.name", this);
+
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20602,7 +21868,7 @@
   @Creates('Null')
   final dynamic _get_modificationTime;
 
-  final int size;
+  int get size => JS("int", "#.size", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20626,7 +21892,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MeterElement() => document.createElement("meter");
+  factory MeterElement() => document.createElement("meter") as MeterElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -20637,22 +21903,46 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('meter');
 
-  num high;
+  num get high => JS("num", "#.high", this);
+
+  set high(num value) {
+    JS("void", "#.high = #", this, value);
+  }
 
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  num low;
+  num get low => JS("num", "#.low", this);
 
-  num max;
+  set low(num value) {
+    JS("void", "#.low = #", this, value);
+  }
 
-  num min;
+  num get max => JS("num", "#.max", this);
 
-  num optimum;
+  set max(num value) {
+    JS("void", "#.max = #", this, value);
+  }
 
-  num value;
+  num get min => JS("num", "#.min", this);
+
+  set min(num value) {
+    JS("void", "#.min = #", this, value);
+  }
+
+  num get optimum => JS("num", "#.optimum", this);
+
+  set optimum(num value) {
+    JS("void", "#.optimum = #", this, value);
+  }
+
+  num get value => JS("num", "#.value", this);
+
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20665,11 +21955,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final MidiInputMap inputs;
+  MidiInputMap get inputs => JS("MidiInputMap", "#.inputs", this);
 
-  final MidiOutputMap outputs;
+  MidiOutputMap get outputs => JS("MidiOutputMap", "#.outputs", this);
 
-  final bool sysexEnabled;
+  bool get sysexEnabled => JS("bool", "#.sysexEnabled", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20682,7 +21972,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MidiConnectionEvent(String type, [Map eventInitDict]) {
+  factory MidiConnectionEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MidiConnectionEvent._create_1(type, eventInitDict_1);
@@ -20697,7 +21987,7 @@
   static MidiConnectionEvent _create_2(type) =>
       JS('MidiConnectionEvent', 'new MIDIConnectionEvent(#)', type);
 
-  final MidiPort port;
+  MidiPort get port => JS("MidiPort", "#.port", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20802,7 +22092,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory MidiMessageEvent(String type, [Map eventInitDict]) {
+  factory MidiMessageEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MidiMessageEvent._create_1(type, eventInitDict_1);
@@ -20814,7 +22104,7 @@
   static MidiMessageEvent _create_2(type) =>
       JS('MidiMessageEvent', 'new MIDIMessageEvent(#)', type);
 
-  final Uint8List data;
+  Uint8List get data => JS("Uint8List", "#.data", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20827,7 +22117,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  void send(Uint8List data, [num timestamp]) native;
+  void send(Uint8List data, [num? timestamp]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20908,19 +22198,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String connection;
+  String get connection => JS("String", "#.connection", this);
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String manufacturer;
+  String get manufacturer => JS("String", "#.manufacturer", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  final String version;
+  String get version => JS("String", "#.version", this);
 
   Future close() => promiseToFuture(JS("", "#.close()", this));
 
@@ -20937,13 +22227,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String description;
+  String get description => JS("String", "#.description", this);
 
-  final Plugin enabledPlugin;
+  Plugin get enabledPlugin => JS("Plugin", "#.enabledPlugin", this);
 
-  final String suffixes;
+  String get suffixes => JS("String", "#.suffixes", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21025,9 +22315,17 @@
    */
   ModElement.created() : super.created();
 
-  String cite;
+  String get cite => JS("String", "#.cite", this);
 
-  String dateTime;
+  set cite(String value) {
+    JS("void", "#.cite = #", this, value);
+  }
+
+  String get dateTime => JS("String", "#.dateTime", this);
+
+  set dateTime(String value) {
+    JS("void", "#.dateTime = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21080,7 +22378,7 @@
     return event;
   }
 
-  factory MouseEvent._(String type, [Map eventInitDict]) {
+  factory MouseEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return MouseEvent._create_1(type, eventInitDict_1);
@@ -21092,19 +22390,19 @@
   static MouseEvent _create_2(type) =>
       JS('MouseEvent', 'new MouseEvent(#)', type);
 
-  final bool altKey;
+  bool get altKey => JS("bool", "#.altKey", this);
 
-  final int button;
+  int get button => JS("int", "#.button", this);
 
-  final int buttons;
+  int get buttons => JS("int", "#.buttons", this);
 
   @JSName('clientX')
-  final num _clientX;
+  num get _clientX => JS("num", "#.clientX", this);
 
   @JSName('clientY')
-  final num _clientY;
+  num get _clientY => JS("num", "#.clientY", this);
 
-  final bool ctrlKey;
+  bool get ctrlKey => JS("bool", "#.ctrlKey", this);
 
   /**
    * The nonstandard way to access the element that the mouse comes
@@ -21114,31 +22412,31 @@
    * relatedTarget to get the same information in the standard way.
    */
   @deprecated
-  final Node fromElement;
+  Node get fromElement => JS("Node", "#.fromElement", this);
 
   @JSName('layerX')
-  final int _layerX;
+  int get _layerX => JS("int", "#.layerX", this);
 
   @JSName('layerY')
-  final int _layerY;
+  int get _layerY => JS("int", "#.layerY", this);
 
-  final bool metaKey;
+  bool get metaKey => JS("bool", "#.metaKey", this);
 
   @JSName('movementX')
-  final int _movementX;
+  int get _movementX => JS("int", "#.movementX", this);
 
   @JSName('movementY')
-  final int _movementY;
+  int get _movementY => JS("int", "#.movementY", this);
 
   @JSName('pageX')
-  final num _pageX;
+  num get _pageX => JS("num", "#.pageX", this);
 
   @JSName('pageY')
-  final num _pageY;
+  num get _pageY => JS("num", "#.pageY", this);
 
-  final String region;
+  final String? region;
 
-  EventTarget get relatedTarget =>
+  EventTarget? get relatedTarget =>
       _convertNativeToDart_EventTarget(this._get_relatedTarget);
   @JSName('relatedTarget')
   @Creates('Node')
@@ -21146,12 +22444,12 @@
   final dynamic _get_relatedTarget;
 
   @JSName('screenX')
-  final num _screenX;
+  num get _screenX => JS("num", "#.screenX", this);
 
   @JSName('screenY')
-  final num _screenY;
+  num get _screenY => JS("num", "#.screenY", this);
 
-  final bool shiftKey;
+  bool get shiftKey => JS("bool", "#.shiftKey", this);
 
   /**
    * The nonstandard way to access the element that the mouse goes
@@ -21161,7 +22459,7 @@
    * relatedTarget to get the same information in the standard way.
    */
   @deprecated
-  final Node toElement;
+  Node get toElement => JS("Node", "#.toElement", this);
 
   bool getModifierState(String keyArg) native;
 
@@ -21169,7 +22467,7 @@
       String type,
       bool bubbles,
       bool cancelable,
-      Window view,
+      Window? view,
       int detail,
       int screenX,
       int screenY,
@@ -21180,7 +22478,7 @@
       bool shiftKey,
       bool metaKey,
       int button,
-      EventTarget relatedTarget) {
+      EventTarget? relatedTarget) {
     var relatedTarget_1 = _convertDartToNative_EventTarget(relatedTarget);
     _initMouseEvent_1(
         type,
@@ -21206,7 +22504,7 @@
       type,
       bubbles,
       cancelable,
-      Window view,
+      Window? view,
       detail,
       screenX,
       screenY,
@@ -21283,21 +22581,21 @@
 
   static const int REMOVAL = 3;
 
-  final int attrChange;
+  int get attrChange => JS("int", "#.attrChange", this);
 
-  final String attrName;
+  String get attrName => JS("String", "#.attrName", this);
 
-  final String newValue;
+  String get newValue => JS("String", "#.newValue", this);
 
-  final String prevValue;
+  String get prevValue => JS("String", "#.prevValue", this);
 
-  final Node relatedNode;
+  final Node? relatedNode;
 
   void initMutationEvent(
       String type,
       bool bubbles,
       bool cancelable,
-      Node relatedNode,
+      Node? relatedNode,
       String prevValue,
       String newValue,
       String attrName,
@@ -21314,7 +22612,7 @@
 class MutationObserver extends Interceptor {
   void disconnect() native;
 
-  void _observe(Node target, [Map options]) {
+  void _observe(Node target, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       _observe_1(target, options_1);
@@ -21357,7 +22655,7 @@
       bool subtree,
       bool attributeOldValue,
       bool characterDataOldValue,
-      List<String> attributeFilter}) {
+      List<String>? attributeFilter}) {
     // Parse options into map of known type.
     var parsedOptions = _createDict();
 
@@ -21424,25 +22722,25 @@
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> addedNodes;
+  List<Node> get addedNodes => JS("NodeList", "#.addedNodes", this);
 
-  final String attributeName;
+  final String? attributeName;
 
-  final String attributeNamespace;
+  final String? attributeNamespace;
 
-  final Node nextSibling;
+  final Node? nextSibling;
 
-  final String oldValue;
+  final String? oldValue;
 
-  final Node previousSibling;
+  final Node? previousSibling;
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> removedNodes;
+  List<Node> get removedNodes => JS("NodeList", "#.removedNodes", this);
 
-  final Node target;
+  Node get target => JS("Node", "#.target", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21563,61 +22861,67 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final _BudgetService budget;
+  _BudgetService get budget => JS("_BudgetService", "#.budget", this);
 
-  final _Clipboard clipboard;
+  _Clipboard get clipboard => JS("_Clipboard", "#.clipboard", this);
 
-  final NetworkInformation connection;
+  NetworkInformation get connection =>
+      JS("NetworkInformation", "#.connection", this);
 
-  final CredentialsContainer credentials;
+  CredentialsContainer get credentials =>
+      JS("CredentialsContainer", "#.credentials", this);
 
-  final num deviceMemory;
+  num get deviceMemory => JS("num", "#.deviceMemory", this);
 
-  final String doNotTrack;
+  final String? doNotTrack;
 
   @Unstable()
-  final Geolocation geolocation;
+  Geolocation get geolocation => JS("Geolocation", "#.geolocation", this);
 
-  final int maxTouchPoints;
+  int get maxTouchPoints => JS("int", "#.maxTouchPoints", this);
 
-  final MediaCapabilities mediaCapabilities;
+  MediaCapabilities get mediaCapabilities =>
+      JS("MediaCapabilities", "#.mediaCapabilities", this);
 
-  final MediaDevices mediaDevices;
+  MediaDevices get mediaDevices => JS("MediaDevices", "#.mediaDevices", this);
 
-  final MediaSession mediaSession;
+  MediaSession get mediaSession => JS("MediaSession", "#.mediaSession", this);
 
-  final MimeTypeArray mimeTypes;
+  MimeTypeArray get mimeTypes => JS("MimeTypeArray", "#.mimeTypes", this);
 
-  final _NFC nfc;
+  _NFC get nfc => JS("_NFC", "#.nfc", this);
 
-  final Permissions permissions;
+  Permissions get permissions => JS("Permissions", "#.permissions", this);
 
-  final Presentation presentation;
+  Presentation get presentation => JS("Presentation", "#.presentation", this);
 
   @Unstable()
-  final String productSub;
+  String get productSub => JS("String", "#.productSub", this);
 
-  final ServiceWorkerContainer serviceWorker;
+  ServiceWorkerContainer get serviceWorker =>
+      JS("ServiceWorkerContainer", "#.serviceWorker", this);
 
-  final StorageManager storage;
+  StorageManager get storage => JS("StorageManager", "#.storage", this);
 
   @Unstable()
-  final String vendor;
+  String get vendor => JS("String", "#.vendor", this);
 
   @Unstable()
-  final String vendorSub;
+  String get vendorSub => JS("String", "#.vendorSub", this);
 
-  final VR vr;
+  VR get vr => JS("VR", "#.vr", this);
 
   @JSName('webkitPersistentStorage')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final DeprecatedStorageQuota persistentStorage;
+  DeprecatedStorageQuota get persistentStorage =>
+      JS("DeprecatedStorageQuota", "#.webkitPersistentStorage", this);
 
   @JSName('webkitTemporaryStorage')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final DeprecatedStorageQuota temporaryStorage;
+  DeprecatedStorageQuota get temporaryStorage =>
+      JS("DeprecatedStorageQuota", "#.webkitTemporaryStorage", this);
 
   void cancelKeyboardLock() native;
 
@@ -21637,7 +22941,7 @@
   @Unstable()
   void registerProtocolHandler(String scheme, String url, String title) native;
 
-  Future requestKeyboardLock([List<String> keyCodes]) {
+  Future requestKeyboardLock([List<String>? keyCodes]) {
     if (keyCodes != null) {
       List keyCodes_1 = convertDartToNative_StringArray(keyCodes);
       return _requestKeyboardLock_1(keyCodes_1);
@@ -21653,7 +22957,7 @@
       promiseToFuture(JS("", "#.requestKeyboardLock()", this));
 
   @JSName('requestMIDIAccess')
-  Future requestMidiAccess([Map options]) {
+  Future requestMidiAccess([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -21667,9 +22971,9 @@
       promiseToFuture(JS("", "#.requestMediaKeySystemAccess(#, #)", this,
           keySystem, supportedConfigurations));
 
-  bool sendBeacon(String url, Object data) native;
+  bool sendBeacon(String url, Object? data) native;
 
-  Future share([Map data]) {
+  Future share([Map? data]) {
     var data_dict = null;
     if (data != null) {
       data_dict = convertDartToNative_Dictionary(data);
@@ -21679,38 +22983,38 @@
 
   // From NavigatorAutomationInformation
 
-  final bool webdriver;
+  bool get webdriver => JS("bool", "#.webdriver", this);
 
   // From NavigatorCookies
 
   @Unstable()
-  final bool cookieEnabled;
+  bool get cookieEnabled => JS("bool", "#.cookieEnabled", this);
 
   // From NavigatorID
 
-  final String appCodeName;
+  String get appCodeName => JS("String", "#.appCodeName", this);
 
-  final String appName;
+  String get appName => JS("String", "#.appName", this);
 
-  final String appVersion;
+  String get appVersion => JS("String", "#.appVersion", this);
 
-  final bool dartEnabled;
+  bool get dartEnabled => JS("bool", "#.dartEnabled", this);
 
-  final String platform;
+  String get platform => JS("String", "#.platform", this);
 
   @Unstable()
-  final String product;
+  String get product => JS("String", "#.product", this);
 
-  final String userAgent;
+  String get userAgent => JS("String", "#.userAgent", this);
 
   // From NavigatorLanguage
 
-  final List<String> languages;
+  List<String> get languages => JS("List<String>", "#.languages", this);
 
   // From NavigatorOnLine
 
   @Unstable()
-  final bool onLine;
+  bool get onLine => JS("bool", "#.onLine", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21723,7 +23027,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool webdriver;
+  bool get webdriver => JS("bool", "#.webdriver", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21736,7 +23040,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int hardwareConcurrency;
+  int get hardwareConcurrency => JS("int", "#.hardwareConcurrency", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21749,7 +23053,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool cookieEnabled;
+  bool get cookieEnabled => JS("bool", "#.cookieEnabled", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21812,11 +23116,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String constraintName;
+  String get constraintName => JS("String", "#.constraintName", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21846,15 +23150,15 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final num downlink;
+  num get downlink => JS("num", "#.downlink", this);
 
-  final num downlinkMax;
+  num get downlinkMax => JS("num", "#.downlinkMax", this);
 
-  final String effectiveType;
+  String get effectiveType => JS("String", "#.effectiveType", this);
 
-  final int rtt;
+  int get rtt => JS("int", "#.rtt", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
@@ -21951,7 +23255,7 @@
     return result;
   }
 
-  bool remove(Object object) {
+  bool remove(Object? object) {
     if (object is! Node) return false;
     Node node = object;
     if (!identical(_this, node.parentNode)) return false;
@@ -21995,11 +23299,11 @@
 
   // TODO(jacobr): this could be implemented for child node lists.
   // The exception we throw here is misleading.
-  void sort([Comparator<Node> compare]) {
+  void sort([Comparator<Node>? compare]) {
     throw new UnsupportedError("Cannot sort Node list");
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random? random]) {
     throw new UnsupportedError("Cannot shuffle Node list");
   }
 
@@ -22009,7 +23313,7 @@
     throw new UnsupportedError("Cannot setRange on Node list");
   }
 
-  void fillRange(int start, int end, [Node fill]) {
+  void fillRange(int start, int end, [Node? fill]) {
     throw new UnsupportedError("Cannot fillRange on Node list");
   }
 
@@ -22158,7 +23462,7 @@
   static const int TEXT_NODE = 3;
 
   @JSName('baseURI')
-  final String baseUri;
+  String get baseUri => JS("String", "#.baseURI", this);
 
   /**
    * The first child of this node.
@@ -22168,9 +23472,9 @@
    * * [Node.firstChild](https://developer.mozilla.org/en-US/docs/Web/API/Node.firstChild)
    *   from MDN.
    */
-  final Node firstChild;
+  final Node? firstChild;
 
-  final bool isConnected;
+  bool get isConnected => JS("bool", "#.isConnected", this);
 
   /**
    * The last child of this node.
@@ -22180,7 +23484,7 @@
    * * [Node.lastChild](https://developer.mozilla.org/en-US/docs/Web/API/Node.lastChild)
    *   from MDN.
    */
-  final Node lastChild;
+  final Node? lastChild;
 
   @JSName('nextSibling')
   /**
@@ -22191,7 +23495,7 @@
    * * [Node.nextSibling](https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling)
    *   from MDN.
    */
-  final Node nextNode;
+  final Node? nextNode;
 
   /**
    * The name of this node.
@@ -22204,7 +23508,8 @@
    *   from MDN. This page contains a table of [nodeName] values for each
    *   [nodeType].
    */
-  final String nodeName;
+
+  String get nodeName => JS("String", "#.nodeName", this);
 
   /**
    * The type of node.
@@ -22229,7 +23534,8 @@
    * * [Node.nodeType](https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType)
    *   from MDN.
    */
-  final int nodeType;
+
+  int get nodeType => JS("int", "#.nodeType", this);
 
   /**
    * The value of this node.
@@ -22242,7 +23548,7 @@
    *   from MDN. This page contains a table of [nodeValue] values for each
    *   [nodeType].
    */
-  final String nodeValue;
+  final String? nodeValue;
 
   /**
    * The document this node belongs to.
@@ -22254,7 +23560,7 @@
    * * [Node.ownerDocument](https://developer.mozilla.org/en-US/docs/Web/API/Node.ownerDocument)
    *   from MDN.
    */
-  final Document ownerDocument;
+  final Document? ownerDocument;
 
   @JSName('parentElement')
   /**
@@ -22268,7 +23574,7 @@
    * * [Node.parentElement](https://developer.mozilla.org/en-US/docs/Web/API/Node.parentElement)
    *   from W3C.
    */
-  final Element parent;
+  final Element? parent;
 
   /**
    * The parent node of this node.
@@ -22278,7 +23584,7 @@
    * * [Node.parentNode](https://developer.mozilla.org/en-US/docs/Web/API/Node.parentNode)
    *   from MDN.
    */
-  final Node parentNode;
+  final Node? parentNode;
 
   @JSName('previousSibling')
   /**
@@ -22289,7 +23595,7 @@
    * * [Node.previousSibling](https://developer.mozilla.org/en-US/docs/Web/API/Node.previousSibling)
    *   from MDN.
    */
-  final Node previousNode;
+  final Node? previousNode;
 
   @JSName('textContent')
   /**
@@ -22300,7 +23606,7 @@
    * * [Node.textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent)
    *   from MDN.
    */
-  String text;
+  String? text;
 
   @JSName('appendChild')
   /**
@@ -22336,9 +23642,9 @@
    * * [Node.contains](https://developer.mozilla.org/en-US/docs/Web/API/Node.contains)
    *   from MDN.
    */
-  bool contains(Node other) native;
+  bool contains(Node? other) native;
 
-  Node getRootNode([Map options]) {
+  Node getRootNode([Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return _getRootNode_1(options_1);
@@ -22369,7 +23675,7 @@
    * * [Node.insertBefore](https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore)
    *   from MDN.
    */
-  Node insertBefore(Node node, Node child) native;
+  Node insertBefore(Node node, Node? child) native;
 
   @JSName('removeChild')
   Node _removeChild(Node child) native;
@@ -22426,13 +23732,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool pointerBeforeReferenceNode;
+  bool get pointerBeforeReferenceNode =>
+      JS("bool", "#.pointerBeforeReferenceNode", this);
 
-  final Node referenceNode;
+  Node get referenceNode => JS("Node", "#.referenceNode", this);
 
-  final Node root;
+  Node get root => JS("Node", "#.root", this);
 
-  final int whatToShow;
+  int get whatToShow => JS("int", "#.whatToShow", this);
 
   void detach() native;
 
@@ -22512,9 +23819,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Element nextElementSibling;
+  final Element? nextElementSibling;
 
-  final Element previousElementSibling;
+  final Element? previousElementSibling;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22540,7 +23847,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String nonce;
+  String get nonce => JS("String", "#.nonce", this);
+
+  set nonce(String value) {
+    JS("void", "#.nonce = #", this, value);
+  }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22603,7 +23914,7 @@
   static const EventStreamProvider<Event> showEvent =
       const EventStreamProvider<Event>('show');
 
-  static Notification _factoryNotification(String title, [Map options]) {
+  static Notification _factoryNotification(String title, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return Notification._create_1(title, options_1);
@@ -22619,47 +23930,47 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.Notification)');
 
-  final List actions;
+  List get actions => JS("List", "#.actions", this);
 
-  final String badge;
+  String get badge => JS("String", "#.badge", this);
 
-  final String body;
+  String get body => JS("String", "#.body", this);
 
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
-  final Object data;
+  Object get data => JS("Object", "#.data", this);
 
-  final String dir;
+  String get dir => JS("String", "#.dir", this);
 
-  final String icon;
+  String get icon => JS("String", "#.icon", this);
 
-  final String image;
+  String get image => JS("String", "#.image", this);
 
-  final String lang;
+  String get lang => JS("String", "#.lang", this);
 
-  static final int maxActions;
+  int get maxActions => JS("int", "#.maxActions", this);
 
-  static final String permission;
+  String get permission => JS("String", "#.permission", this);
 
-  final bool renotify;
+  bool get renotify => JS("bool", "#.renotify", this);
 
-  final bool requireInteraction;
+  bool get requireInteraction => JS("bool", "#.requireInteraction", this);
 
-  final bool silent;
+  bool get silent => JS("bool", "#.silent", this);
 
-  final String tag;
+  String get tag => JS("String", "#.tag", this);
 
-  final int timestamp;
+  int get timestamp => JS("int", "#.timestamp", this);
 
-  final String title;
+  String get title => JS("String", "#.title", this);
 
-  final List<int> vibrate;
+  List<int> get vibrate => JS("List<int>", "#.vibrate", this);
 
   void close() native;
 
   @JSName('requestPermission')
   static Future _requestPermission(
-      [_NotificationPermissionCallback deprecatedCallback]) native;
+      [_NotificationPermissionCallback? deprecatedCallback]) native;
 
   @JSName('requestPermission')
   static Future<String> requestPermission() {
@@ -22700,11 +24011,11 @@
   static NotificationEvent _create_1(type, eventInitDict) => JS(
       'NotificationEvent', 'new NotificationEvent(#,#)', type, eventInitDict);
 
-  final String action;
+  String get action => JS("String", "#.action", this);
 
-  final Notification notification;
+  Notification get notification => JS("Notification", "#.notification", this);
 
-  final String reply;
+  final String? reply;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22724,7 +24035,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory OListElement() => JS(
+  factory OListElement() => JS<OListElement>(
       'returns:OListElement;creates:OListElement;new:true',
       '#.createElement(#)',
       document,
@@ -22736,11 +24047,23 @@
    */
   OListElement.created() : super.created();
 
-  bool reversed;
+  bool get reversed => JS("bool", "#.reversed", this);
 
-  int start;
+  set reversed(bool value) {
+    JS("void", "#.reversed = #", this, value);
+  }
 
-  String type;
+  int get start => JS("int", "#.start", this);
+
+  set start(int value) {
+    JS("void", "#.start = #", this, value);
+  }
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22757,7 +24080,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ObjectElement() => document.createElement("object");
+  factory ObjectElement() => document.createElement("object") as ObjectElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -22768,32 +24091,56 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('object');
 
-  WindowBase get contentWindow =>
+  WindowBase? get contentWindow =>
       _convertNativeToDart_Window(this._get_contentWindow);
   @JSName('contentWindow')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_contentWindow;
 
-  String data;
+  String get data => JS("String", "#.data", this);
 
-  final FormElement form;
+  set data(String value) {
+    JS("void", "#.data = #", this, value);
+  }
 
-  String height;
+  final FormElement? form;
 
-  String name;
+  String get height => JS("String", "#.height", this);
 
-  String type;
+  set height(String value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  String useMap;
+  String get name => JS("String", "#.name", this);
 
-  final String validationMessage;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  final ValidityState validity;
+  String get type => JS("String", "#.type", this);
 
-  String width;
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
-  final bool willValidate;
+  String get useMap => JS("String", "#.useMap", this);
+
+  set useMap(String value) {
+    JS("void", "#.useMap = #", this, value);
+  }
+
+  String get validationMessage => JS("String", "#.validationMessage", this);
+
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
+
+  String get width => JS("String", "#.width", this);
+
+  set width(String value) {
+    JS("void", "#.width = #", this, value);
+  }
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
 
   Node __getter__(String name) native;
 
@@ -22822,11 +24169,19 @@
   static OffscreenCanvas _create_1(width, height) =>
       JS('OffscreenCanvas', 'new OffscreenCanvas(#,#)', width, height);
 
-  int height;
+  int get height => JS("int", "#.height", this);
 
-  int width;
+  set height(int value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  Future<Blob> convertToBlob([Map options]) {
+  int get width => JS("int", "#.width", this);
+
+  set width(int value) {
+    JS("void", "#.width = #", this, value);
+  }
+
+  Future<Blob> convertToBlob([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -22835,7 +24190,7 @@
         JS("", "#.convertToBlob(#)", this, options_dict));
   }
 
-  Object getContext(String contextType, [Map attributes]) {
+  Object getContext(String contextType, [Map? attributes]) {
     if (attributes != null) {
       var attributes_1 = convertDartToNative_Dictionary(attributes);
       return _getContext_1(contextType, attributes_1);
@@ -22862,60 +24217,142 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final OffscreenCanvas canvas;
+  OffscreenCanvas get canvas => JS("OffscreenCanvas", "#.canvas", this);
 
-  String direction;
+  String get direction => JS("String", "#.direction", this);
 
-  Object fillStyle;
+  set direction(String value) {
+    JS("void", "#.direction = #", this, value);
+  }
 
-  String filter;
+  Object get fillStyle => JS("Object", "#.fillStyle", this);
 
-  String font;
+  set fillStyle(Object value) {
+    JS("void", "#.fillStyle = #", this, value);
+  }
 
-  num globalAlpha;
+  String get filter => JS("String", "#.filter", this);
 
-  String globalCompositeOperation;
+  set filter(String value) {
+    JS("void", "#.filter = #", this, value);
+  }
 
-  bool imageSmoothingEnabled;
+  String get font => JS("String", "#.font", this);
 
-  String imageSmoothingQuality;
+  set font(String value) {
+    JS("void", "#.font = #", this, value);
+  }
 
-  String lineCap;
+  num get globalAlpha => JS("num", "#.globalAlpha", this);
 
-  num lineDashOffset;
+  set globalAlpha(num value) {
+    JS("void", "#.globalAlpha = #", this, value);
+  }
 
-  String lineJoin;
+  String get globalCompositeOperation =>
+      JS("String", "#.globalCompositeOperation", this);
 
-  num lineWidth;
+  set globalCompositeOperation(String value) {
+    JS("void", "#.globalCompositeOperation = #", this, value);
+  }
 
-  num miterLimit;
+  bool get imageSmoothingEnabled => JS("bool", "#.imageSmoothingEnabled", this);
 
-  num shadowBlur;
+  set imageSmoothingEnabled(bool value) {
+    JS("void", "#.imageSmoothingEnabled = #", this, value);
+  }
 
-  String shadowColor;
+  String get imageSmoothingQuality =>
+      JS("String", "#.imageSmoothingQuality", this);
 
-  num shadowOffsetX;
+  set imageSmoothingQuality(String value) {
+    JS("void", "#.imageSmoothingQuality = #", this, value);
+  }
 
-  num shadowOffsetY;
+  String get lineCap => JS("String", "#.lineCap", this);
 
-  Object strokeStyle;
+  set lineCap(String value) {
+    JS("void", "#.lineCap = #", this, value);
+  }
 
-  String textAlign;
+  num get lineDashOffset => JS("num", "#.lineDashOffset", this);
 
-  String textBaseline;
+  set lineDashOffset(num value) {
+    JS("void", "#.lineDashOffset = #", this, value);
+  }
+
+  String get lineJoin => JS("String", "#.lineJoin", this);
+
+  set lineJoin(String value) {
+    JS("void", "#.lineJoin = #", this, value);
+  }
+
+  num get lineWidth => JS("num", "#.lineWidth", this);
+
+  set lineWidth(num value) {
+    JS("void", "#.lineWidth = #", this, value);
+  }
+
+  num get miterLimit => JS("num", "#.miterLimit", this);
+
+  set miterLimit(num value) {
+    JS("void", "#.miterLimit = #", this, value);
+  }
+
+  num get shadowBlur => JS("num", "#.shadowBlur", this);
+
+  set shadowBlur(num value) {
+    JS("void", "#.shadowBlur = #", this, value);
+  }
+
+  String get shadowColor => JS("String", "#.shadowColor", this);
+
+  set shadowColor(String value) {
+    JS("void", "#.shadowColor = #", this, value);
+  }
+
+  num get shadowOffsetX => JS("num", "#.shadowOffsetX", this);
+
+  set shadowOffsetX(num value) {
+    JS("void", "#.shadowOffsetX = #", this, value);
+  }
+
+  num get shadowOffsetY => JS("num", "#.shadowOffsetY", this);
+
+  set shadowOffsetY(num value) {
+    JS("void", "#.shadowOffsetY = #", this, value);
+  }
+
+  Object get strokeStyle => JS("Object", "#.strokeStyle", this);
+
+  set strokeStyle(Object value) {
+    JS("void", "#.strokeStyle = #", this, value);
+  }
+
+  String get textAlign => JS("String", "#.textAlign", this);
+
+  set textAlign(String value) {
+    JS("void", "#.textAlign = #", this, value);
+  }
+
+  String get textBaseline => JS("String", "#.textBaseline", this);
+
+  set textBaseline(String value) {
+    JS("void", "#.textBaseline = #", this, value);
+  }
 
   void beginPath() native;
 
   void clearRect(num x, num y, num width, num height) native;
 
-  void clip([Path2D path]) native;
+  void clip([Path2D? path]) native;
 
   Future commit() => promiseToFuture(JS("", "#.commit()", this));
 
   ImageData createImageData(data_OR_imagedata_OR_sw,
-      [int sh_OR_sw,
+      [int? sh_OR_sw,
       imageDataColorSettings_OR_sh,
-      Map imageDataColorSettings]) {
+      Map? imageDataColorSettings]) {
     if ((data_OR_imagedata_OR_sw is ImageData) &&
         sh_OR_sw == null &&
         imageDataColorSettings_OR_sh == null &&
@@ -22972,18 +24409,18 @@
       num x0, num y0, num r0, num x1, num y1, num r1) native;
 
   void drawImage(/*CanvasImageSource*/ image, num sx_OR_x, num sy_OR_y,
-      [num sw_OR_width,
-      num height_OR_sh,
-      num dx,
-      num dy,
-      num dw,
-      num dh]) native;
+      [num? sw_OR_width,
+      num? height_OR_sh,
+      num? dx,
+      num? dy,
+      num? dw,
+      num? dh]) native;
 
-  void fill([path_OR_winding, String winding]) native;
+  void fill([path_OR_winding, String? winding]) native;
 
   void fillRect(num x, num y, num width, num height) native;
 
-  void fillText(String text, num x, num y, [num maxWidth]) native;
+  void fillText(String text, num x, num y, [num? maxWidth]) native;
 
   ImageData getImageData(int sx, int sy, int sw, int sh) {
     return convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
@@ -22994,15 +24431,15 @@
 
   List<num> getLineDash() native;
 
-  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
+  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String? winding])
       native;
 
-  bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
+  bool isPointInStroke(path_OR_x, num x_OR_y, [num? y]) native;
 
   TextMetrics measureText(String text) native;
 
   void putImageData(ImageData imagedata, int dx, int dy,
-      [int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight]) {
+      [int? dirtyX, int? dirtyY, int? dirtyWidth, int? dirtyHeight]) {
     if (dirtyX == null &&
         dirtyY == null &&
         dirtyWidth == null &&
@@ -23043,11 +24480,11 @@
 
   void setTransform(num a, num b, num c, num d, num e, num f) native;
 
-  void stroke([Path2D path]) native;
+  void stroke([Path2D? path]) native;
 
   void strokeRect(num x, num y, num width, num height) native;
 
-  void strokeText(String text, num x, num y, [num maxWidth]) native;
+  void strokeText(String text, num x, num y, [num? maxWidth]) native;
 
   void transform(num a, num b, num c, num d, num e, num f) native;
 
@@ -23087,7 +24524,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory OptGroupElement() => JS(
+  factory OptGroupElement() => JS<OptGroupElement>(
       'returns:OptGroupElement;creates:OptGroupElement;new:true',
       '#.createElement(#)',
       document,
@@ -23099,9 +24536,17 @@
    */
   OptGroupElement.created() : super.created();
 
-  bool disabled;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  String label;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
+
+  String get label => JS("String", "#.label", this);
+
+  set label(String value) {
+    JS("void", "#.label = #", this, value);
+  }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23115,7 +24560,7 @@
   }
 
   factory OptionElement._(
-      [String data, String value, bool defaultSelected, bool selected]) {
+      [String? data, String? value, bool? defaultSelected, bool? selected]) {
     if (selected != null) {
       return OptionElement._create_1(data, value, defaultSelected, selected);
     }
@@ -23151,19 +24596,39 @@
    */
   OptionElement.created() : super.created();
 
-  bool defaultSelected;
+  bool get defaultSelected => JS("bool", "#.defaultSelected", this);
 
-  bool disabled;
+  set defaultSelected(bool value) {
+    JS("void", "#.defaultSelected = #", this, value);
+  }
 
-  final FormElement form;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  final int index;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
-  String label;
+  final FormElement? form;
 
-  bool selected;
+  int get index => JS("int", "#.index", this);
 
-  String value;
+  String get label => JS("String", "#.label", this);
+
+  set label(String value) {
+    JS("void", "#.label = #", this, value);
+  }
+
+  bool get selected => JS("bool", "#.selected", this);
+
+  set selected(bool value) {
+    JS("void", "#.selected = #", this, value);
+  }
+
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23176,7 +24641,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List<num> quaternion;
+  final List<num>? quaternion;
 
   void populateMatrix(Object targetBuffer) native;
 }
@@ -23194,7 +24659,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory OutputElement() => document.createElement("output");
+  factory OutputElement() => document.createElement("output") as OutputElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -23205,28 +24670,40 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('output');
 
-  String defaultValue;
+  String get defaultValue => JS("String", "#.defaultValue", this);
 
-  final FormElement form;
+  set defaultValue(String value) {
+    JS("void", "#.defaultValue = #", this, value);
+  }
 
-  final DomTokenList htmlFor;
+  final FormElement? form;
+
+  DomTokenList get htmlFor => JS("DomTokenList", "#.htmlFor", this);
 
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  final String type;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  final String validationMessage;
+  String get type => JS("String", "#.type", this);
 
-  final ValidityState validity;
+  String get validationMessage => JS("String", "#.validationMessage", this);
 
-  String value;
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
 
-  final bool willValidate;
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
 
   bool checkValidity() native;
 
@@ -23254,11 +24731,11 @@
       constraint,
       message);
 
-  final String constraint;
+  final String? constraint;
 
-  final String message;
+  final String? message;
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23271,7 +24748,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PageTransitionEvent(String type, [Map eventInitDict]) {
+  factory PageTransitionEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return PageTransitionEvent._create_1(type, eventInitDict_1);
@@ -23286,7 +24763,7 @@
   static PageTransitionEvent _create_2(type) =>
       JS('PageTransitionEvent', 'new PageTransitionEvent(#)', type);
 
-  final bool persisted;
+  bool get persisted => JS("bool", "#.persisted", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23299,45 +24776,115 @@
     throw new UnsupportedError("Not supported");
   }
 
-  Matrix currentTransform;
+  Matrix get currentTransform => JS("Matrix", "#.currentTransform", this);
 
-  Object fillStyle;
+  set currentTransform(Matrix value) {
+    JS("void", "#.currentTransform = #", this, value);
+  }
 
-  String filter;
+  Object get fillStyle => JS("Object", "#.fillStyle", this);
 
-  num globalAlpha;
+  set fillStyle(Object value) {
+    JS("void", "#.fillStyle = #", this, value);
+  }
 
-  String globalCompositeOperation;
+  String get filter => JS("String", "#.filter", this);
 
-  bool imageSmoothingEnabled;
+  set filter(String value) {
+    JS("void", "#.filter = #", this, value);
+  }
 
-  String imageSmoothingQuality;
+  num get globalAlpha => JS("num", "#.globalAlpha", this);
 
-  String lineCap;
+  set globalAlpha(num value) {
+    JS("void", "#.globalAlpha = #", this, value);
+  }
 
-  num lineDashOffset;
+  String get globalCompositeOperation =>
+      JS("String", "#.globalCompositeOperation", this);
 
-  String lineJoin;
+  set globalCompositeOperation(String value) {
+    JS("void", "#.globalCompositeOperation = #", this, value);
+  }
 
-  num lineWidth;
+  bool get imageSmoothingEnabled => JS("bool", "#.imageSmoothingEnabled", this);
 
-  num miterLimit;
+  set imageSmoothingEnabled(bool value) {
+    JS("void", "#.imageSmoothingEnabled = #", this, value);
+  }
 
-  num shadowBlur;
+  String get imageSmoothingQuality =>
+      JS("String", "#.imageSmoothingQuality", this);
 
-  String shadowColor;
+  set imageSmoothingQuality(String value) {
+    JS("void", "#.imageSmoothingQuality = #", this, value);
+  }
 
-  num shadowOffsetX;
+  String get lineCap => JS("String", "#.lineCap", this);
 
-  num shadowOffsetY;
+  set lineCap(String value) {
+    JS("void", "#.lineCap = #", this, value);
+  }
 
-  Object strokeStyle;
+  num get lineDashOffset => JS("num", "#.lineDashOffset", this);
+
+  set lineDashOffset(num value) {
+    JS("void", "#.lineDashOffset = #", this, value);
+  }
+
+  String get lineJoin => JS("String", "#.lineJoin", this);
+
+  set lineJoin(String value) {
+    JS("void", "#.lineJoin = #", this, value);
+  }
+
+  num get lineWidth => JS("num", "#.lineWidth", this);
+
+  set lineWidth(num value) {
+    JS("void", "#.lineWidth = #", this, value);
+  }
+
+  num get miterLimit => JS("num", "#.miterLimit", this);
+
+  set miterLimit(num value) {
+    JS("void", "#.miterLimit = #", this, value);
+  }
+
+  num get shadowBlur => JS("num", "#.shadowBlur", this);
+
+  set shadowBlur(num value) {
+    JS("void", "#.shadowBlur = #", this, value);
+  }
+
+  String get shadowColor => JS("String", "#.shadowColor", this);
+
+  set shadowColor(String value) {
+    JS("void", "#.shadowColor = #", this, value);
+  }
+
+  num get shadowOffsetX => JS("num", "#.shadowOffsetX", this);
+
+  set shadowOffsetX(num value) {
+    JS("void", "#.shadowOffsetX = #", this, value);
+  }
+
+  num get shadowOffsetY => JS("num", "#.shadowOffsetY", this);
+
+  set shadowOffsetY(num value) {
+    JS("void", "#.shadowOffsetY = #", this, value);
+  }
+
+  Object get strokeStyle => JS("Object", "#.strokeStyle", this);
+
+  set strokeStyle(Object value) {
+    JS("void", "#.strokeStyle = #", this, value);
+  }
 
   void beginPath() native;
 
   void clearRect(num x, num y, num width, num height) native;
 
-  void clip([path_OR_winding, String winding]) native;
+  void clip([path_OR_winding, String? winding]) native;
 
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
 
@@ -23348,23 +24895,23 @@
       num x0, num y0, num r0, num x1, num y1, num r1) native;
 
   void drawImage(/*CanvasImageSource*/ image, num sx_OR_x, num sy_OR_y,
-      [num sw_OR_width,
-      num height_OR_sh,
-      num dx,
-      num dy,
-      num dw,
-      num dh]) native;
+      [num? sw_OR_width,
+      num? height_OR_sh,
+      num? dx,
+      num? dy,
+      num? dw,
+      num? dh]) native;
 
-  void fill([path_OR_winding, String winding]) native;
+  void fill([path_OR_winding, String? winding]) native;
 
   void fillRect(num x, num y, num width, num height) native;
 
   List<num> getLineDash() native;
 
-  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
+  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String? winding])
       native;
 
-  bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
+  bool isPointInStroke(path_OR_x, num x_OR_y, [num? y]) native;
 
   void resetTransform() native;
 
@@ -23380,7 +24927,7 @@
 
   void setTransform(num a, num b, num c, num d, num e, num f) native;
 
-  void stroke([Path2D path]) native;
+  void stroke([Path2D? path]) native;
 
   void strokeRect(num x, num y, num width, num height) native;
 
@@ -23422,9 +24969,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num height;
+  num get height => JS("num", "#.height", this);
 
-  final num width;
+  num get width => JS("num", "#.width", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23437,7 +24984,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num devicePixelRatio;
+  num get devicePixelRatio => JS("num", "#.devicePixelRatio", this);
 
   void registerPaint(String name, Object paintCtor) native;
 }
@@ -23452,7 +24999,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ParagraphElement() => JS(
+  factory ParagraphElement() => JS<ParagraphElement>(
       'returns:ParagraphElement;creates:ParagraphElement;new:true',
       '#.createElement(#)',
       document,
@@ -23476,7 +25023,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ParamElement() => JS(
+  factory ParamElement() => JS<ParamElement>(
       'returns:ParamElement;creates:ParamElement;new:true',
       '#.createElement(#)',
       document,
@@ -23488,9 +25035,17 @@
    */
   ParamElement.created() : super.created();
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  String value;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
+
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23540,20 +25095,28 @@
   static PasswordCredential _create_2(data_OR_form) =>
       JS('PasswordCredential', 'new PasswordCredential(#)', data_OR_form);
 
-  Object additionalData;
+  Object? additionalData;
 
-  String idName;
+  String get idName => JS("String", "#.idName", this);
 
-  final String password;
+  set idName(String value) {
+    JS("void", "#.idName = #", this, value);
+  }
 
-  String passwordName;
+  String get password => JS("String", "#.password", this);
+
+  String get passwordName => JS("String", "#.passwordName", this);
+
+  set passwordName(String value) {
+    JS("void", "#.passwordName = #", this, value);
+  }
 
   // From CredentialUserData
 
   @JSName('iconURL')
-  final String iconUrl;
+  String get iconUrl => JS("String", "#.iconURL", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23584,7 +25147,7 @@
   static Path2D _create_3(path_OR_text) =>
       JS('Path2D', 'new Path2D(#)', path_OR_text);
 
-  void addPath(Path2D path, [Matrix transform]) native;
+  void addPath(Path2D path, [Matrix? transform]) native;
 
   // From CanvasPath
 
@@ -23620,27 +25183,27 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List<String> addressLine;
+  List<String> get addressLine => JS("List<String>", "#.addressLine", this);
 
-  final String city;
+  String get city => JS("String", "#.city", this);
 
-  final String country;
+  String get country => JS("String", "#.country", this);
 
-  final String dependentLocality;
+  String get dependentLocality => JS("String", "#.dependentLocality", this);
 
-  final String languageCode;
+  String get languageCode => JS("String", "#.languageCode", this);
 
-  final String organization;
+  String get organization => JS("String", "#.organization", this);
 
-  final String phone;
+  String get phone => JS("String", "#.phone", this);
 
-  final String postalCode;
+  String get postalCode => JS("String", "#.postalCode", this);
 
-  final String recipient;
+  String get recipient => JS("String", "#.recipient", this);
 
-  final String region;
+  String get region => JS("String", "#.region", this);
 
-  final String sortingCode;
+  String get sortingCode => JS("String", "#.sortingCode", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23684,9 +25247,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final PaymentInstruments instruments;
+  PaymentInstruments get instruments =>
+      JS("PaymentInstruments", "#.instruments", this);
 
-  String userHint;
+  String get userHint => JS("String", "#.userHint", this);
+
+  set userHint(String value) {
+    JS("void", "#.userHint = #", this, value);
+  }
 }
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23722,13 +25290,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final PaymentAddress shippingAddress;
+  final PaymentAddress? shippingAddress;
 
-  final String shippingOption;
+  final String? shippingOption;
 
-  final String shippingType;
+  final String? shippingType;
 
   Future abort() => promiseToFuture(JS("", "#.abort()", this));
 
@@ -23760,19 +25328,20 @@
       type,
       eventInitDict);
 
-  final String instrumentKey;
+  String get instrumentKey => JS("String", "#.instrumentKey", this);
 
-  final List methodData;
+  List get methodData => JS("List", "#.methodData", this);
 
-  final List modifiers;
+  List get modifiers => JS("List", "#.modifiers", this);
 
-  final String paymentRequestId;
+  String get paymentRequestId => JS("String", "#.paymentRequestId", this);
 
-  final String paymentRequestOrigin;
+  String get paymentRequestOrigin =>
+      JS("String", "#.paymentRequestOrigin", this);
 
-  final String topLevelOrigin;
+  String get topLevelOrigin => JS("String", "#.topLevelOrigin", this);
 
-  final Object total;
+  Object get total => JS("Object", "#.total", this);
 
   Future<WindowClient> openWindow(String url) =>
       promiseToFuture<WindowClient>(JS("", "#.openWindow(#)", this, url));
@@ -23790,7 +25359,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PaymentRequestUpdateEvent(String type, [Map eventInitDict]) {
+  factory PaymentRequestUpdateEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return PaymentRequestUpdateEvent._create_1(type, eventInitDict_1);
@@ -23818,23 +25387,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Object details;
+  Object get details => JS("Object", "#.details", this);
 
-  final String methodName;
+  String get methodName => JS("String", "#.methodName", this);
 
-  final String payerEmail;
+  final String? payerEmail;
 
-  final String payerName;
+  final String? payerName;
 
-  final String payerPhone;
+  final String? payerPhone;
 
-  final String requestId;
+  String get requestId => JS("String", "#.requestId", this);
 
-  final PaymentAddress shippingAddress;
+  final PaymentAddress? shippingAddress;
 
-  final String shippingOption;
+  final String? shippingOption;
 
-  Future complete([String paymentResult]) =>
+  Future complete([String? paymentResult]) =>
       promiseToFuture(JS("", "#.complete(#)", this, paymentResult));
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23854,13 +25423,14 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.performance)');
 
-  final MemoryInfo memory;
+  MemoryInfo get memory => JS("MemoryInfo", "#.memory", this);
 
-  final PerformanceNavigation navigation;
+  PerformanceNavigation get navigation =>
+      JS("PerformanceNavigation", "#.navigation", this);
 
-  final num timeOrigin;
+  num get timeOrigin => JS("num", "#.timeOrigin", this);
 
-  final PerformanceTiming timing;
+  PerformanceTiming get timing => JS("PerformanceTiming", "#.timing", this);
 
   void clearMarks(String markName) native;
 
@@ -23893,13 +25463,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num duration;
+  num get duration => JS("num", "#.duration", this);
 
-  final String entryType;
+  String get entryType => JS("String", "#.entryType", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
-  final num startTime;
+  num get startTime => JS("num", "#.startTime", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23912,7 +25482,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List<TaskAttributionTiming> attribution;
+  List<TaskAttributionTiming> get attribution =>
+      JS("List<TaskAttributionTiming>", "#.attribution", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23956,9 +25527,9 @@
 
   static const int TYPE_RESERVED = 255;
 
-  final int redirectCount;
+  int get redirectCount => JS("int", "#.redirectCount", this);
 
-  final int type;
+  int get type => JS("int", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23971,25 +25542,27 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num domComplete;
+  num get domComplete => JS("num", "#.domComplete", this);
 
-  final num domContentLoadedEventEnd;
+  num get domContentLoadedEventEnd =>
+      JS("num", "#.domContentLoadedEventEnd", this);
 
-  final num domContentLoadedEventStart;
+  num get domContentLoadedEventStart =>
+      JS("num", "#.domContentLoadedEventStart", this);
 
-  final num domInteractive;
+  num get domInteractive => JS("num", "#.domInteractive", this);
 
-  final num loadEventEnd;
+  num get loadEventEnd => JS("num", "#.loadEventEnd", this);
 
-  final num loadEventStart;
+  num get loadEventStart => JS("num", "#.loadEventStart", this);
 
-  final int redirectCount;
+  int get redirectCount => JS("int", "#.redirectCount", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  final num unloadEventEnd;
+  num get unloadEventEnd => JS("num", "#.unloadEventEnd", this);
 
-  final num unloadEventStart;
+  num get unloadEventStart => JS("num", "#.unloadEventStart", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24067,41 +25640,42 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num connectEnd;
+  num get connectEnd => JS("num", "#.connectEnd", this);
 
-  final num connectStart;
+  num get connectStart => JS("num", "#.connectStart", this);
 
-  final int decodedBodySize;
+  int get decodedBodySize => JS("int", "#.decodedBodySize", this);
 
-  final num domainLookupEnd;
+  num get domainLookupEnd => JS("num", "#.domainLookupEnd", this);
 
-  final num domainLookupStart;
+  num get domainLookupStart => JS("num", "#.domainLookupStart", this);
 
-  final int encodedBodySize;
+  int get encodedBodySize => JS("int", "#.encodedBodySize", this);
 
-  final num fetchStart;
+  num get fetchStart => JS("num", "#.fetchStart", this);
 
-  final String initiatorType;
+  String get initiatorType => JS("String", "#.initiatorType", this);
 
-  final String nextHopProtocol;
+  String get nextHopProtocol => JS("String", "#.nextHopProtocol", this);
 
-  final num redirectEnd;
+  num get redirectEnd => JS("num", "#.redirectEnd", this);
 
-  final num redirectStart;
+  num get redirectStart => JS("num", "#.redirectStart", this);
 
-  final num requestStart;
+  num get requestStart => JS("num", "#.requestStart", this);
 
-  final num responseEnd;
+  num get responseEnd => JS("num", "#.responseEnd", this);
 
-  final num responseStart;
+  num get responseStart => JS("num", "#.responseStart", this);
 
-  final num secureConnectionStart;
+  num get secureConnectionStart => JS("num", "#.secureConnectionStart", this);
 
-  final List<PerformanceServerTiming> serverTiming;
+  List<PerformanceServerTiming> get serverTiming =>
+      JS("List<PerformanceServerTiming>", "#.serverTiming", this);
 
-  final int transferSize;
+  int get transferSize => JS("int", "#.transferSize", this);
 
-  final num workerStart;
+  num get workerStart => JS("num", "#.workerStart", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24114,11 +25688,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String description;
+  String get description => JS("String", "#.description", this);
 
-  final num duration;
+  num get duration => JS("num", "#.duration", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24132,47 +25706,49 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int connectEnd;
+  int get connectEnd => JS("int", "#.connectEnd", this);
 
-  final int connectStart;
+  int get connectStart => JS("int", "#.connectStart", this);
 
-  final int domComplete;
+  int get domComplete => JS("int", "#.domComplete", this);
 
-  final int domContentLoadedEventEnd;
+  int get domContentLoadedEventEnd =>
+      JS("int", "#.domContentLoadedEventEnd", this);
 
-  final int domContentLoadedEventStart;
+  int get domContentLoadedEventStart =>
+      JS("int", "#.domContentLoadedEventStart", this);
 
-  final int domInteractive;
+  int get domInteractive => JS("int", "#.domInteractive", this);
 
-  final int domLoading;
+  int get domLoading => JS("int", "#.domLoading", this);
 
-  final int domainLookupEnd;
+  int get domainLookupEnd => JS("int", "#.domainLookupEnd", this);
 
-  final int domainLookupStart;
+  int get domainLookupStart => JS("int", "#.domainLookupStart", this);
 
-  final int fetchStart;
+  int get fetchStart => JS("int", "#.fetchStart", this);
 
-  final int loadEventEnd;
+  int get loadEventEnd => JS("int", "#.loadEventEnd", this);
 
-  final int loadEventStart;
+  int get loadEventStart => JS("int", "#.loadEventStart", this);
 
-  final int navigationStart;
+  int get navigationStart => JS("int", "#.navigationStart", this);
 
-  final int redirectEnd;
+  int get redirectEnd => JS("int", "#.redirectEnd", this);
 
-  final int redirectStart;
+  int get redirectStart => JS("int", "#.redirectStart", this);
 
-  final int requestStart;
+  int get requestStart => JS("int", "#.requestStart", this);
 
-  final int responseEnd;
+  int get responseEnd => JS("int", "#.responseEnd", this);
 
-  final int responseStart;
+  int get responseStart => JS("int", "#.responseStart", this);
 
-  final int secureConnectionStart;
+  int get secureConnectionStart => JS("int", "#.secureConnectionStart", this);
 
-  final int unloadEventEnd;
+  int get unloadEventEnd => JS("int", "#.unloadEventEnd", this);
 
-  final int unloadEventStart;
+  int get unloadEventStart => JS("int", "#.unloadEventStart", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24188,7 +25764,7 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
@@ -24236,13 +25812,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List fillLightMode;
+  List get fillLightMode => JS("List", "#.fillLightMode", this);
 
-  final MediaSettingsRange imageHeight;
+  MediaSettingsRange get imageHeight =>
+      JS("MediaSettingsRange", "#.imageHeight", this);
 
-  final MediaSettingsRange imageWidth;
+  MediaSettingsRange get imageWidth =>
+      JS("MediaSettingsRange", "#.imageWidth", this);
 
-  final String redEyeReduction;
+  String get redEyeReduction => JS("String", "#.redEyeReduction", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24272,13 +25850,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String description;
+  String get description => JS("String", "#.description", this);
 
-  final String filename;
+  String get filename => JS("String", "#.filename", this);
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   MimeType item(int index) native;
 
@@ -24361,7 +25939,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PointerEvent(String type, [Map eventInitDict]) {
+  factory PointerEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return PointerEvent._create_1(type, eventInitDict_1);
@@ -24373,25 +25951,25 @@
   static PointerEvent _create_2(type) =>
       JS('PointerEvent', 'new PointerEvent(#)', type);
 
-  final num height;
+  num get height => JS("num", "#.height", this);
 
-  final bool isPrimary;
+  bool get isPrimary => JS("bool", "#.isPrimary", this);
 
-  final int pointerId;
+  int get pointerId => JS("int", "#.pointerId", this);
 
-  final String pointerType;
+  String get pointerType => JS("String", "#.pointerType", this);
 
-  final num pressure;
+  num get pressure => JS("num", "#.pressure", this);
 
-  final num tangentialPressure;
+  num get tangentialPressure => JS("num", "#.tangentialPressure", this);
 
-  final int tiltX;
+  int get tiltX => JS("int", "#.tiltX", this);
 
-  final int tiltY;
+  int get tiltY => JS("int", "#.tiltY", this);
 
-  final int twist;
+  int get twist => JS("int", "#.twist", this);
 
-  final num width;
+  num get width => JS("num", "#.width", this);
 
   List<PointerEvent> getCoalescedEvents() native;
 
@@ -24421,7 +25999,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PopStateEvent(String type, [Map eventInitDict]) {
+  factory PopStateEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return PopStateEvent._create_1(type, eventInitDict_1);
@@ -24466,9 +26044,9 @@
 
   static const int TIMEOUT = 3;
 
-  final int code;
+  int get code => JS("int", "#.code", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24489,8 +26067,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PreElement() => JS('returns:PreElement;creates:PreElement;new:true',
-      '#.createElement(#)', document, "pre");
+  factory PreElement() => JS<PreElement>(
+      'returns:PreElement;creates:PreElement;new:true',
+      '#.createElement(#)',
+      document,
+      "pre");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -24509,9 +26090,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  PresentationRequest defaultRequest;
+  PresentationRequest? defaultRequest;
 
-  final PresentationReceiver receiver;
+  final PresentationReceiver? receiver;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24527,7 +26108,7 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final bool value;
+  bool get value => JS("bool", "#.value", this);
 
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
@@ -24545,13 +26126,17 @@
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  String binaryType;
+  String get binaryType => JS("String", "#.binaryType", this);
 
-  final String id;
+  set binaryType(String value) {
+    JS("void", "#.binaryType = #", this, value);
+  }
 
-  final String state;
+  String get id => JS("String", "#.id", this);
 
-  final String url;
+  String get state => JS("String", "#.state", this);
+
+  String get url => JS("String", "#.url", this);
 
   void close() native;
 
@@ -24581,7 +26166,8 @@
       JS('PresentationConnectionAvailableEvent',
           'new PresentationConnectionAvailableEvent(#,#)', type, eventInitDict);
 
-  final PresentationConnection connection;
+  PresentationConnection get connection =>
+      JS("PresentationConnection", "#.connection", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24604,9 +26190,9 @@
       type,
       eventInitDict);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 
-  final String reason;
+  String get reason => JS("String", "#.reason", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24619,7 +26205,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List<PresentationConnection> connections;
+  List<PresentationConnection> get connections =>
+      JS("List<PresentationConnection>", "#.connections", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24632,9 +26219,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  Future<PresentationConnectionList> get connectionList =>
-      promiseToFuture<PresentationConnectionList>(
-          JS("", "#.connectionList", this));
+  Future get connectionList => JS("Future", "#.connectionList", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24685,9 +26270,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final StyleSheet sheet;
+  final StyleSheet? sheet;
 
-  final String target;
+  String get target => JS("String", "#.target", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24704,7 +26289,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ProgressElement() => document.createElement("progress");
+  factory ProgressElement() =>
+      document.createElement("progress") as ProgressElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -24718,13 +26304,21 @@
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  num max;
+  num get max => JS("num", "#.max", this);
 
-  final num position;
+  set max(num value) {
+    JS("void", "#.max = #", this, value);
+  }
 
-  num value;
+  num get position => JS("num", "#.position", this);
+
+  num get value => JS("num", "#.value", this);
+
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24737,7 +26331,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ProgressEvent(String type, [Map eventInitDict]) {
+  factory ProgressEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return ProgressEvent._create_1(type, eventInitDict_1);
@@ -24749,11 +26343,11 @@
   static ProgressEvent _create_2(type) =>
       JS('ProgressEvent', 'new ProgressEvent(#)', type);
 
-  final bool lengthComputable;
+  bool get lengthComputable => JS("bool", "#.lengthComputable", this);
 
-  final int loaded;
+  int get loaded => JS("int", "#.loaded", this);
 
-  final int total;
+  int get total => JS("int", "#.total", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24776,9 +26370,9 @@
       type,
       eventInitDict);
 
-  Future get promise => promiseToFuture(JS("", "#.promise", this));
+  Future get promise => JS("Future", "#.promise", this);
 
-  final Object reason;
+  Object get reason => JS("Object", "#.reason", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24791,9 +26385,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final ByteBuffer rawId;
+  ByteBuffer get rawId => JS("ByteBuffer", "#.rawId", this);
 
-  final AuthenticatorResponse response;
+  AuthenticatorResponse get response =>
+      JS("AuthenticatorResponse", "#.response", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24806,7 +26401,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PushEvent(String type, [Map eventInitDict]) {
+  factory PushEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return PushEvent._create_1(type, eventInitDict_1);
@@ -24817,7 +26412,7 @@
       JS('PushEvent', 'new PushEvent(#,#)', type, eventInitDict);
   static PushEvent _create_2(type) => JS('PushEvent', 'new PushEvent(#)', type);
 
-  final PushMessageData data;
+  final PushMessageData? data;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24830,12 +26425,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  static final List<String> supportedContentEncodings;
+  List<String> get supportedContentEncodings =>
+      JS("List<String>", "#.supportedContentEncodings", this);
 
   Future<PushSubscription> getSubscription() =>
       promiseToFuture<PushSubscription>(JS("", "#.getSubscription()", this));
 
-  Future permissionState([Map options]) {
+  Future permissionState([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -24843,7 +26439,7 @@
     return promiseToFuture(JS("", "#.permissionState(#)", this, options_dict));
   }
 
-  Future<PushSubscription> subscribe([Map options]) {
+  Future<PushSubscription> subscribe([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -24882,11 +26478,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String endpoint;
+  String get endpoint => JS("String", "#.endpoint", this);
 
-  final int expirationTime;
+  int get expirationTime => JS("int", "#.expirationTime", this);
 
-  final PushSubscriptionOptions options;
+  PushSubscriptionOptions get options =>
+      JS("PushSubscriptionOptions", "#.options", this);
 
   ByteBuffer getKey(String name) native;
 
@@ -24904,9 +26501,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final ByteBuffer applicationServerKey;
+  final ByteBuffer? applicationServerKey;
 
-  final bool userVisibleOnly;
+  bool get userVisibleOnly => JS("bool", "#.userVisibleOnly", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24919,7 +26516,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory QuoteElement() => JS(
+  factory QuoteElement() => JS<QuoteElement>(
       'returns:QuoteElement;creates:QuoteElement;new:true',
       '#.createElement(#)',
       document,
@@ -24931,7 +26528,11 @@
    */
   QuoteElement.created() : super.created();
 
-  String cite;
+  String get cite => JS("String", "#.cite", this);
+
+  set cite(String value) {
+    JS("void", "#.cite = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24980,23 +26581,24 @@
 
   static const int START_TO_START = 0;
 
-  final bool collapsed;
+  bool get collapsed => JS("bool", "#.collapsed", this);
 
-  final Node commonAncestorContainer;
+  Node get commonAncestorContainer =>
+      JS("Node", "#.commonAncestorContainer", this);
 
-  final Node endContainer;
+  Node get endContainer => JS("Node", "#.endContainer", this);
 
-  final int endOffset;
+  int get endOffset => JS("int", "#.endOffset", this);
 
-  final Node startContainer;
+  Node get startContainer => JS("Node", "#.startContainer", this);
 
-  final int startOffset;
+  int get startOffset => JS("int", "#.startOffset", this);
 
   DocumentFragment cloneContents() native;
 
   Range cloneRange() native;
 
-  void collapse([bool toStart]) native;
+  void collapse([bool? toStart]) native;
 
   int compareBoundaryPoints(int how, Range sourceRange) native;
 
@@ -25076,11 +26678,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String platform;
+  String get platform => JS("String", "#.platform", this);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25093,7 +26695,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory RelativeOrientationSensor([Map sensorOptions]) {
+  factory RelativeOrientationSensor([Map? sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
       return RelativeOrientationSensor._create_1(sensorOptions_1);
@@ -25118,9 +26720,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 
-  Future cancelWatchAvailability([int id]) =>
+  Future cancelWatchAvailability([int? id]) =>
       promiseToFuture(JS("", "#.cancelWatchAvailability(#)", this, id));
 
   Future prompt() => promiseToFuture(JS("", "#.prompt()", this));
@@ -25225,9 +26827,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final DomRectReadOnly contentRect;
+  DomRectReadOnly get contentRect =>
+      JS("DomRectReadOnly", "#.contentRect", this);
 
-  final Element target;
+  Element get target => JS("Element", "#.target", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25240,7 +26843,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int expires;
+  int get expires => JS("int", "#.expires", this);
 
   List<Map> getFingerprints() native;
 }
@@ -25291,29 +26894,38 @@
   static const EventStreamProvider<Event> openEvent =
       const EventStreamProvider<Event>('open');
 
-  String binaryType;
+  String get binaryType => JS("String", "#.binaryType", this);
 
-  final int bufferedAmount;
+  set binaryType(String value) {
+    JS("void", "#.binaryType = #", this, value);
+  }
 
-  int bufferedAmountLowThreshold;
+  int get bufferedAmount => JS("int", "#.bufferedAmount", this);
 
-  final int id;
+  int get bufferedAmountLowThreshold =>
+      JS("int", "#.bufferedAmountLowThreshold", this);
 
-  final String label;
+  set bufferedAmountLowThreshold(int value) {
+    JS("void", "#.bufferedAmountLowThreshold = #", this, value);
+  }
 
-  final int maxRetransmitTime;
+  int get id => JS("int", "#.id", this);
 
-  final int maxRetransmits;
+  String get label => JS("String", "#.label", this);
 
-  final bool negotiated;
+  int get maxRetransmitTime => JS("int", "#.maxRetransmitTime", this);
 
-  final bool ordered;
+  int get maxRetransmits => JS("int", "#.maxRetransmits", this);
 
-  final String protocol;
+  bool get negotiated => JS("bool", "#.negotiated", this);
 
-  final String readyState;
+  bool get ordered => JS("bool", "#.ordered", this);
 
-  final bool reliable;
+  String get protocol => JS("String", "#.protocol", this);
+
+  String get readyState => JS("String", "#.readyState", this);
+
+  bool get reliable => JS("bool", "#.reliable", this);
 
   void close() native;
 
@@ -25364,7 +26976,7 @@
       type,
       eventInitDict);
 
-  final RtcDataChannel channel;
+  RtcDataChannel get channel => JS("RtcDataChannel", "#.channel", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25387,18 +26999,18 @@
       const EventStreamProvider<RtcDtmfToneChangeEvent>('tonechange');
 
   @JSName('canInsertDTMF')
-  final bool canInsertDtmf;
+  bool get canInsertDtmf => JS("bool", "#.canInsertDTMF", this);
 
-  final int duration;
+  int get duration => JS("int", "#.duration", this);
 
-  final int interToneGap;
+  int get interToneGap => JS("int", "#.interToneGap", this);
 
-  final String toneBuffer;
+  String get toneBuffer => JS("String", "#.toneBuffer", this);
 
-  final MediaStreamTrack track;
+  MediaStreamTrack get track => JS("MediaStreamTrack", "#.track", this);
 
   @JSName('insertDTMF')
-  void insertDtmf(String tones, [int duration, int interToneGap]) native;
+  void insertDtmf(String tones, [int? duration, int? interToneGap]) native;
 
   /// Stream of `tonechange` events handled by this [RtcDtmfSender].
   Stream<RtcDtmfToneChangeEvent> get onToneChange =>
@@ -25425,7 +27037,7 @@
       type,
       eventInitDict);
 
-  final String tone;
+  String get tone => JS("String", "#.tone", this);
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25444,11 +27056,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String candidate;
+  String get candidate => JS("String", "#.candidate", this);
 
-  int sdpMLineIndex;
+  set candidate(String value) {
+    JS("void", "#.candidate = #", this, value);
+  }
 
-  String sdpMid;
+  int get sdpMLineIndex => JS("int", "#.sdpMLineIndex", this);
+
+  set sdpMLineIndex(int value) {
+    JS("void", "#.sdpMLineIndex = #", this, value);
+  }
+
+  String get sdpMid => JS("String", "#.sdpMid", this);
+
+  set sdpMid(String value) {
+    JS("void", "#.sdpMid = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25461,13 +27085,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
   DateTime get timestamp => convertNativeToDart_DateTime(this._get_timestamp);
   @JSName('timestamp')
   final dynamic _get_timestamp;
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   List<String> names() native;
 
@@ -25606,23 +27230,23 @@
   static const EventStreamProvider<Event> signalingStateChangeEvent =
       const EventStreamProvider<Event>('signalingstatechange');
 
-  final String iceConnectionState;
+  String get iceConnectionState => JS("String", "#.iceConnectionState", this);
 
-  final String iceGatheringState;
+  String get iceGatheringState => JS("String", "#.iceGatheringState", this);
 
-  final RtcSessionDescription localDescription;
+  final RtcSessionDescription? localDescription;
 
-  final RtcSessionDescription remoteDescription;
+  final RtcSessionDescription? remoteDescription;
 
-  final String signalingState;
+  String get signalingState => JS("String", "#.signalingState", this);
 
   Future addIceCandidate(Object candidate,
-          [VoidCallback successCallback,
-          RtcPeerConnectionErrorCallback failureCallback]) =>
+          [VoidCallback? successCallback,
+          RtcPeerConnectionErrorCallback? failureCallback]) =>
       promiseToFuture(JS("", "#.addIceCandidate(#, #, #)", this, candidate,
           successCallback, failureCallback));
 
-  void addStream(MediaStream stream, [Map mediaConstraints]) {
+  void addStream(MediaStream? stream, [Map? mediaConstraints]) {
     if (mediaConstraints != null) {
       var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
       _addStream_1(stream, mediaConstraints_1);
@@ -25633,15 +27257,15 @@
   }
 
   @JSName('addStream')
-  void _addStream_1(MediaStream stream, mediaConstraints) native;
+  void _addStream_1(MediaStream? stream, mediaConstraints) native;
   @JSName('addStream')
-  void _addStream_2(MediaStream stream) native;
+  void _addStream_2(MediaStream? stream) native;
 
   RtcRtpSender addTrack(MediaStreamTrack track, MediaStream streams) native;
 
   void close() native;
 
-  Future<RtcSessionDescription> createAnswer([Map options]) {
+  Future<RtcSessionDescription> createAnswer([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -25653,7 +27277,7 @@
   @JSName('createDTMFSender')
   RtcDtmfSender createDtmfSender(MediaStreamTrack track) native;
 
-  RtcDataChannel createDataChannel(String label, [Map dataChannelDict]) {
+  RtcDataChannel createDataChannel(String label, [Map? dataChannelDict]) {
     if (dataChannelDict != null) {
       var dataChannelDict_1 = convertDartToNative_Dictionary(dataChannelDict);
       return _createDataChannel_1(label, dataChannelDict_1);
@@ -25666,7 +27290,7 @@
   @JSName('createDataChannel')
   RtcDataChannel _createDataChannel_2(label) native;
 
-  Future<RtcSessionDescription> createOffer([Map options]) {
+  Future<RtcSessionDescription> createOffer([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -25686,7 +27310,7 @@
   Future<RtcStatsReport> getStats() =>
       promiseToFuture<RtcStatsReport>(JS("", "#.getStats()", this));
 
-  void removeStream(MediaStream stream) native;
+  void removeStream(MediaStream? stream) native;
 
   void removeTrack(RtcRtpSender sender) native;
 
@@ -25749,7 +27373,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory RtcPeerConnectionIceEvent(String type, [Map eventInitDict]) {
+  factory RtcPeerConnectionIceEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return RtcPeerConnectionIceEvent._create_1(type, eventInitDict_1);
@@ -25764,7 +27388,7 @@
   static RtcPeerConnectionIceEvent _create_2(type) =>
       JS('RtcPeerConnectionIceEvent', 'new RTCPeerConnectionIceEvent(#)', type);
 
-  final RtcIceCandidate candidate;
+  final RtcIceCandidate? candidate;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25777,9 +27401,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int source;
+  int get source => JS("int", "#.source", this);
 
-  final num timestamp;
+  num get timestamp => JS("num", "#.timestamp", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25792,7 +27416,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final MediaStreamTrack track;
+  MediaStreamTrack get track => JS("MediaStreamTrack", "#.track", this);
 
   List<RtcRtpContributingSource> getContributingSources() native;
 }
@@ -25807,7 +27431,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final MediaStreamTrack track;
+  final MediaStreamTrack? track;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25826,9 +27450,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String sdp;
+  String? sdp;
 
-  String type;
+  String? type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25931,11 +27555,11 @@
   static RtcTrackEvent _create_1(type, eventInitDict) =>
       JS('RtcTrackEvent', 'new RTCTrackEvent(#,#)', type, eventInitDict);
 
-  final RtcRtpReceiver receiver;
+  RtcRtpReceiver get receiver => JS("RtcRtpReceiver", "#.receiver", this);
 
-  final List<MediaStream> streams;
+  List<MediaStream> get streams => JS("List<MediaStream>", "#.streams", this);
 
-  final MediaStreamTrack track;
+  MediaStreamTrack get track => JS("MediaStreamTrack", "#.track", this);
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25951,28 +27575,33 @@
   }
 
   @JSName('availHeight')
-  final int _availHeight;
+  int get _availHeight => JS("int", "#.availHeight", this);
 
   @JSName('availLeft')
-  final int _availLeft;
+  int get _availLeft => JS("int", "#.availLeft", this);
 
   @JSName('availTop')
-  final int _availTop;
+  int get _availTop => JS("int", "#.availTop", this);
 
   @JSName('availWidth')
-  final int _availWidth;
+  int get _availWidth => JS("int", "#.availWidth", this);
 
-  final int colorDepth;
+  int get colorDepth => JS("int", "#.colorDepth", this);
 
-  final int height;
+  int get height => JS("int", "#.height", this);
 
-  bool keepAwake;
+  bool get keepAwake => JS("bool", "#.keepAwake", this);
 
-  final ScreenOrientation orientation;
+  set keepAwake(bool value) {
+    JS("void", "#.keepAwake = #", this, value);
+  }
 
-  final int pixelDepth;
+  ScreenOrientation get orientation =>
+      JS("ScreenOrientation", "#.orientation", this);
 
-  final int width;
+  int get pixelDepth => JS("int", "#.pixelDepth", this);
+
+  int get width => JS("int", "#.width", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25988,9 +27617,9 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final int angle;
+  int get angle => JS("int", "#.angle", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   Future lock(String orientation) =>
       promiseToFuture(JS("", "#.lock(#)", this, orientation));
@@ -26010,7 +27639,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ScriptElement() => JS(
+  factory ScriptElement() => JS<ScriptElement>(
       'returns:ScriptElement;creates:ScriptElement;new:true',
       '#.createElement(#)',
       document,
@@ -26022,21 +27651,49 @@
    */
   ScriptElement.created() : super.created();
 
-  bool async;
+  bool get async => JS("bool", "#.async", this);
 
-  String charset;
+  set async(bool value) {
+    JS("void", "#.async = #", this, value);
+  }
 
-  String crossOrigin;
+  String get charset => JS("String", "#.charset", this);
 
-  bool defer;
+  set charset(String value) {
+    JS("void", "#.charset = #", this, value);
+  }
 
-  String integrity;
+  String? crossOrigin;
 
-  bool noModule;
+  bool get defer => JS("bool", "#.defer", this);
 
-  String src;
+  set defer(bool value) {
+    JS("void", "#.defer = #", this, value);
+  }
 
-  String type;
+  String get integrity => JS("String", "#.integrity", this);
+
+  set integrity(String value) {
+    JS("void", "#.integrity = #", this, value);
+  }
+
+  bool get noModule => JS("bool", "#.noModule", this);
+
+  set noModule(bool value) {
+    JS("void", "#.noModule = #", this, value);
+  }
+
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26049,7 +27706,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ScrollState([Map scrollStateInit]) {
+  factory ScrollState([Map? scrollStateInit]) {
     if (scrollStateInit != null) {
       var scrollStateInit_1 = convertDartToNative_Dictionary(scrollStateInit);
       return ScrollState._create_1(scrollStateInit_1);
@@ -26060,29 +27717,29 @@
       JS('ScrollState', 'new ScrollState(#)', scrollStateInit);
   static ScrollState _create_2() => JS('ScrollState', 'new ScrollState()');
 
-  final num deltaGranularity;
+  num get deltaGranularity => JS("num", "#.deltaGranularity", this);
 
-  final num deltaX;
+  num get deltaX => JS("num", "#.deltaX", this);
 
-  final num deltaY;
+  num get deltaY => JS("num", "#.deltaY", this);
 
-  final bool fromUserInput;
+  bool get fromUserInput => JS("bool", "#.fromUserInput", this);
 
-  final bool inInertialPhase;
+  bool get inInertialPhase => JS("bool", "#.inInertialPhase", this);
 
-  final bool isBeginning;
+  bool get isBeginning => JS("bool", "#.isBeginning", this);
 
-  final bool isDirectManipulation;
+  bool get isDirectManipulation => JS("bool", "#.isDirectManipulation", this);
 
-  final bool isEnding;
+  bool get isEnding => JS("bool", "#.isEnding", this);
 
-  final int positionX;
+  int get positionX => JS("int", "#.positionX", this);
 
-  final int positionY;
+  int get positionY => JS("int", "#.positionY", this);
 
-  final num velocityX;
+  num get velocityX => JS("num", "#.velocityX", this);
 
-  final num velocityY;
+  num get velocityY => JS("num", "#.velocityY", this);
 
   void consumeDelta(num x, num y) native;
 
@@ -26106,7 +27763,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ScrollTimeline([Map options]) {
+  factory ScrollTimeline([Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return ScrollTimeline._create_1(options_1);
@@ -26118,11 +27775,11 @@
   static ScrollTimeline _create_2() =>
       JS('ScrollTimeline', 'new ScrollTimeline()');
 
-  final String orientation;
+  String get orientation => JS("String", "#.orientation", this);
 
-  final Element scrollSource;
+  final Element? scrollSource;
 
-  final Object timeRange;
+  Object get timeRange => JS("Object", "#.timeRange", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26135,7 +27792,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory SecurityPolicyViolationEvent(String type, [Map eventInitDict]) {
+  factory SecurityPolicyViolationEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return SecurityPolicyViolationEvent._create_1(type, eventInitDict_1);
@@ -26153,30 +27810,30 @@
       type);
 
   @JSName('blockedURI')
-  final String blockedUri;
+  String get blockedUri => JS("String", "#.blockedURI", this);
 
-  final int columnNumber;
+  int get columnNumber => JS("int", "#.columnNumber", this);
 
-  final String disposition;
+  String get disposition => JS("String", "#.disposition", this);
 
   @JSName('documentURI')
-  final String documentUri;
+  String get documentUri => JS("String", "#.documentURI", this);
 
-  final String effectiveDirective;
+  String get effectiveDirective => JS("String", "#.effectiveDirective", this);
 
-  final int lineNumber;
+  int get lineNumber => JS("int", "#.lineNumber", this);
 
-  final String originalPolicy;
+  String get originalPolicy => JS("String", "#.originalPolicy", this);
 
-  final String referrer;
+  String get referrer => JS("String", "#.referrer", this);
 
-  final String sample;
+  String get sample => JS("String", "#.sample", this);
 
-  final String sourceFile;
+  String get sourceFile => JS("String", "#.sourceFile", this);
 
-  final int statusCode;
+  int get statusCode => JS("int", "#.statusCode", this);
 
-  final String violatedDirective;
+  String get violatedDirective => JS("String", "#.violatedDirective", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26189,7 +27846,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory SelectElement() => JS(
+  factory SelectElement() => JS<SelectElement>(
       'returns:SelectElement;creates:SelectElement;new:true',
       '#.createElement(#)',
       document,
@@ -26201,42 +27858,78 @@
    */
   SelectElement.created() : super.created();
 
-  bool autofocus;
+  bool get autofocus => JS("bool", "#.autofocus", this);
 
-  bool disabled;
+  set autofocus(bool value) {
+    JS("void", "#.autofocus = #", this, value);
+  }
 
-  final FormElement form;
+  bool get disabled => JS("bool", "#.disabled", this);
+
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
+
+  final FormElement? form;
 
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  int length;
+  int get length => JS("int", "#.length", this);
 
-  bool multiple;
+  set length(int value) {
+    JS("void", "#.length = #", this, value);
+  }
 
-  String name;
+  bool get multiple => JS("bool", "#.multiple", this);
 
-  bool required;
+  set multiple(bool value) {
+    JS("void", "#.multiple = #", this, value);
+  }
 
-  int selectedIndex;
+  String get name => JS("String", "#.name", this);
 
-  int size;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  final String type;
+  bool get required => JS("bool", "#.required", this);
 
-  final String validationMessage;
+  set required(bool value) {
+    JS("void", "#.required = #", this, value);
+  }
 
-  final ValidityState validity;
+  int get selectedIndex => JS("int", "#.selectedIndex", this);
 
-  String value;
+  set selectedIndex(int value) {
+    JS("void", "#.selectedIndex = #", this, value);
+  }
 
-  final bool willValidate;
+  int get size => JS("int", "#.size", this);
 
-  void __setter__(int index, OptionElement option) native;
+  set size(int value) {
+    JS("void", "#.size = #", this, value);
+  }
 
-  void add(Object element, Object before) native;
+  String get type => JS("String", "#.type", this);
+
+  String get validationMessage => JS("String", "#.validationMessage", this);
+
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
+
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
+
+  void __setter__(int index, OptionElement? option) native;
+
+  void add(Object element, Object? before) native;
 
   bool checkValidity() native;
 
@@ -26276,43 +27969,43 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Node anchorNode;
+  final Node? anchorNode;
 
-  final int anchorOffset;
+  int get anchorOffset => JS("int", "#.anchorOffset", this);
 
-  final Node baseNode;
+  final Node? baseNode;
 
-  final int baseOffset;
+  int get baseOffset => JS("int", "#.baseOffset", this);
 
-  final Node extentNode;
+  final Node? extentNode;
 
-  final int extentOffset;
+  int get extentOffset => JS("int", "#.extentOffset", this);
 
-  final Node focusNode;
+  final Node? focusNode;
 
-  final int focusOffset;
+  int get focusOffset => JS("int", "#.focusOffset", this);
 
-  final bool isCollapsed;
+  bool get isCollapsed => JS("bool", "#.isCollapsed", this);
 
-  final int rangeCount;
+  int get rangeCount => JS("int", "#.rangeCount", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   void addRange(Range range) native;
 
-  void collapse(Node node, [int offset]) native;
+  void collapse(Node? node, [int? offset]) native;
 
   void collapseToEnd() native;
 
   void collapseToStart() native;
 
-  bool containsNode(Node node, [bool allowPartialContainment]) native;
+  bool containsNode(Node node, [bool? allowPartialContainment]) native;
 
   void deleteFromDocument() native;
 
   void empty() native;
 
-  void extend(Node node, [int offset]) native;
+  void extend(Node node, [int? offset]) native;
 
   Range getRangeAt(int index) native;
 
@@ -26324,10 +28017,10 @@
 
   void selectAllChildren(Node node) native;
 
-  void setBaseAndExtent(
-      Node baseNode, int baseOffset, Node extentNode, int extentOffset) native;
+  void setBaseAndExtent(Node? baseNode, int baseOffset, Node? extentNode,
+      int extentOffset) native;
 
-  void setPosition(Node node, [int offset]) native;
+  void setPosition(Node? node, [int? offset]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26343,11 +28036,11 @@
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  final bool activated;
+  bool get activated => JS("bool", "#.activated", this);
 
-  final bool hasReading;
+  bool get hasReading => JS("bool", "#.hasReading", this);
 
-  final num timestamp;
+  num get timestamp => JS("num", "#.timestamp", this);
 
   void start() native;
 
@@ -26373,7 +28066,7 @@
   static SensorErrorEvent _create_1(type, eventInitDict) =>
       JS('SensorErrorEvent', 'new SensorErrorEvent(#,#)', type, eventInitDict);
 
-  final DomException error;
+  DomException get error => JS("DomException", "#.error", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26390,11 +28083,11 @@
       const EventStreamProvider<Event>('error');
 
   @JSName('scriptURL')
-  final String scriptUrl;
+  String get scriptUrl => JS("String", "#.scriptURL", this);
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 
-  void postMessage(/*any*/ message, [List<Object> transfer]) {
+  void postMessage(/*any*/ message, [List<Object>? transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, transfer);
@@ -26426,19 +28119,18 @@
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  final ServiceWorker controller;
+  final ServiceWorker? controller;
 
-  Future<ServiceWorkerRegistration> get ready =>
-      promiseToFuture<ServiceWorkerRegistration>(JS("", "#.ready", this));
+  Future get ready => JS("Future", "#.ready", this);
 
-  Future<ServiceWorkerRegistration> getRegistration([String documentURL]) =>
+  Future<ServiceWorkerRegistration> getRegistration([String? documentURL]) =>
       promiseToFuture<ServiceWorkerRegistration>(
           JS("", "#.getRegistration(#)", this, documentURL));
 
   Future<List<dynamic>> getRegistrations() =>
       promiseToFuture<List<dynamic>>(JS("", "#.getRegistrations()", this));
 
-  Future<ServiceWorkerRegistration> register(String url, [Map options]) {
+  Future<ServiceWorkerRegistration> register(String url, [Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -26475,9 +28167,10 @@
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  final Clients clients;
+  Clients get clients => JS("Clients", "#.clients", this);
 
-  final ServiceWorkerRegistration registration;
+  ServiceWorkerRegistration get registration =>
+      JS("ServiceWorkerRegistration", "#.registration", this);
 
   Future skipWaiting() => promiseToFuture(JS("", "#.skipWaiting()", this));
 
@@ -26508,25 +28201,28 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final ServiceWorker active;
+  final ServiceWorker? active;
 
-  final BackgroundFetchManager backgroundFetch;
+  BackgroundFetchManager get backgroundFetch =>
+      JS("BackgroundFetchManager", "#.backgroundFetch", this);
 
-  final ServiceWorker installing;
+  final ServiceWorker? installing;
 
-  final NavigationPreloadManager navigationPreload;
+  NavigationPreloadManager get navigationPreload =>
+      JS("NavigationPreloadManager", "#.navigationPreload", this);
 
-  final PaymentManager paymentManager;
+  PaymentManager get paymentManager =>
+      JS("PaymentManager", "#.paymentManager", this);
 
-  final PushManager pushManager;
+  PushManager get pushManager => JS("PushManager", "#.pushManager", this);
 
-  final String scope;
+  String get scope => JS("String", "#.scope", this);
 
-  final SyncManager sync;
+  SyncManager get sync => JS("SyncManager", "#.sync", this);
 
-  final ServiceWorker waiting;
+  final ServiceWorker? waiting;
 
-  Future<List<dynamic>> getNotifications([Map filter]) {
+  Future<List<dynamic>> getNotifications([Map? filter]) {
     var filter_dict = null;
     if (filter != null) {
       filter_dict = convertDartToNative_Dictionary(filter);
@@ -26535,7 +28231,7 @@
         JS("", "#.getNotifications(#)", this, filter_dict));
   }
 
-  Future showNotification(String title, [Map options]) {
+  Future showNotification(String title, [Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -26561,7 +28257,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ShadowElement() => document.createElement("shadow");
+  factory ShadowElement() => document.createElement("shadow") as ShadowElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -26590,28 +28286,34 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool delegatesFocus;
+  bool get delegatesFocus => JS("bool", "#.delegatesFocus", this);
 
-  final Element host;
+  Element get host => JS("Element", "#.host", this);
 
   @JSName('innerHTML')
-  String innerHtml;
+  String get innerHtml => JS("String", "#.innerHTML", this);
 
-  final String mode;
+  @JSName('innerHTML')
+  set innerHtml(String value) {
+    JS("void", "#.innerHTML = #", this, value);
+  }
 
-  final ShadowRoot olderShadowRoot;
+  String get mode => JS("String", "#.mode", this);
+
+  final ShadowRoot? olderShadowRoot;
 
   // From DocumentOrShadowRoot
 
-  final Element activeElement;
+  final Element? activeElement;
 
-  final Element fullscreenElement;
+  final Element? fullscreenElement;
 
-  final Element pointerLockElement;
+  final Element? pointerLockElement;
 
   @Returns('_StyleSheetList|Null')
   @Creates('_StyleSheetList')
-  final List<StyleSheet> styleSheets;
+  List<StyleSheet> get styleSheets =>
+      JS("_StyleSheetList", "#.styleSheets", this);
 
   Element elementFromPoint(int x, int y) native;
 
@@ -26670,7 +28372,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int byteLength;
+  int get byteLength => JS("int", "#.byteLength", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26686,7 +28388,7 @@
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  factory SharedWorker(String scriptURL, [String name]) {
+  factory SharedWorker(String scriptURL, [String? name]) {
     if (name != null) {
       return SharedWorker._create_1(scriptURL, name);
     }
@@ -26697,7 +28399,7 @@
   static SharedWorker _create_2(scriptURL) =>
       JS('SharedWorker', 'new SharedWorker(#)', scriptURL);
 
-  final MessagePort port;
+  MessagePort get port => JS("MessagePort", "#.port", this);
 
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
@@ -26725,7 +28427,7 @@
 
   static const int TEMPORARY = 0;
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   void close() native;
 
@@ -26733,8 +28435,8 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   void _webkitRequestFileSystem(int type, int size,
-      [_FileSystemCallback successCallback,
-      _ErrorCallback errorCallback]) native;
+      [_FileSystemCallback? successCallback,
+      _ErrorCallback? errorCallback]) native;
 
   @JSName('webkitRequestFileSystemSync')
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -26751,7 +28453,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   void _webkitResolveLocalFileSystemUrl(
       String url, _EntryCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   /// Stream of `connect` events handled by this [SharedWorkerGlobalScope].
   Stream<Event> get onConnect => connectEvent.forTarget(this);
@@ -26778,9 +28480,13 @@
    */
   SlotElement.created() : super.created();
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  List<Node> assignedNodes([Map options]) {
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
+
+  List<Node> assignedNodes([Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return _assignedNodes_1(options_1);
@@ -26810,23 +28516,44 @@
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  num appendWindowEnd;
+  num get appendWindowEnd => JS("num", "#.appendWindowEnd", this);
 
-  num appendWindowStart;
+  set appendWindowEnd(num value) {
+    JS("void", "#.appendWindowEnd = #", this, value);
+  }
 
-  final AudioTrackList audioTracks;
+  num get appendWindowStart => JS("num", "#.appendWindowStart", this);
 
-  final TimeRanges buffered;
+  set appendWindowStart(num value) {
+    JS("void", "#.appendWindowStart = #", this, value);
+  }
 
-  String mode;
+  AudioTrackList get audioTracks => JS("AudioTrackList", "#.audioTracks", this);
 
-  num timestampOffset;
+  TimeRanges get buffered => JS("TimeRanges", "#.buffered", this);
 
-  TrackDefaultList trackDefaults;
+  String get mode => JS("String", "#.mode", this);
 
-  final bool updating;
+  set mode(String value) {
+    JS("void", "#.mode = #", this, value);
+  }
 
-  final VideoTrackList videoTracks;
+  num get timestampOffset => JS("num", "#.timestampOffset", this);
+
+  set timestampOffset(num value) {
+    JS("void", "#.timestampOffset = #", this, value);
+  }
+
+  TrackDefaultList get trackDefaults =>
+      JS("TrackDefaultList", "#.trackDefaults", this);
+
+  set trackDefaults(TrackDefaultList value) {
+    JS("void", "#.trackDefaults = #", this, value);
+  }
+
+  bool get updating => JS("bool", "#.updating", this);
+
+  VideoTrackList get videoTracks => JS("VideoTrackList", "#.videoTracks", this);
 
   void abort() native;
 
@@ -26912,7 +28639,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory SourceElement() => JS(
+  factory SourceElement() => JS<SourceElement>(
       'returns:SourceElement;creates:SourceElement;new:true',
       '#.createElement(#)',
       document,
@@ -26924,15 +28651,35 @@
    */
   SourceElement.created() : super.created();
 
-  String media;
+  String get media => JS("String", "#.media", this);
 
-  String sizes;
+  set media(String value) {
+    JS("void", "#.media = #", this, value);
+  }
 
-  String src;
+  String get sizes => JS("String", "#.sizes", this);
 
-  String srcset;
+  set sizes(String value) {
+    JS("void", "#.sizes = #", this, value);
+  }
 
-  String type;
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get srcset => JS("String", "#.srcset", this);
+
+  set srcset(String value) {
+    JS("void", "#.srcset = #", this, value);
+  }
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26945,7 +28692,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory SpanElement() => JS(
+  factory SpanElement() => JS<SpanElement>(
       'returns:SpanElement;creates:SpanElement;new:true',
       '#.createElement(#)',
       document,
@@ -26974,9 +28721,17 @@
   static SpeechGrammar _create_1() =>
       JS('SpeechGrammar', 'new SpeechGrammar()');
 
-  String src;
+  String get src => JS("String", "#.src", this);
 
-  num weight;
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  num get weight => JS("num", "#.weight", this);
+
+  set weight(num value) {
+    JS("void", "#.weight = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27042,9 +28797,9 @@
   SpeechGrammar elementAt(int index) => this[index];
   // -- end List<SpeechGrammar> mixins.
 
-  void addFromString(String string, [num weight]) native;
+  void addFromString(String string, [num? weight]) native;
 
-  void addFromUri(String src, [num weight]) native;
+  void addFromUri(String src, [num? weight]) native;
 
   SpeechGrammar item(int index) native;
 }
@@ -27163,17 +28918,37 @@
   static bool get supported => JS(
       'bool', '!!(window.SpeechRecognition || window.webkitSpeechRecognition)');
 
-  MediaStreamTrack audioTrack;
+  MediaStreamTrack? audioTrack;
 
-  bool continuous;
+  bool get continuous => JS("bool", "#.continuous", this);
 
-  SpeechGrammarList grammars;
+  set continuous(bool value) {
+    JS("void", "#.continuous = #", this, value);
+  }
 
-  bool interimResults;
+  SpeechGrammarList get grammars => JS("SpeechGrammarList", "#.grammars", this);
 
-  String lang;
+  set grammars(SpeechGrammarList value) {
+    JS("void", "#.grammars = #", this, value);
+  }
 
-  int maxAlternatives;
+  bool get interimResults => JS("bool", "#.interimResults", this);
+
+  set interimResults(bool value) {
+    JS("void", "#.interimResults = #", this, value);
+  }
+
+  String get lang => JS("String", "#.lang", this);
+
+  set lang(String value) {
+    JS("void", "#.lang = #", this, value);
+  }
+
+  int get maxAlternatives => JS("int", "#.maxAlternatives", this);
+
+  set maxAlternatives(int value) {
+    JS("void", "#.maxAlternatives = #", this, value);
+  }
 
   void abort() native;
 
@@ -27231,9 +29006,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num confidence;
+  num get confidence => JS("num", "#.confidence", this);
 
-  final String transcript;
+  String get transcript => JS("String", "#.transcript", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27247,7 +29022,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory SpeechRecognitionError(String type, [Map initDict]) {
+  factory SpeechRecognitionError(String type, [Map? initDict]) {
     if (initDict != null) {
       var initDict_1 = convertDartToNative_Dictionary(initDict);
       return SpeechRecognitionError._create_1(type, initDict_1);
@@ -27262,9 +29037,9 @@
   static SpeechRecognitionError _create_2(type) =>
       JS('SpeechRecognitionError', 'new SpeechRecognitionError(#)', type);
 
-  final String error;
+  String get error => JS("String", "#.error", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27278,7 +29053,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory SpeechRecognitionEvent(String type, [Map initDict]) {
+  factory SpeechRecognitionEvent(String type, [Map? initDict]) {
     if (initDict != null) {
       var initDict_1 = convertDartToNative_Dictionary(initDict);
       return SpeechRecognitionEvent._create_1(type, initDict_1);
@@ -27293,15 +29068,15 @@
   static SpeechRecognitionEvent _create_2(type) =>
       JS('SpeechRecognitionEvent', 'new SpeechRecognitionEvent(#)', type);
 
-  final Document emma;
+  final Document? emma;
 
-  final Document interpretation;
+  final Document? interpretation;
 
-  final int resultIndex;
+  int get resultIndex => JS("int", "#.resultIndex", this);
 
   @Returns('_SpeechRecognitionResultList|Null')
   @Creates('_SpeechRecognitionResultList')
-  final List<SpeechRecognitionResult> results;
+  final List<SpeechRecognitionResult>? results;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27315,9 +29090,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool isFinal;
+  bool get isFinal => JS("bool", "#.isFinal", this);
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   SpeechRecognitionAlternative item(int index) native;
 }
@@ -27338,11 +29113,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool paused;
+  bool get paused => JS("bool", "#.paused", this);
 
-  final bool pending;
+  bool get pending => JS("bool", "#.pending", this);
 
-  final bool speaking;
+  bool get speaking => JS("bool", "#.speaking", this);
 
   void cancel() native;
 
@@ -27366,13 +29141,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int charIndex;
+  int get charIndex => JS("int", "#.charIndex", this);
 
-  final num elapsedTime;
+  num get elapsedTime => JS("num", "#.elapsedTime", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
-  final SpeechSynthesisUtterance utterance;
+  SpeechSynthesisUtterance get utterance =>
+      JS("SpeechSynthesisUtterance", "#.utterance", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27448,7 +29224,7 @@
   static const EventStreamProvider<SpeechSynthesisEvent> startEvent =
       const EventStreamProvider<SpeechSynthesisEvent>('start');
 
-  factory SpeechSynthesisUtterance([String text]) {
+  factory SpeechSynthesisUtterance([String? text]) {
     if (text != null) {
       return SpeechSynthesisUtterance._create_1(text);
     }
@@ -27459,17 +29235,37 @@
   static SpeechSynthesisUtterance _create_2() =>
       JS('SpeechSynthesisUtterance', 'new SpeechSynthesisUtterance()');
 
-  String lang;
+  String get lang => JS("String", "#.lang", this);
 
-  num pitch;
+  set lang(String value) {
+    JS("void", "#.lang = #", this, value);
+  }
 
-  num rate;
+  num get pitch => JS("num", "#.pitch", this);
 
-  String text;
+  set pitch(num value) {
+    JS("void", "#.pitch = #", this, value);
+  }
 
-  SpeechSynthesisVoice voice;
+  num get rate => JS("num", "#.rate", this);
 
-  num volume;
+  set rate(num value) {
+    JS("void", "#.rate = #", this, value);
+  }
+
+  String get text => JS("String", "#.text", this);
+
+  set text(String value) {
+    JS("void", "#.text = #", this, value);
+  }
+
+  SpeechSynthesisVoice? voice;
+
+  num get volume => JS("num", "#.volume", this);
+
+  set volume(num value) {
+    JS("void", "#.volume = #", this, value);
+  }
 
   /// Stream of `boundary` events handled by this [SpeechSynthesisUtterance].
   Stream<SpeechSynthesisEvent> get onBoundary => boundaryEvent.forTarget(this);
@@ -27504,16 +29300,16 @@
   }
 
   @JSName('default')
-  final bool defaultValue;
+  bool get defaultValue => JS("bool", "#.default", this);
 
-  final String lang;
+  String get lang => JS("String", "#.lang", this);
 
-  final bool localService;
+  bool get localService => JS("bool", "#.localService", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   @JSName('voiceURI')
-  final String voiceUri;
+  String get voiceUri => JS("String", "#.voiceURI", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27526,15 +29322,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool collapsed;
+  bool get collapsed => JS("bool", "#.collapsed", this);
 
-  final Node endContainer;
+  Node get endContainer => JS("Node", "#.endContainer", this);
 
-  final int endOffset;
+  int get endOffset => JS("int", "#.endOffset", this);
 
-  final Node startContainer;
+  Node get startContainer => JS("Node", "#.startContainer", this);
 
-  final int startOffset;
+  int get startOffset => JS("int", "#.startOffset", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27575,11 +29371,11 @@
   }
 
   // TODO(nweiz): update this when maps support lazy iteration
-  bool containsValue(Object value) => values.any((e) => e == value);
+  bool containsValue(Object? value) => values.any((e) => e == value);
 
-  bool containsKey(Object key) => _getItem(key) != null;
+  bool containsKey(Object? key) => _getItem(key) != null;
 
-  String operator [](Object key) => _getItem(key);
+  String? operator [](Object? key) => _getItem(key as String);
 
   void operator []=(String key, String value) {
     _setItem(key, value);
@@ -27590,7 +29386,7 @@
     return this[key];
   }
 
-  String remove(Object key) {
+  String? remove(Object? key) {
     final value = this[key];
     _removeItem(key);
     return value;
@@ -27630,7 +29426,7 @@
   }
 
   @JSName('length')
-  final int _length;
+  int get _length => JS("int", "#.length", this);
 
   @JSName('clear')
   void _clear() native;
@@ -27677,7 +29473,7 @@
     return e;
   }
 
-  factory StorageEvent._(String type, [Map eventInitDict]) {
+  factory StorageEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return StorageEvent._create_1(type, eventInitDict_1);
@@ -27689,15 +29485,15 @@
   static StorageEvent _create_2(type) =>
       JS('StorageEvent', 'new StorageEvent(#)', type);
 
-  final String key;
+  final String? key;
 
-  final String newValue;
+  final String? newValue;
 
-  final String oldValue;
+  final String? oldValue;
 
-  final Storage storageArea;
+  final Storage? storageArea;
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 
   @JSName('initStorageEvent')
   void _initStorageEvent(
@@ -27705,8 +29501,8 @@
       bool canBubbleArg,
       bool cancelableArg,
       String keyArg,
-      String oldValueArg,
-      String newValueArg,
+      String? oldValueArg,
+      String? newValueArg,
       String urlArg,
       Storage storageAreaArg) native;
 }
@@ -27755,7 +29551,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory StyleElement() => JS(
+  factory StyleElement() => JS<StyleElement>(
       'returns:StyleElement;creates:StyleElement;new:true',
       '#.createElement(#)',
       document,
@@ -27767,13 +29563,25 @@
    */
   StyleElement.created() : super.created();
 
-  bool disabled;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  String media;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
-  final StyleSheet sheet;
+  String get media => JS("String", "#.media", this);
 
-  String type;
+  set media(String value) {
+    JS("void", "#.media = #", this, value);
+  }
+
+  final StyleSheet? sheet;
+
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27786,7 +29594,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
   bool matchMedium(String mediaquery) native;
 }
@@ -27837,19 +29645,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  bool disabled;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  final String href;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
-  final MediaList media;
+  final String? href;
 
-  final Node ownerNode;
+  MediaList get media => JS("MediaList", "#.media", this);
 
-  final StyleSheet parentStyleSheet;
+  final Node? ownerNode;
 
-  final String title;
+  final StyleSheet? parentStyleSheet;
 
-  final String type;
+  final String? title;
+
+  String get type => JS("String", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27869,9 +29681,9 @@
   static SyncEvent _create_1(type, init) =>
       JS('SyncEvent', 'new SyncEvent(#,#)', type, init);
 
-  final bool lastChance;
+  bool get lastChance => JS("bool", "#.lastChance", this);
 
-  final String tag;
+  String get tag => JS("String", "#.tag", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27901,7 +29713,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TableCaptionElement() => JS(
+  factory TableCaptionElement() => JS<TableCaptionElement>(
       'returns:TableCaptionElement;creates:TableCaptionElement;new:true',
       '#.createElement(#)',
       document,
@@ -27925,7 +29737,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TableCellElement() => JS(
+  factory TableCellElement() => JS<TableCellElement>(
       'returns:TableCellElement;creates:TableCellElement;new:true',
       '#.createElement(#)',
       document,
@@ -27937,13 +29749,25 @@
    */
   TableCellElement.created() : super.created();
 
-  final int cellIndex;
+  int get cellIndex => JS("int", "#.cellIndex", this);
 
-  int colSpan;
+  int get colSpan => JS("int", "#.colSpan", this);
 
-  String headers;
+  set colSpan(int value) {
+    JS("void", "#.colSpan = #", this, value);
+  }
 
-  int rowSpan;
+  String get headers => JS("String", "#.headers", this);
+
+  set headers(String value) {
+    JS("void", "#.headers = #", this, value);
+  }
+
+  int get rowSpan => JS("int", "#.rowSpan", this);
+
+  set rowSpan(int value) {
+    JS("void", "#.rowSpan = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27956,7 +29780,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TableColElement() => JS(
+  factory TableColElement() => JS<TableColElement>(
       'returns:TableColElement;creates:TableColElement;new:true',
       '#.createElement(#)',
       document,
@@ -27968,7 +29792,11 @@
    */
   TableColElement.created() : super.created();
 
-  int span;
+  int get span => JS("int", "#.span", this);
+
+  set span(int value) {
+    JS("void", "#.span = #", this, value);
+  }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28024,7 +29852,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TableElement() => JS(
+  factory TableElement() => JS<TableElement>(
       'returns:TableElement;creates:TableElement;new:true',
       '#.createElement(#)',
       document,
@@ -28036,21 +29864,21 @@
    */
   TableElement.created() : super.created();
 
-  TableCaptionElement caption;
+  TableCaptionElement? caption;
 
   @JSName('rows')
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> _rows;
+  List<Node> get _rows => JS("HtmlCollection", "#.rows", this);
 
   @JSName('tBodies')
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> _tBodies;
+  List<Node> get _tBodies => JS("HtmlCollection", "#.tBodies", this);
 
-  TableSectionElement tFoot;
+  TableSectionElement? tFoot;
 
-  TableSectionElement tHead;
+  TableSectionElement? tHead;
 
   @JSName('createCaption')
   TableCaptionElement _createCaption() native;
@@ -28070,7 +29898,7 @@
   void deleteTHead() native;
 
   @JSName('insertRow')
-  TableRowElement _insertRow([int index]) native;
+  TableRowElement _insertRow([int? index]) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28110,7 +29938,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TableRowElement() => JS(
+  factory TableRowElement() => JS<TableRowElement>(
       'returns:TableRowElement;creates:TableRowElement;new:true',
       '#.createElement(#)',
       document,
@@ -28125,16 +29953,16 @@
   @JSName('cells')
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> _cells;
+  List<Node> get _cells => JS("HtmlCollection", "#.cells", this);
 
-  final int rowIndex;
+  int get rowIndex => JS("int", "#.rowIndex", this);
 
-  final int sectionRowIndex;
+  int get sectionRowIndex => JS("int", "#.sectionRowIndex", this);
 
   void deleteCell(int index) native;
 
   @JSName('insertCell')
-  HtmlElement _insertCell([int index]) native;
+  HtmlElement _insertCell([int? index]) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28181,12 +30009,12 @@
   @JSName('rows')
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
-  final List<Node> _rows;
+  List<Node> get _rows => JS("HtmlCollection", "#.rows", this);
 
   void deleteRow(int index) native;
 
   @JSName('insertRow')
-  HtmlElement _insertRow([int index]) native;
+  HtmlElement _insertRow([int? index]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28199,16 +30027,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String containerId;
+  String get containerId => JS("String", "#.containerId", this);
 
-  final String containerName;
+  String get containerName => JS("String", "#.containerName", this);
 
-  final String containerSrc;
+  String get containerSrc => JS("String", "#.containerSrc", this);
 
-  final String containerType;
+  String get containerType => JS("String", "#.containerType", this);
 
   @JSName('scriptURL')
-  final String scriptUrl;
+  String get scriptUrl => JS("String", "#.scriptURL", this);
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28224,7 +30052,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TemplateElement() => document.createElement("template");
+  factory TemplateElement() =>
+      document.createElement("template") as TemplateElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -28235,7 +30064,7 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('template');
 
-  final DocumentFragment content;
+  DocumentFragment get content => JS("DocumentFragment", "#.content", this);
 
   /**
    * An override to place the contents into content rather than as child nodes.
@@ -28272,9 +30101,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final SlotElement assignedSlot;
+  final SlotElement? assignedSlot;
 
-  final String wholeText;
+  String get wholeText => JS("String", "#.wholeText", this);
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
@@ -28293,7 +30122,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TextAreaElement() => JS(
+  factory TextAreaElement() => JS<TextAreaElement>(
       'returns:TextAreaElement;creates:TextAreaElement;new:true',
       '#.createElement(#)',
       document,
@@ -28305,58 +30134,130 @@
    */
   TextAreaElement.created() : super.created();
 
-  String autocapitalize;
+  String get autocapitalize => JS("String", "#.autocapitalize", this);
 
-  bool autofocus;
+  set autocapitalize(String value) {
+    JS("void", "#.autocapitalize = #", this, value);
+  }
 
-  int cols;
+  bool get autofocus => JS("bool", "#.autofocus", this);
 
-  String defaultValue;
+  set autofocus(bool value) {
+    JS("void", "#.autofocus = #", this, value);
+  }
 
-  String dirName;
+  int get cols => JS("int", "#.cols", this);
 
-  bool disabled;
+  set cols(int value) {
+    JS("void", "#.cols = #", this, value);
+  }
 
-  final FormElement form;
+  String get defaultValue => JS("String", "#.defaultValue", this);
+
+  set defaultValue(String value) {
+    JS("void", "#.defaultValue = #", this, value);
+  }
+
+  String get dirName => JS("String", "#.dirName", this);
+
+  set dirName(String value) {
+    JS("void", "#.dirName = #", this, value);
+  }
+
+  bool get disabled => JS("bool", "#.disabled", this);
+
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
+
+  final FormElement? form;
 
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  final List<Node> labels;
+  List<Node> get labels => JS("NodeList", "#.labels", this);
 
-  int maxLength;
+  int get maxLength => JS("int", "#.maxLength", this);
 
-  int minLength;
+  set maxLength(int value) {
+    JS("void", "#.maxLength = #", this, value);
+  }
 
-  String name;
+  int get minLength => JS("int", "#.minLength", this);
 
-  String placeholder;
+  set minLength(int value) {
+    JS("void", "#.minLength = #", this, value);
+  }
 
-  bool readOnly;
+  String get name => JS("String", "#.name", this);
 
-  bool required;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  int rows;
+  String get placeholder => JS("String", "#.placeholder", this);
 
-  String selectionDirection;
+  set placeholder(String value) {
+    JS("void", "#.placeholder = #", this, value);
+  }
 
-  int selectionEnd;
+  bool get readOnly => JS("bool", "#.readOnly", this);
 
-  int selectionStart;
+  set readOnly(bool value) {
+    JS("void", "#.readOnly = #", this, value);
+  }
 
-  final int textLength;
+  bool get required => JS("bool", "#.required", this);
 
-  final String type;
+  set required(bool value) {
+    JS("void", "#.required = #", this, value);
+  }
 
-  final String validationMessage;
+  int get rows => JS("int", "#.rows", this);
 
-  final ValidityState validity;
+  set rows(int value) {
+    JS("void", "#.rows = #", this, value);
+  }
 
-  String value;
+  String get selectionDirection => JS("String", "#.selectionDirection", this);
 
-  final bool willValidate;
+  set selectionDirection(String value) {
+    JS("void", "#.selectionDirection = #", this, value);
+  }
 
-  String wrap;
+  int get selectionEnd => JS("int", "#.selectionEnd", this);
+
+  set selectionEnd(int value) {
+    JS("void", "#.selectionEnd = #", this, value);
+  }
+
+  int get selectionStart => JS("int", "#.selectionStart", this);
+
+  set selectionStart(int value) {
+    JS("void", "#.selectionStart = #", this, value);
+  }
+
+  int get textLength => JS("int", "#.textLength", this);
+
+  String get type => JS("String", "#.type", this);
+
+  String get validationMessage => JS("String", "#.validationMessage", this);
+
+  ValidityState get validity => JS("ValidityState", "#.validity", this);
+
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
+
+  bool get willValidate => JS("bool", "#.willValidate", this);
+
+  String get wrap => JS("String", "#.wrap", this);
+
+  set wrap(String value) {
+    JS("void", "#.wrap = #", this, value);
+  }
 
   bool checkValidity() native;
 
@@ -28367,9 +30268,9 @@
   void setCustomValidity(String error) native;
 
   void setRangeText(String replacement,
-      {int start, int end, String selectionMode}) native;
+      {int? start, int? end, String? selectionMode}) native;
 
-  void setSelectionRange(int start, int end, [String direction]) native;
+  void setSelectionRange(int start, int end, [String? direction]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28416,10 +30317,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String data;
+  String get data => JS("String", "#.data", this);
 
   @JSName('initTextEvent')
-  void _initTextEvent(String type, bool bubbles, bool cancelable, Window view,
+  void _initTextEvent(String type, bool bubbles, bool cancelable, Window? view,
       String data) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28433,29 +30334,31 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num actualBoundingBoxAscent;
+  num get actualBoundingBoxAscent =>
+      JS("num", "#.actualBoundingBoxAscent", this);
 
-  final num actualBoundingBoxDescent;
+  num get actualBoundingBoxDescent =>
+      JS("num", "#.actualBoundingBoxDescent", this);
 
-  final num actualBoundingBoxLeft;
+  num get actualBoundingBoxLeft => JS("num", "#.actualBoundingBoxLeft", this);
 
-  final num actualBoundingBoxRight;
+  num get actualBoundingBoxRight => JS("num", "#.actualBoundingBoxRight", this);
 
-  final num alphabeticBaseline;
+  num get alphabeticBaseline => JS("num", "#.alphabeticBaseline", this);
 
-  final num emHeightAscent;
+  num get emHeightAscent => JS("num", "#.emHeightAscent", this);
 
-  final num emHeightDescent;
+  num get emHeightDescent => JS("num", "#.emHeightDescent", this);
 
-  final num fontBoundingBoxAscent;
+  num get fontBoundingBoxAscent => JS("num", "#.fontBoundingBoxAscent", this);
 
-  final num fontBoundingBoxDescent;
+  num get fontBoundingBoxDescent => JS("num", "#.fontBoundingBoxDescent", this);
 
-  final num hangingBaseline;
+  num get hangingBaseline => JS("num", "#.hangingBaseline", this);
 
-  final num ideographicBaseline;
+  num get ideographicBaseline => JS("num", "#.ideographicBaseline", this);
 
-  final num width;
+  num get width => JS("num", "#.width", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28477,19 +30380,23 @@
   static const EventStreamProvider<Event> cueChangeEvent =
       const EventStreamProvider<Event>('cuechange');
 
-  final TextTrackCueList activeCues;
+  final TextTrackCueList? activeCues;
 
-  final TextTrackCueList cues;
+  final TextTrackCueList? cues;
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String kind;
+  String get kind => JS("String", "#.kind", this);
 
-  final String label;
+  String get label => JS("String", "#.label", this);
 
-  final String language;
+  String get language => JS("String", "#.language", this);
 
-  String mode;
+  String get mode => JS("String", "#.mode", this);
+
+  set mode(String value) {
+    JS("void", "#.mode = #", this, value);
+  }
 
   void addCue(TextTrackCue cue) native;
 
@@ -28527,15 +30434,31 @@
   static const EventStreamProvider<Event> exitEvent =
       const EventStreamProvider<Event>('exit');
 
-  num endTime;
+  num get endTime => JS("num", "#.endTime", this);
 
-  String id;
+  set endTime(num value) {
+    JS("void", "#.endTime = #", this, value);
+  }
 
-  bool pauseOnExit;
+  String get id => JS("String", "#.id", this);
 
-  num startTime;
+  set id(String value) {
+    JS("void", "#.id = #", this, value);
+  }
 
-  final TextTrack track;
+  bool get pauseOnExit => JS("bool", "#.pauseOnExit", this);
+
+  set pauseOnExit(bool value) {
+    JS("void", "#.pauseOnExit = #", this, value);
+  }
+
+  num get startTime => JS("num", "#.startTime", this);
+
+  set startTime(num value) {
+    JS("void", "#.startTime = #", this, value);
+  }
+
+  final TextTrack? track;
 
   /// Stream of `enter` events handled by this [TextTrackCue].
   Stream<Event> get onEnter => enterEvent.forTarget(this);
@@ -28701,7 +30624,11 @@
    */
   TimeElement.created() : super.created();
 
-  String dateTime;
+  String get dateTime => JS("String", "#.dateTime", this);
+
+  set dateTime(String value) {
+    JS("void", "#.dateTime = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28715,7 +30642,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   double end(int index) native;
 
@@ -28739,7 +30666,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TitleElement() => JS(
+  factory TitleElement() => JS<TitleElement>(
       'returns:TitleElement;creates:TitleElement;new:true',
       '#.createElement(#)',
       document,
@@ -28769,38 +30696,38 @@
   static Touch _create_1(initDict) => JS('Touch', 'new Touch(#)', initDict);
 
   @JSName('clientX')
-  final num _clientX;
+  num get _clientX => JS("num", "#.clientX", this);
 
   @JSName('clientY')
-  final num _clientY;
+  num get _clientY => JS("num", "#.clientY", this);
 
-  final num force;
+  num get force => JS("num", "#.force", this);
 
-  final int identifier;
+  int get identifier => JS("int", "#.identifier", this);
 
   @JSName('pageX')
-  final num _pageX;
+  num get _pageX => JS("num", "#.pageX", this);
 
   @JSName('pageY')
-  final num _pageY;
+  num get _pageY => JS("num", "#.pageY", this);
 
   @JSName('radiusX')
-  final num _radiusX;
+  num get _radiusX => JS("num", "#.radiusX", this);
 
   @JSName('radiusY')
-  final num _radiusY;
+  num get _radiusY => JS("num", "#.radiusY", this);
 
-  final String region;
+  final String? region;
 
-  final num rotationAngle;
+  num get rotationAngle => JS("num", "#.rotationAngle", this);
 
   @JSName('screenX')
-  final num _screenX;
+  num get _screenX => JS("num", "#.screenX", this);
 
   @JSName('screenY')
-  final num _screenY;
+  num get _screenY => JS("num", "#.screenY", this);
 
-  EventTarget get target => _convertNativeToDart_EventTarget(this._get_target);
+  EventTarget? get target => _convertNativeToDart_EventTarget(this._get_target);
   @JSName('target')
   @Creates('Element|Document')
   @Returns('Element|Document')
@@ -28844,7 +30771,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TouchEvent(String type, [Map eventInitDict]) {
+  factory TouchEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return TouchEvent._create_1(type, eventInitDict_1);
@@ -28856,19 +30783,19 @@
   static TouchEvent _create_2(type) =>
       JS('TouchEvent', 'new TouchEvent(#)', type);
 
-  final bool altKey;
+  bool get altKey => JS("bool", "#.altKey", this);
 
-  final TouchList changedTouches;
+  TouchList get changedTouches => JS("TouchList", "#.changedTouches", this);
 
-  final bool ctrlKey;
+  bool get ctrlKey => JS("bool", "#.ctrlKey", this);
 
-  final bool metaKey;
+  bool get metaKey => JS("bool", "#.metaKey", this);
 
-  final bool shiftKey;
+  bool get shiftKey => JS("bool", "#.shiftKey", this);
 
-  final TouchList targetTouches;
+  TouchList get targetTouches => JS("TouchList", "#.targetTouches", this);
 
-  final TouchList touches;
+  TouchList get touches => JS("TouchList", "#.touches", this);
 
   /**
    * Checks if touch events supported on the current platform.
@@ -28964,7 +30891,7 @@
 
   factory TrackDefault(
       String type, String language, String label, List<String> kinds,
-      [String byteStreamTrackID]) {
+      [String? byteStreamTrackID]) {
     if (byteStreamTrackID != null) {
       List kinds_1 = convertDartToNative_StringArray(kinds);
       return TrackDefault._create_1(
@@ -28985,15 +30912,15 @@
       label,
       kinds);
 
-  final String byteStreamTrackID;
+  String get byteStreamTrackID => JS("String", "#.byteStreamTrackID", this);
 
-  final Object kinds;
+  Object get kinds => JS("Object", "#.kinds", this);
 
-  final String label;
+  String get label => JS("String", "#.label", this);
 
-  final String language;
+  String get language => JS("String", "#.language", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29006,7 +30933,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TrackDefaultList([List<TrackDefault> trackDefaults]) {
+  factory TrackDefaultList([List<TrackDefault>? trackDefaults]) {
     if (trackDefaults != null) {
       return TrackDefaultList._create_1(trackDefaults);
     }
@@ -29017,7 +30944,7 @@
   static TrackDefaultList _create_2() =>
       JS('TrackDefaultList', 'new TrackDefaultList()');
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   TrackDefault item(int index) native;
 }
@@ -29035,7 +30962,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TrackElement() => document.createElement("track");
+  factory TrackElement() => document.createElement("track") as TrackElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -29055,19 +30982,40 @@
   static const int NONE = 0;
 
   @JSName('default')
-  bool defaultValue;
+  bool get defaultValue => JS("bool", "#.default", this);
 
-  String kind;
+  @JSName('default')
+  set defaultValue(bool value) {
+    JS("void", "#.default = #", this, value);
+  }
 
-  String label;
+  String get kind => JS("String", "#.kind", this);
 
-  final int readyState;
+  set kind(String value) {
+    JS("void", "#.kind = #", this, value);
+  }
 
-  String src;
+  String get label => JS("String", "#.label", this);
 
-  String srclang;
+  set label(String value) {
+    JS("void", "#.label = #", this, value);
+  }
 
-  final TextTrack track;
+  int get readyState => JS("int", "#.readyState", this);
+
+  String get src => JS("String", "#.src", this);
+
+  set src(String value) {
+    JS("void", "#.src = #", this, value);
+  }
+
+  String get srclang => JS("String", "#.srclang", this);
+
+  set srclang(String value) {
+    JS("void", "#.srclang = #", this, value);
+  }
+
+  TextTrack get track => JS("TextTrack", "#.track", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29081,7 +31029,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TrackEvent(String type, [Map eventInitDict]) {
+  factory TrackEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return TrackEvent._create_1(type, eventInitDict_1);
@@ -29094,7 +31042,7 @@
       JS('TrackEvent', 'new TrackEvent(#)', type);
 
   @Creates('Null')
-  final Object track;
+  final Object? track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29107,7 +31055,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory TransitionEvent(String type, [Map eventInitDict]) {
+  factory TransitionEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return TransitionEvent._create_1(type, eventInitDict_1);
@@ -29119,11 +31067,11 @@
   static TransitionEvent _create_2(type) =>
       JS('TransitionEvent', 'new TransitionEvent(#)', type);
 
-  final num elapsedTime;
+  num get elapsedTime => JS("num", "#.elapsedTime", this);
 
-  final String propertyName;
+  String get propertyName => JS("String", "#.propertyName", this);
 
-  final String pseudoElement;
+  String get pseudoElement => JS("String", "#.pseudoElement", this);
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29140,13 +31088,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  Node currentNode;
+  Node get currentNode => JS("Node", "#.currentNode", this);
 
-  final NodeFilter filter;
+  set currentNode(Node value) {
+    JS("void", "#.currentNode = #", this, value);
+  }
 
-  final Node root;
+  final NodeFilter? filter;
 
-  final int whatToShow;
+  Node get root => JS("Node", "#.root", this);
+
+  int get whatToShow => JS("int", "#.whatToShow", this);
 
   Node firstChild() native;
 
@@ -29232,7 +31184,7 @@
     return e;
   }
 
-  factory UIEvent._(String type, [Map eventInitDict]) {
+  factory UIEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return UIEvent._create_1(type, eventInitDict_1);
@@ -29243,11 +31195,11 @@
       JS('UIEvent', 'new UIEvent(#,#)', type, eventInitDict);
   static UIEvent _create_2(type) => JS('UIEvent', 'new UIEvent(#)', type);
 
-  final int detail;
+  int get detail => JS("int", "#.detail", this);
 
-  final InputDeviceCapabilities sourceCapabilities;
+  final InputDeviceCapabilities? sourceCapabilities;
 
-  WindowBase get view => _convertNativeToDart_Window(this._get_view);
+  WindowBase? get view => _convertNativeToDart_Window(this._get_view);
   @JSName('view')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
@@ -29255,10 +31207,10 @@
 
   @JSName('which')
   @Unstable()
-  final int _which;
+  int get _which => JS("int", "#.which", this);
 
   @JSName('initUIEvent')
-  void _initUIEvent(String type, bool bubbles, bool cancelable, Window view,
+  void _initUIEvent(String type, bool bubbles, bool cancelable, Window? view,
       int detail) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29272,7 +31224,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory UListElement() => JS(
+  factory UListElement() => JS<UListElement>(
       'returns:UListElement;creates:UListElement;new:true',
       '#.createElement(#)',
       document,
@@ -29354,29 +31306,70 @@
     throw new UnsupportedError("Not supported");
   }
 
-  String hash;
+  String get hash => JS("String", "#.hash", this);
 
-  String host;
+  set hash(String value) {
+    JS("void", "#.hash = #", this, value);
+  }
 
-  String hostname;
+  String get host => JS("String", "#.host", this);
 
-  String href;
+  set host(String value) {
+    JS("void", "#.host = #", this, value);
+  }
 
-  final String origin;
+  String get hostname => JS("String", "#.hostname", this);
 
-  String password;
+  set hostname(String value) {
+    JS("void", "#.hostname = #", this, value);
+  }
 
-  String pathname;
+  String get href => JS("String", "#.href", this);
 
-  String port;
+  set href(String value) {
+    JS("void", "#.href = #", this, value);
+  }
 
-  String protocol;
+  String get origin => JS("String", "#.origin", this);
 
-  String search;
+  String get password => JS("String", "#.password", this);
 
-  final UrlSearchParams searchParams;
+  set password(String value) {
+    JS("void", "#.password = #", this, value);
+  }
 
-  String username;
+  String get pathname => JS("String", "#.pathname", this);
+
+  set pathname(String value) {
+    JS("void", "#.pathname = #", this, value);
+  }
+
+  String get port => JS("String", "#.port", this);
+
+  set port(String value) {
+    JS("void", "#.port = #", this, value);
+  }
+
+  String get protocol => JS("String", "#.protocol", this);
+
+  set protocol(String value) {
+    JS("void", "#.protocol = #", this, value);
+  }
+
+  String get search => JS("String", "#.search", this);
+
+  set search(String value) {
+    JS("void", "#.search = #", this, value);
+  }
+
+  UrlSearchParams get searchParams =>
+      JS("UrlSearchParams", "#.searchParams", this);
+
+  String get username => JS("String", "#.username", this);
+
+  set username(String value) {
+    JS("void", "#.username = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29389,7 +31382,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory UrlSearchParams([Object init]) {
+  factory UrlSearchParams([Object? init]) {
     if (init != null) {
       return UrlSearchParams._create_1(init);
     }
@@ -29479,11 +31472,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String deviceName;
+  String get deviceName => JS("String", "#.deviceName", this);
 
-  final bool isExternal;
+  bool get isExternal => JS("bool", "#.isExternal", this);
 
-  Future requestSession([Map options]) {
+  Future requestSession([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -29491,7 +31484,7 @@
     return promiseToFuture(JS("", "#.requestSession(#)", this, options_dict));
   }
 
-  Future supportsSession([Map options]) {
+  Future supportsSession([Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -29517,7 +31510,7 @@
   static VRDeviceEvent _create_1(type, eventInitDict) =>
       JS('VRDeviceEvent', 'new VRDeviceEvent(#,#)', type, eventInitDict);
 
-  final VRDevice device;
+  VRDevice get device => JS("VRDevice", "#.device", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29530,19 +31523,29 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final VRDisplayCapabilities capabilities;
+  VRDisplayCapabilities get capabilities =>
+      JS("VRDisplayCapabilities", "#.capabilities", this);
 
-  num depthFar;
+  num get depthFar => JS("num", "#.depthFar", this);
 
-  num depthNear;
+  set depthFar(num value) {
+    JS("void", "#.depthFar = #", this, value);
+  }
 
-  final int displayId;
+  num get depthNear => JS("num", "#.depthNear", this);
 
-  final String displayName;
+  set depthNear(num value) {
+    JS("void", "#.depthNear = #", this, value);
+  }
 
-  final bool isPresenting;
+  int get displayId => JS("int", "#.displayId", this);
 
-  final VRStageParameters stageParameters;
+  String get displayName => JS("String", "#.displayName", this);
+
+  bool get isPresenting => JS("bool", "#.isPresenting", this);
+
+  VRStageParameters get stageParameters =>
+      JS("VRStageParameters", "#.stageParameters", this);
 
   void cancelAnimationFrame(int handle) native;
 
@@ -29572,13 +31575,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool canPresent;
+  bool get canPresent => JS("bool", "#.canPresent", this);
 
-  final bool hasExternalDisplay;
+  bool get hasExternalDisplay => JS("bool", "#.hasExternalDisplay", this);
 
-  final bool hasPosition;
+  bool get hasPosition => JS("bool", "#.hasPosition", this);
 
-  final int maxLayers;
+  int get maxLayers => JS("int", "#.maxLayers", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29591,7 +31594,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory VRDisplayEvent(String type, [Map eventInitDict]) {
+  factory VRDisplayEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return VRDisplayEvent._create_1(type, eventInitDict_1);
@@ -29603,9 +31606,9 @@
   static VRDisplayEvent _create_2(type) =>
       JS('VRDisplayEvent', 'new VRDisplayEvent(#)', type);
 
-  final VRDisplay display;
+  VRDisplay get display => JS("VRDisplay", "#.display", this);
 
-  final String reason;
+  String get reason => JS("String", "#.reason", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29618,11 +31621,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Float32List offset;
+  Float32List get offset => JS("Float32List", "#.offset", this);
 
-  final int renderHeight;
+  int get renderHeight => JS("int", "#.renderHeight", this);
 
-  final int renderWidth;
+  int get renderWidth => JS("int", "#.renderWidth", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29640,15 +31643,18 @@
   }
   static VRFrameData _create_1() => JS('VRFrameData', 'new VRFrameData()');
 
-  final Float32List leftProjectionMatrix;
+  Float32List get leftProjectionMatrix =>
+      JS("Float32List", "#.leftProjectionMatrix", this);
 
-  final Float32List leftViewMatrix;
+  Float32List get leftViewMatrix => JS("Float32List", "#.leftViewMatrix", this);
 
-  final VRPose pose;
+  VRPose get pose => JS("VRPose", "#.pose", this);
 
-  final Float32List rightProjectionMatrix;
+  Float32List get rightProjectionMatrix =>
+      JS("Float32List", "#.rightProjectionMatrix", this);
 
-  final Float32List rightViewMatrix;
+  Float32List get rightViewMatrix =>
+      JS("Float32List", "#.rightViewMatrix", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29661,9 +31667,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final VRStageBounds bounds;
+  final VRStageBounds? bounds;
 
-  final num emulatedHeight;
+  num get emulatedHeight => JS("num", "#.emulatedHeight", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29676,17 +31682,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Float32List angularAcceleration;
+  final Float32List? angularAcceleration;
 
-  final Float32List angularVelocity;
+  final Float32List? angularVelocity;
 
-  final Float32List linearAcceleration;
+  final Float32List? linearAcceleration;
 
-  final Float32List linearVelocity;
+  final Float32List? linearVelocity;
 
-  final Float32List orientation;
+  final Float32List? orientation;
 
-  final Float32List position;
+  final Float32List? position;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29705,17 +31711,25 @@
   static const EventStreamProvider<Event> focusEvent =
       const EventStreamProvider<Event>('focus');
 
-  num depthFar;
+  num get depthFar => JS("num", "#.depthFar", this);
 
-  num depthNear;
+  set depthFar(num value) {
+    JS("void", "#.depthFar = #", this, value);
+  }
 
-  final VRDevice device;
+  num get depthNear => JS("num", "#.depthNear", this);
 
-  final bool exclusive;
+  set depthNear(num value) {
+    JS("void", "#.depthNear = #", this, value);
+  }
+
+  VRDevice get device => JS("VRDevice", "#.device", this);
+
+  bool get exclusive => JS("bool", "#.exclusive", this);
 
   Future end() => promiseToFuture(JS("", "#.end()", this));
 
-  Future requestFrameOfReference(String type, [Map options]) {
+  Future requestFrameOfReference(String type, [Map? options]) {
     var options_dict = null;
     if (options != null) {
       options_dict = convertDartToNative_Dictionary(options);
@@ -29746,7 +31760,7 @@
   static VRSessionEvent _create_1(type, eventInitDict) =>
       JS('VRSessionEvent', 'new VRSessionEvent(#,#)', type, eventInitDict);
 
-  final VRSession session;
+  VRSession get session => JS("VRSession", "#.session", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29759,7 +31773,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final List<VRStageBoundsPoint> geometry;
+  List<VRStageBoundsPoint> get geometry =>
+      JS("List<VRStageBoundsPoint>", "#.geometry", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29772,9 +31787,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num x;
+  num get x => JS("num", "#.x", this);
 
-  final num z;
+  num get z => JS("num", "#.z", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29787,11 +31802,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Float32List sittingToStandingTransform;
+  Float32List get sittingToStandingTransform =>
+      JS("Float32List", "#.sittingToStandingTransform", this);
 
-  final num sizeX;
+  num get sizeX => JS("num", "#.sizeX", this);
 
-  final num sizeZ;
+  num get sizeZ => JS("num", "#.sizeZ", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29804,27 +31820,27 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool badInput;
+  bool get badInput => JS("bool", "#.badInput", this);
 
-  final bool customError;
+  bool get customError => JS("bool", "#.customError", this);
 
-  final bool patternMismatch;
+  bool get patternMismatch => JS("bool", "#.patternMismatch", this);
 
-  final bool rangeOverflow;
+  bool get rangeOverflow => JS("bool", "#.rangeOverflow", this);
 
-  final bool rangeUnderflow;
+  bool get rangeUnderflow => JS("bool", "#.rangeUnderflow", this);
 
-  final bool stepMismatch;
+  bool get stepMismatch => JS("bool", "#.stepMismatch", this);
 
-  final bool tooLong;
+  bool get tooLong => JS("bool", "#.tooLong", this);
 
-  final bool tooShort;
+  bool get tooShort => JS("bool", "#.tooShort", this);
 
-  final bool typeMismatch;
+  bool get typeMismatch => JS("bool", "#.typeMismatch", this);
 
-  final bool valid;
+  bool get valid => JS("bool", "#.valid", this);
 
-  final bool valueMissing;
+  bool get valueMissing => JS("bool", "#.valueMissing", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29837,7 +31853,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory VideoElement() => JS(
+  factory VideoElement() => JS<VideoElement>(
       'returns:VideoElement;creates:VideoElement;new:true',
       '#.createElement(#)',
       document,
@@ -29849,25 +31865,37 @@
    */
   VideoElement.created() : super.created();
 
-  int height;
+  int get height => JS("int", "#.height", this);
 
-  String poster;
+  set height(int value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  final int videoHeight;
+  String get poster => JS("String", "#.poster", this);
 
-  final int videoWidth;
+  set poster(String value) {
+    JS("void", "#.poster = #", this, value);
+  }
+
+  int get videoHeight => JS("int", "#.videoHeight", this);
+
+  int get videoWidth => JS("int", "#.videoWidth", this);
 
   @JSName('webkitDecodedFrameCount')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final int decodedFrameCount;
+  int get decodedFrameCount => JS("int", "#.webkitDecodedFrameCount", this);
 
   @JSName('webkitDroppedFrameCount')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  final int droppedFrameCount;
+  int get droppedFrameCount => JS("int", "#.webkitDroppedFrameCount", this);
 
-  int width;
+  int get width => JS("int", "#.width", this);
+
+  set width(int value) {
+    JS("void", "#.width = #", this, value);
+  }
 
   VideoPlaybackQuality getVideoPlaybackQuality() native;
 
@@ -29892,13 +31920,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int corruptedVideoFrames;
+  int get corruptedVideoFrames => JS("int", "#.corruptedVideoFrames", this);
 
-  final num creationTime;
+  num get creationTime => JS("num", "#.creationTime", this);
 
-  final int droppedVideoFrames;
+  int get droppedVideoFrames => JS("int", "#.droppedVideoFrames", this);
 
-  final int totalVideoFrames;
+  int get totalVideoFrames => JS("int", "#.totalVideoFrames", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29911,17 +31939,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String id;
+  String get id => JS("String", "#.id", this);
 
-  final String kind;
+  String get kind => JS("String", "#.kind", this);
 
-  final String label;
+  String get label => JS("String", "#.label", this);
 
-  final String language;
+  String get language => JS("String", "#.language", this);
 
-  bool selected;
+  bool get selected => JS("bool", "#.selected", this);
 
-  final SourceBuffer sourceBuffer;
+  set selected(bool value) {
+    JS("void", "#.selected = #", this, value);
+  }
+
+  final SourceBuffer? sourceBuffer;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29937,9 +31969,9 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  final int selectedIndex;
+  int get selectedIndex => JS("int", "#.selectedIndex", this);
 
   VideoTrack __getter__(int index) native;
 
@@ -29964,19 +31996,19 @@
   static const EventStreamProvider<Event> scrollEvent =
       const EventStreamProvider<Event>('scroll');
 
-  final num height;
+  num get height => JS("num", "#.height", this);
 
-  final num offsetLeft;
+  num get offsetLeft => JS("num", "#.offsetLeft", this);
 
-  final num offsetTop;
+  num get offsetTop => JS("num", "#.offsetTop", this);
 
-  final num pageLeft;
+  num get pageLeft => JS("num", "#.pageLeft", this);
 
-  final num pageTop;
+  num get pageTop => JS("num", "#.pageTop", this);
 
-  final num scale;
+  num get scale => JS("num", "#.scale", this);
 
-  final num width;
+  num get width => JS("num", "#.width", this);
 
   Stream<Event> get onResize => resizeEvent.forTarget(this);
 
@@ -30006,25 +32038,57 @@
   static VttCue _create_1(startTime, endTime, text) =>
       JS('VttCue', 'new VTTCue(#,#,#)', startTime, endTime, text);
 
-  String align;
+  String get align => JS("String", "#.align", this);
+
+  set align(String value) {
+    JS("void", "#.align = #", this, value);
+  }
 
   @Creates('Null')
   @Returns('num|String')
-  Object line;
+  Object get line => JS("Object", "#.line", this);
 
   @Creates('Null')
   @Returns('num|String')
-  Object position;
+  set line(Object value) {
+    JS("void", "#.line = #", this, value);
+  }
 
-  VttRegion region;
+  @Creates('Null')
+  @Returns('num|String')
+  Object get position => JS("Object", "#.position", this);
 
-  num size;
+  @Creates('Null')
+  @Returns('num|String')
+  set position(Object value) {
+    JS("void", "#.position = #", this, value);
+  }
 
-  bool snapToLines;
+  VttRegion? region;
 
-  String text;
+  num get size => JS("num", "#.size", this);
 
-  String vertical;
+  set size(num value) {
+    JS("void", "#.size = #", this, value);
+  }
+
+  bool get snapToLines => JS("bool", "#.snapToLines", this);
+
+  set snapToLines(bool value) {
+    JS("void", "#.snapToLines = #", this, value);
+  }
+
+  String get text => JS("String", "#.text", this);
+
+  set text(String value) {
+    JS("void", "#.text = #", this, value);
+  }
+
+  String get vertical => JS("String", "#.vertical", this);
+
+  set vertical(String value) {
+    JS("void", "#.vertical = #", this, value);
+  }
 
   @JSName('getCueAsHTML')
   DocumentFragment getCueAsHtml() native;
@@ -30045,21 +32109,53 @@
   }
   static VttRegion _create_1() => JS('VttRegion', 'new VTTRegion()');
 
-  String id;
+  String get id => JS("String", "#.id", this);
 
-  int lines;
+  set id(String value) {
+    JS("void", "#.id = #", this, value);
+  }
 
-  num regionAnchorX;
+  int get lines => JS("int", "#.lines", this);
 
-  num regionAnchorY;
+  set lines(int value) {
+    JS("void", "#.lines = #", this, value);
+  }
 
-  String scroll;
+  num get regionAnchorX => JS("num", "#.regionAnchorX", this);
 
-  num viewportAnchorX;
+  set regionAnchorX(num value) {
+    JS("void", "#.regionAnchorX = #", this, value);
+  }
 
-  num viewportAnchorY;
+  num get regionAnchorY => JS("num", "#.regionAnchorY", this);
 
-  num width;
+  set regionAnchorY(num value) {
+    JS("void", "#.regionAnchorY = #", this, value);
+  }
+
+  String get scroll => JS("String", "#.scroll", this);
+
+  set scroll(String value) {
+    JS("void", "#.scroll = #", this, value);
+  }
+
+  num get viewportAnchorX => JS("num", "#.viewportAnchorX", this);
+
+  set viewportAnchorX(num value) {
+    JS("void", "#.viewportAnchorX = #", this, value);
+  }
+
+  num get viewportAnchorY => JS("num", "#.viewportAnchorY", this);
+
+  set viewportAnchorY(num value) {
+    JS("void", "#.viewportAnchorY = #", this, value);
+  }
+
+  num get width => JS("num", "#.width", this);
+
+  set width(num value) {
+    JS("void", "#.width = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -30147,7 +32243,7 @@
   static const EventStreamProvider<Event> openEvent =
       const EventStreamProvider<Event>('open');
 
-  factory WebSocket(String url, [Object protocols]) {
+  factory WebSocket(String url, [Object? protocols]) {
     if (protocols != null) {
       return WebSocket._create_1(url, protocols);
     }
@@ -30169,19 +32265,23 @@
 
   static const int OPEN = 1;
 
-  String binaryType;
+  String get binaryType => JS("String", "#.binaryType", this);
 
-  final int bufferedAmount;
+  set binaryType(String value) {
+    JS("void", "#.binaryType = #", this, value);
+  }
 
-  final String extensions;
+  int get bufferedAmount => JS("int", "#.bufferedAmount", this);
 
-  final String protocol;
+  String get extensions => JS("String", "#.extensions", this);
 
-  final int readyState;
+  String get protocol => JS("String", "#.protocol", this);
 
-  final String url;
+  int get readyState => JS("int", "#.readyState", this);
 
-  void close([int code, String reason]) native;
+  String get url => JS("String", "#.url", this);
+
+  void close([int? code, String? reason]) native;
 
   /**
    * Transmit data to the server over this connection.
@@ -30298,7 +32398,7 @@
         convertDartToNative_Dictionary(options));
   }
 
-  factory WheelEvent._(String type, [Map eventInitDict]) {
+  factory WheelEvent._(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return WheelEvent._create_1(type, eventInitDict_1);
@@ -30317,12 +32417,12 @@
   static const int DOM_DELTA_PIXEL = 0x00;
 
   @JSName('deltaX')
-  final num _deltaX;
+  num get _deltaX => JS("num", "#.deltaX", this);
 
   @JSName('deltaY')
-  final num _deltaY;
+  num get _deltaY => JS("num", "#.deltaY", this);
 
-  final num deltaZ;
+  num get deltaZ => JS("num", "#.deltaZ", this);
 
   /**
    * The amount that is expected to scroll vertically, in units determined by
@@ -30821,7 +32921,7 @@
    */
   static const int TEMPORARY = 0;
 
-  final _Worklet animationWorklet;
+  _Worklet get animationWorklet => JS("_Worklet", "#.animationWorklet", this);
 
   /**
    * The application cache for this window.
@@ -30835,15 +32935,17 @@
    *   API](https://html.spec.whatwg.org/multipage/browsers.html#application-cache-api)
    *   from WHATWG.
    */
-  final ApplicationCache applicationCache;
 
-  final _Worklet audioWorklet;
+  ApplicationCache get applicationCache =>
+      JS("ApplicationCache", "#.applicationCache", this);
 
-  final CacheStorage caches;
+  _Worklet get audioWorklet => JS("_Worklet", "#.audioWorklet", this);
 
-  final bool closed;
+  CacheStorage get caches => JS("CacheStorage", "#.caches", this);
 
-  final CookieStore cookieStore;
+  bool get closed => JS("bool", "#.closed", this);
+
+  CookieStore get cookieStore => JS("CookieStore", "#.cookieStore", this);
 
   /**
    * Entrypoint for the browser's cryptographic functions.
@@ -30852,15 +32954,31 @@
    *
    * * [Web cryptography API](http://www.w3.org/TR/WebCryptoAPI/) from W3C.
    */
-  final Crypto crypto;
 
-  final CustomElementRegistry customElements;
+  Crypto get crypto => JS("Crypto", "#.crypto", this);
+
+  CustomElementRegistry get customElements =>
+      JS("CustomElementRegistry", "#.customElements", this);
 
   /// *Deprecated*.
-  String defaultStatus;
+
+  String get defaultStatus => JS("String", "#.defaultStatus", this);
 
   /// *Deprecated*.
-  String defaultstatus;
+
+  set defaultStatus(String value) {
+    JS("void", "#.defaultStatus = #", this, value);
+  }
+
+  /// *Deprecated*.
+
+  String get defaultstatus => JS("String", "#.defaultstatus", this);
+
+  /// *Deprecated*.
+
+  set defaultstatus(String value) {
+    JS("void", "#.defaultstatus = #", this, value);
+  }
 
   /**
    * The ratio between physical pixels and logical CSS pixels.
@@ -30872,9 +32990,10 @@
    * * [More about devicePixelRatio](http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html)
    *   from quirksmode.
    */
-  final num devicePixelRatio;
 
-  final External external;
+  num get devicePixelRatio => JS("num", "#.devicePixelRatio", this);
+
+  External get external => JS("External", "#.external", this);
 
   /**
    * The current session history for this window's newest document.
@@ -30884,7 +33003,8 @@
    * * [Loading web pages](https://html.spec.whatwg.org/multipage/browsers.html)
    *   from WHATWG.
    */
-  final History history;
+
+  History get history => JS("History", "#.history", this);
 
   /**
    * The height of the viewport including scrollbars.
@@ -30894,7 +33014,8 @@
    * * [Window.innerHeight](https://developer.mozilla.org/en-US/docs/Web/API/Window/innerHeight)
    *   from MDN.
    */
-  final int innerHeight;
+
+  int get innerHeight => JS("int", "#.innerHeight", this);
 
   /**
    * The width of the viewport including scrollbars.
@@ -30904,9 +33025,10 @@
    * * [Window.innerWidth](https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth)
    *   from MDN.
    */
-  final int innerWidth;
 
-  final bool isSecureContext;
+  int get innerWidth => JS("int", "#.innerWidth", this);
+
+  bool get isSecureContext => JS("bool", "#.isSecureContext", this);
 
   /**
    * Storage for this window that persists across sessions.
@@ -30920,7 +33042,8 @@
    * * [Local storage specification](http://www.w3.org/TR/webstorage/#the-localstorage-attribute)
    *   from W3C.
    */
-  final Storage localStorage;
+
+  Storage get localStorage => JS("Storage", "#.localStorage", this);
 
   /**
    * This window's location bar, which displays the URL.
@@ -30931,7 +33054,8 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  final BarProp locationbar;
+
+  BarProp get locationbar => JS("BarProp", "#.locationbar", this);
 
   /**
    * This window's menu bar, which displays menu commands.
@@ -30942,7 +33066,8 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  final BarProp menubar;
+
+  BarProp get menubar => JS("BarProp", "#.menubar", this);
 
   /**
    * The name of this window.
@@ -30952,7 +33077,21 @@
    * * [Window.name](https://developer.mozilla.org/en-US/docs/Web/API/Window/name)
    *   from MDN.
    */
-  String name;
+
+  String get name => JS("String", "#.name", this);
+
+  /**
+   * The name of this window.
+   *
+   * ## Other resources
+   *
+   * * [Window.name](https://developer.mozilla.org/en-US/docs/Web/API/Window/name)
+   *   from MDN.
+   */
+
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
   /**
    * The user agent accessing this window.
@@ -30963,7 +33102,8 @@
    *   object](https://html.spec.whatwg.org/multipage/webappapis.html#the-navigator-object)
    *   from WHATWG.
    */
-  final Navigator navigator;
+
+  Navigator get navigator => JS("Navigator", "#.navigator", this);
 
   /**
    * Whether objects are drawn offscreen before being displayed.
@@ -30973,9 +33113,10 @@
    * * [offscreenBuffering](https://webplatform.github.io/docs/dom/HTMLElement/offscreenBuffering/)
    *   from WebPlatform.org.
    */
-  final bool offscreenBuffering;
 
-  WindowBase get opener => _convertNativeToDart_Window(this._get_opener);
+  bool get offscreenBuffering => JS("bool", "#.offscreenBuffering", this);
+
+  WindowBase? get opener => _convertNativeToDart_Window(this._get_opener);
   @JSName('opener')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
@@ -30985,9 +33126,9 @@
     JS("void", "#.opener = #", this, value);
   }
 
-  final int orientation;
+  int get orientation => JS("int", "#.orientation", this);
 
-  final String origin;
+  String get origin => JS("String", "#.origin", this);
 
   /**
    * The height of this window including all user interface elements.
@@ -30997,7 +33138,8 @@
    * * [Window.outerHeight](https://developer.mozilla.org/en-US/docs/Web/API/Window/outerHeight)
    *   from MDN.
    */
-  final int outerHeight;
+
+  int get outerHeight => JS("int", "#.outerHeight", this);
 
   /**
    * The width of the window including all user interface elements.
@@ -31007,9 +33149,11 @@
    * * [Window.outerWidth](https://developer.mozilla.org/en-US/docs/Web/API/Window/outerWidth)
    *   from MDN.
    */
-  final int outerWidth;
+
+  int get outerWidth => JS("int", "#.outerWidth", this);
 
   @JSName('pageXOffset')
+
   /**
    * The distance this window has been scrolled horizontally.
    *
@@ -31023,9 +33167,11 @@
    *   pageXOffset](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX)
    *   from MDN.
    */
-  final num _pageXOffset;
+
+  num get _pageXOffset => JS("num", "#.pageXOffset", this);
 
   @JSName('pageYOffset')
+
   /**
    * The distance this window has been scrolled vertically.
    *
@@ -31039,9 +33185,10 @@
    *   pageYOffset](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY)
    *   from MDN.
    */
-  final num _pageYOffset;
 
-  WindowBase get parent => _convertNativeToDart_Window(this._get_parent);
+  num get _pageYOffset => JS("num", "#.pageYOffset", this);
+
+  WindowBase? get parent => _convertNativeToDart_Window(this._get_parent);
   @JSName('parent')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
@@ -31061,7 +33208,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE)
-  final Performance performance;
+  Performance get performance => JS("Performance", "#.performance", this);
 
   /**
    * Information about the screen displaying this window.
@@ -31071,7 +33218,8 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  final Screen screen;
+
+  Screen get screen => JS("Screen", "#.screen", this);
 
   /**
    * The distance from the left side of the screen to the left side of this
@@ -31082,7 +33230,8 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  final int screenLeft;
+
+  int get screenLeft => JS("int", "#.screenLeft", this);
 
   /**
    * The distance from the top of the screen to the top of this window.
@@ -31092,7 +33241,8 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  final int screenTop;
+
+  int get screenTop => JS("int", "#.screenTop", this);
 
   /**
    * The distance from the left side of the screen to the mouse pointer.
@@ -31102,7 +33252,8 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  final int screenX;
+
+  int get screenX => JS("int", "#.screenX", this);
 
   /**
    * The distance from the top of the screen to the mouse pointer.
@@ -31112,7 +33263,8 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  final int screenY;
+
+  int get screenY => JS("int", "#.screenY", this);
 
   /**
    * This window's scroll bars.
@@ -31123,7 +33275,8 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  final BarProp scrollbars;
+
+  BarProp get scrollbars => JS("BarProp", "#.scrollbars", this);
 
   /**
    * The current window.
@@ -31133,7 +33286,7 @@
    * * [Window.self](https://developer.mozilla.org/en-US/docs/Web/API/Window.self)
    *   from MDN.
    */
-  WindowBase get self => _convertNativeToDart_Window(this._get_self);
+  WindowBase? get self => _convertNativeToDart_Window(this._get_self);
   @JSName('self')
   /**
    * The current window.
@@ -31160,7 +33313,8 @@
    * * [Local storage
    *   specification](http://www.w3.org/TR/webstorage/#dom-sessionstorage) from W3C.
    */
-  final Storage sessionStorage;
+
+  Storage get sessionStorage => JS("Storage", "#.sessionStorage", this);
 
   /**
    * Access to speech synthesis in the browser.
@@ -31171,10 +33325,19 @@
    *   specification](https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section)
    *   from W3C.
    */
-  final SpeechSynthesis speechSynthesis;
+
+  SpeechSynthesis get speechSynthesis =>
+      JS("SpeechSynthesis", "#.speechSynthesis", this);
 
   /// *Deprecated*.
-  String status;
+
+  String get status => JS("String", "#.status", this);
+
+  /// *Deprecated*.
+
+  set status(String value) {
+    JS("void", "#.status = #", this, value);
+  }
 
   /**
    * This window's status bar.
@@ -31185,7 +33348,8 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  final BarProp statusbar;
+
+  BarProp get statusbar => JS("BarProp", "#.statusbar", this);
 
   /**
    * Access to CSS media queries.
@@ -31196,7 +33360,8 @@
    *   reference](https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/StyleMedia/)
    *   from Safari Developer Library.
    */
-  final StyleMedia styleMedia;
+
+  StyleMedia get styleMedia => JS("StyleMedia", "#.styleMedia", this);
 
   /**
    * This window's tool bar.
@@ -31207,15 +33372,17 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  final BarProp toolbar;
 
-  WindowBase get top => _convertNativeToDart_Window(this._get_top);
+  BarProp get toolbar => JS("BarProp", "#.toolbar", this);
+
+  WindowBase? get top => _convertNativeToDart_Window(this._get_top);
   @JSName('top')
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_top;
 
-  final VisualViewport visualViewport;
+  VisualViewport get visualViewport =>
+      JS("VisualViewport", "#.visualViewport", this);
 
   /**
    * The current window.
@@ -31225,7 +33392,7 @@
    * * [Window.window](https://developer.mozilla.org/en-US/docs/Web/API/Window.window)
    *   from MDN.
    */
-  WindowBase get window => _convertNativeToDart_Window(this._get_window);
+  WindowBase? get window => _convertNativeToDart_Window(this._get_window);
   @JSName('window')
   /**
    * The current window.
@@ -31241,7 +33408,7 @@
 
   @Creates('Window|=Object')
   @Returns('Window|=Object')
-  WindowBase __getter__(index_OR_name) {
+  WindowBase? __getter__(index_OR_name) {
     if ((index_OR_name is int)) {
       return _convertNativeToDart_Window(__getter___1(index_OR_name));
     }
@@ -31268,7 +33435,7 @@
    * * [User prompts](https://html.spec.whatwg.org/multipage/webappapis.html#user-prompts)
    *   from WHATWG.
    */
-  void alert([String message]) native;
+  void alert([String? message]) native;
 
   void cancelIdleCallback(int handle) native;
 
@@ -31282,9 +33449,9 @@
    * * [User prompts](https://html.spec.whatwg.org/multipage/webappapis.html#user-prompts)
    *   from WHATWG.
    */
-  bool confirm([String message]) native;
+  bool confirm([String? message]) native;
 
-  Future fetch(/*RequestInfo*/ input, [Map init]) {
+  Future fetch(/*RequestInfo*/ input, [Map? init]) {
     var init_dict = null;
     if (init != null) {
       init_dict = convertDartToNative_Dictionary(init);
@@ -31304,10 +33471,11 @@
       bool wholeWord, bool searchInFrames, bool showDialog) native;
 
   @JSName('getComputedStyle')
-  CssStyleDeclaration _getComputedStyle(Element elt, [String pseudoElt]) native;
+  CssStyleDeclaration _getComputedStyle(Element elt, [String? pseudoElt])
+      native;
 
   StylePropertyMapReadonly getComputedStyleMap(
-      Element element, String pseudoElement) native;
+      Element element, String? pseudoElement) native;
 
   @JSName('getMatchedCSSRules')
   /**
@@ -31315,7 +33483,7 @@
    */
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
-  List<CssRule> getMatchedCssRules(Element element, String pseudoElement)
+  List<CssRule> getMatchedCssRules(Element element, String? pseudoElement)
       native;
 
   /**
@@ -31365,10 +33533,10 @@
   @Creates('SqlDatabase')
   SqlDatabase _openDatabase(
       String name, String version, String displayName, int estimatedSize,
-      [DatabaseCallback creationCallback]) native;
+      [DatabaseCallback? creationCallback]) native;
 
   void postMessage(/*any*/ message, String targetOrigin,
-      [List<Object> transfer]) {
+      [List<Object>? transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, targetOrigin, transfer);
@@ -31394,7 +33562,7 @@
    */
   void print() native;
 
-  int requestIdleCallback(IdleRequestCallback callback, [Map options]) {
+  int requestIdleCallback(IdleRequestCallback callback, [Map? options]) {
     if (options != null) {
       var callback_1 = convertDartClosureToJS(callback, 1);
       var options_2 = convertDartToNative_Dictionary(options);
@@ -31439,7 +33607,7 @@
    * * [Window.scroll](https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll)
    *   from MDN.
    */
-  void scroll([options_OR_x, y, Map scrollOptions]) {
+  void scroll([options_OR_x, y, Map? scrollOptions]) {
     if (options_OR_x == null && y == null && scrollOptions == null) {
       _scroll_1();
       return;
@@ -31534,7 +33702,7 @@
    * * [Window.scrollBy](https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollBy)
    *   from MDN.
    */
-  void scrollBy([options_OR_x, y, Map scrollOptions]) {
+  void scrollBy([options_OR_x, y, Map? scrollOptions]) {
     if (options_OR_x == null && y == null && scrollOptions == null) {
       _scrollBy_1();
       return;
@@ -31621,7 +33789,7 @@
    * * [Window.scrollTo](https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo)
    *   from MDN.
    */
-  void scrollTo([options_OR_x, y, Map scrollOptions]) {
+  void scrollTo([options_OR_x, y, Map? scrollOptions]) {
     if (options_OR_x == null && y == null && scrollOptions == null) {
       _scrollTo_1();
       return;
@@ -31723,7 +33891,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   void __requestFileSystem(
       int type, int size, _FileSystemCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   @JSName('webkitRequestFileSystem')
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -31751,7 +33919,7 @@
    */
   @SupportedBrowser(SupportedBrowser.CHROME)
   void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback,
-      [_ErrorCallback errorCallback]) native;
+      [_ErrorCallback? errorCallback]) native;
 
   @JSName('webkitResolveLocalFileSystemURL')
   /**
@@ -31783,24 +33951,24 @@
   // From WindowTimers
 
   @JSName('setInterval')
-  int _setInterval_String(String handler, [int timeout, Object arguments])
+  int _setInterval_String(String handler, [int? timeout, Object? arguments])
       native;
 
   @JSName('setTimeout')
-  int _setTimeout_String(String handler, [int timeout, Object arguments])
+  int _setTimeout_String(String handler, [int? timeout, Object? arguments])
       native;
 
   @JSName('clearInterval')
-  void _clearInterval([int handle]) native;
+  void _clearInterval([int? handle]) native;
 
   @JSName('clearTimeout')
-  void _clearTimeout([int handle]) native;
+  void _clearTimeout([int? handle]) native;
 
   @JSName('setInterval')
-  int _setInterval(Object handler, [int timeout]) native;
+  int _setInterval(Object handler, [int? timeout]) native;
 
   @JSName('setTimeout')
-  int _setTimeout(Object handler, [int timeout]) native;
+  int _setTimeout(Object handler, [int? timeout]) native;
 
   /// Stream of `contentloaded` events handled by this [Window].
   Stream<Event> get onContentLoaded => contentLoadedEvent.forTarget(this);
@@ -32185,9 +34353,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool focused;
+  bool get focused => JS("bool", "#.focused", this);
 
-  final String visibilityState;
+  String get visibilityState => JS("String", "#.visibilityState", this);
 
   Future<WindowClient> focus() =>
       promiseToFuture<WindowClient>(JS("", "#.focus()", this));
@@ -32283,7 +34451,7 @@
   static bool get supported =>
       JS('bool', '(typeof window.Worker != "undefined")');
 
-  void postMessage(/*any*/ message, [List<Object> transfer]) {
+  void postMessage(/*any*/ message, [List<Object>? transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, transfer);
@@ -32328,27 +34496,28 @@
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  final String addressSpace;
+  String get addressSpace => JS("String", "#.addressSpace", this);
 
-  final CacheStorage caches;
+  CacheStorage get caches => JS("CacheStorage", "#.caches", this);
 
-  final Crypto crypto;
+  Crypto get crypto => JS("Crypto", "#.crypto", this);
 
-  final IdbFactory indexedDB;
+  IdbFactory get indexedDB => JS("IdbFactory", "#.indexedDB", this);
 
-  final bool isSecureContext;
+  bool get isSecureContext => JS("bool", "#.isSecureContext", this);
 
-  final _WorkerLocation location;
+  _WorkerLocation get location => JS("_WorkerLocation", "#.location", this);
 
-  final _WorkerNavigator navigator;
+  _WorkerNavigator get navigator => JS("_WorkerNavigator", "#.navigator", this);
 
-  final String origin;
+  String get origin => JS("String", "#.origin", this);
 
-  final WorkerPerformance performance;
+  WorkerPerformance get performance =>
+      JS("WorkerPerformance", "#.performance", this);
 
-  final WorkerGlobalScope self;
+  WorkerGlobalScope get self => JS("WorkerGlobalScope", "#.self", this);
 
-  Future fetch(/*RequestInfo*/ input, [Map init]) {
+  Future fetch(/*RequestInfo*/ input, [Map? init]) {
     var init_dict = null;
     if (init != null) {
       init_dict = convertDartToNative_Dictionary(init);
@@ -32367,24 +34536,24 @@
   // From WindowTimers
 
   @JSName('setInterval')
-  int _setInterval_String(String handler, [int timeout, Object arguments])
+  int _setInterval_String(String handler, [int? timeout, Object? arguments])
       native;
 
   @JSName('setTimeout')
-  int _setTimeout_String(String handler, [int timeout, Object arguments])
+  int _setTimeout_String(String handler, [int? timeout, Object? arguments])
       native;
 
   @JSName('clearInterval')
-  void _clearInterval([int handle]) native;
+  void _clearInterval([int? handle]) native;
 
   @JSName('clearTimeout')
-  void _clearTimeout([int handle]) native;
+  void _clearTimeout([int? handle]) native;
 
   @JSName('setInterval')
-  int _setInterval(Object handler, [int timeout]) native;
+  int _setInterval(Object handler, [int? timeout]) native;
 
   @JSName('setTimeout')
-  int _setTimeout(Object handler, [int timeout]) native;
+  int _setTimeout(Object handler, [int? timeout]) native;
 
   /// Stream of `error` events handled by this [WorkerGlobalScope].
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -32403,9 +34572,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final MemoryInfo memory;
+  MemoryInfo get memory => JS("MemoryInfo", "#.memory", this);
 
-  final num timeOrigin;
+  num get timeOrigin => JS("num", "#.timeOrigin", this);
 
   void clearMarks(String markName) native;
 
@@ -32452,7 +34621,7 @@
       JS('WorkletAnimation', 'new WorkletAnimation(#,#,#,#)', animatorName,
           effects, timelines, options);
 
-  final String playState;
+  String get playState => JS("String", "#.playState", this);
 
   void cancel() native;
 
@@ -32488,14 +34657,14 @@
   static XPathEvaluator _create_1() =>
       JS('XPathEvaluator', 'new XPathEvaluator()');
 
-  XPathExpression createExpression(String expression, XPathNSResolver resolver)
+  XPathExpression createExpression(String expression, XPathNSResolver? resolver)
       native;
 
   XPathNSResolver createNSResolver(Node nodeResolver) native;
 
   XPathResult evaluate(
-      String expression, Node contextNode, XPathNSResolver resolver,
-      [int type, Object inResult]) native;
+      String expression, Node contextNode, XPathNSResolver? resolver,
+      [int? type, Object? inResult]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -32510,7 +34679,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  XPathResult evaluate(Node contextNode, [int type, Object inResult]) native;
+  XPathResult evaluate(Node contextNode, [int? type, Object? inResult]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -32561,19 +34730,19 @@
 
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
-  final bool booleanValue;
+  bool get booleanValue => JS("bool", "#.booleanValue", this);
 
-  final bool invalidIteratorState;
+  bool get invalidIteratorState => JS("bool", "#.invalidIteratorState", this);
 
-  final num numberValue;
+  num get numberValue => JS("num", "#.numberValue", this);
 
-  final int resultType;
+  int get resultType => JS("int", "#.resultType", this);
 
-  final Node singleNodeValue;
+  Node get singleNodeValue => JS("Node", "#.singleNodeValue", this);
 
-  final int snapshotLength;
+  int get snapshotLength => JS("int", "#.snapshotLength", this);
 
-  final String stringValue;
+  String get stringValue => JS("String", "#.stringValue", this);
 
   Node iterateNext() native;
 
@@ -32637,15 +34806,16 @@
 
   void clearParameters() native;
 
-  String getParameter(String namespaceURI, String localName) native;
+  String getParameter(String? namespaceURI, String localName) native;
 
   void importStylesheet(Node style) native;
 
-  void removeParameter(String namespaceURI, String localName) native;
+  void removeParameter(String? namespaceURI, String localName) native;
 
   void reset() native;
 
-  void setParameter(String namespaceURI, String localName, String value) native;
+  void setParameter(String? namespaceURI, String localName, String value)
+      native;
 
   Document transformToDocument(Node source) native;
 
@@ -32663,14 +34833,18 @@
   }
 
   @JSName('localName')
-  final String _localName;
+  String get _localName => JS("String", "#.localName", this);
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   @JSName('namespaceURI')
-  final String _namespaceUri;
+  final String? _namespaceUri;
 
-  String value;
+  String get value => JS("String", "#.value", this);
+
+  set value(String value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -33023,7 +35197,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _DomRect([num x, num y, num width, num height]) {
+  factory _DomRect([num? x, num? y, num? width, num? height]) {
     if (height != null) {
       return _DomRect._create_1(x, y, width, height);
     }
@@ -33047,6 +35221,7 @@
   static _DomRect _create_5() => JS('_DomRect', 'new DOMRect()');
 
   // Shadowing definition.
+
   num get height => JS("num", "#.height", this);
 
   set height(num value) {
@@ -33054,6 +35229,7 @@
   }
 
   // Shadowing definition.
+
   num get width => JS("num", "#.width", this);
 
   set width(num value) {
@@ -33061,6 +35237,7 @@
   }
 
   // Shadowing definition.
+
   num get x => JS("num", "#.x", this);
 
   set x(num value) {
@@ -33068,6 +35245,7 @@
   }
 
   // Shadowing definition.
+
   num get y => JS("num", "#.y", this);
 
   set y(num value) {
@@ -33367,7 +35545,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _MojoInterfaceInterceptor(String interfaceName, [String scope]) {
+  factory _MojoInterfaceInterceptor(String interfaceName, [String? scope]) {
     if (scope != null) {
       return _MojoInterfaceInterceptor._create_1(interfaceName, scope);
     }
@@ -33394,7 +35572,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _MojoInterfaceRequestEvent(String type, [Map eventInitDict]) {
+  factory _MojoInterfaceRequestEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return _MojoInterfaceRequestEvent._create_1(type, eventInitDict_1);
@@ -33493,13 +35671,13 @@
 
   _Attr getNamedItem(String name) native;
 
-  _Attr getNamedItemNS(String namespaceURI, String localName) native;
+  _Attr getNamedItemNS(String? namespaceURI, String localName) native;
 
   _Attr item(int index) native;
 
   _Attr removeNamedItem(String name) native;
 
-  _Attr removeNamedItemNS(String namespaceURI, String localName) native;
+  _Attr removeNamedItemNS(String? namespaceURI, String localName) native;
 
   _Attr setNamedItem(_Attr attr) native;
 
@@ -33536,11 +35714,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final ReportBody body;
+  final ReportBody? body;
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -33553,7 +35731,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _Request(Object input, [Map requestInitDict]) {
+  factory _Request(Object input, [Map? requestInitDict]) {
     if (requestInitDict != null) {
       var requestInitDict_1 = convertDartToNative_Dictionary(requestInitDict);
       return _Request._create_1(input, requestInitDict_1);
@@ -33564,23 +35742,23 @@
       JS('_Request', 'new Request(#,#)', input, requestInitDict);
   static _Request _create_2(input) => JS('_Request', 'new Request(#)', input);
 
-  final String cache;
+  String get cache => JS("String", "#.cache", this);
 
-  final String credentials;
+  String get credentials => JS("String", "#.credentials", this);
 
-  final Headers headers;
+  Headers get headers => JS("Headers", "#.headers", this);
 
-  final String integrity;
+  String get integrity => JS("String", "#.integrity", this);
 
-  final String mode;
+  String get mode => JS("String", "#.mode", this);
 
-  final String redirect;
+  String get redirect => JS("String", "#.redirect", this);
 
-  final String referrer;
+  String get referrer => JS("String", "#.referrer", this);
 
-  final String referrerPolicy;
+  String get referrerPolicy => JS("String", "#.referrerPolicy", this);
 
-  final String url;
+  String get url => JS("String", "#.url", this);
 
   _Request clone() native;
 }
@@ -33608,7 +35786,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _Response([Object body, Map init]) {
+  factory _Response([Object? body, Map? init]) {
     if (init != null) {
       var init_1 = convertDartToNative_Dictionary(init);
       return _Response._create_1(body, init_1);
@@ -33875,7 +36053,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _USBInTransferResult(String status, [ByteData data]) {
+  factory _USBInTransferResult(String status, [ByteData? data]) {
     if (data != null) {
       return _USBInTransferResult._create_1(status, data);
     }
@@ -33914,7 +36092,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _USBIsochronousInTransferPacket(String status, [ByteData data]) {
+  factory _USBIsochronousInTransferPacket(String status, [ByteData? data]) {
     if (data != null) {
       return _USBIsochronousInTransferPacket._create_1(status, data);
     }
@@ -33943,7 +36121,7 @@
 
   factory _USBIsochronousInTransferResult(
       List<_USBIsochronousInTransferPacket> packets,
-      [ByteData data]) {
+      [ByteData? data]) {
     if (data != null) {
       return _USBIsochronousInTransferResult._create_1(packets, data);
     }
@@ -33970,7 +36148,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _USBIsochronousOutTransferPacket(String status, [int bytesWritten]) {
+  factory _USBIsochronousOutTransferPacket(String status, [int? bytesWritten]) {
     if (bytesWritten != null) {
       return _USBIsochronousOutTransferPacket._create_1(status, bytesWritten);
     }
@@ -34017,7 +36195,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory _USBOutTransferResult(String status, [int bytesWritten]) {
+  factory _USBOutTransferResult(String status, [int? bytesWritten]) {
     if (bytesWritten != null) {
       return _USBOutTransferResult._create_1(status, bytesWritten);
     }
@@ -34041,17 +36219,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  int _setInterval_String(String handler, [int timeout, Object arguments]);
+  int _setInterval_String(String handler, [int? timeout, Object? arguments]);
 
-  int _setTimeout_String(String handler, [int timeout, Object arguments]);
+  int _setTimeout_String(String handler, [int? timeout, Object? arguments]);
 
-  void _clearInterval([int handle]);
+  void _clearInterval([int? handle]);
 
-  void _clearTimeout([int handle]);
+  void _clearTimeout([int? handle]);
 
-  int _setInterval(Object handler, [int timeout]);
+  int _setInterval(Object handler, [int? timeout]);
 
-  int _setTimeout(Object handler, [int timeout]);
+  int _setTimeout(Object handler, [int? timeout]);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -34113,7 +36291,7 @@
   }
 
   Map<K, V> cast<K, V>() => Map.castFrom<String, String, K, V>(this);
-  bool containsValue(Object value) {
+  bool containsValue(Object? value) {
     for (var v in this.values) {
       if (value == v) {
         return true;
@@ -34192,11 +36370,11 @@
 class _ElementAttributeMap extends _AttributeMap {
   _ElementAttributeMap(Element element) : super(element);
 
-  bool containsKey(Object key) {
+  bool containsKey(Object? key) {
     return _element._hasAttribute(key);
   }
 
-  String operator [](Object key) {
+  String? operator [](Object? key) {
     return _element.getAttribute(key);
   }
 
@@ -34205,7 +36383,7 @@
   }
 
   @pragma('dart2js:tryInline')
-  String remove(Object key) => key is String ? _remove(_element, key) : null;
+  String? remove(Object? key) => key is String ? _remove(_element, key) : null;
 
   /**
    * The number of {key, value} pairs in the map.
@@ -34240,11 +36418,11 @@
 
   _NamespacedAttributeMap(Element element, this._namespace) : super(element);
 
-  bool containsKey(Object key) {
+  bool containsKey(Object? key) {
     return _element._hasAttributeNS(_namespace, key);
   }
 
-  String operator [](Object key) {
+  String? operator [](Object? key) {
     return _element.getAttributeNS(_namespace, key);
   }
 
@@ -34253,7 +36431,7 @@
   }
 
   @pragma('dart2js:tryInline')
-  String remove(Object key) =>
+  String? remove(Object? key) =>
       key is String ? _remove(_namespace, _element, key) : null;
 
   /**
@@ -34302,11 +36480,11 @@
 
   Map<K, V> cast<K, V>() => Map.castFrom<String, String, K, V>(this);
   // TODO: Use lazy iterator when it is available on Map.
-  bool containsValue(Object value) => values.any((v) => v == value);
+  bool containsValue(Object? value) => values.any((v) => v == value);
 
-  bool containsKey(Object key) => _attributes.containsKey(_attr(key));
+  bool containsKey(Object? key) => _attributes.containsKey(_attr(key));
 
-  String operator [](Object key) => _attributes[_attr(key)];
+  String? operator [](Object? key) => _attributes[_attr(key)];
 
   void operator []=(String key, String value) {
     _attributes[_attr(key)] = value;
@@ -34315,7 +36493,7 @@
   String putIfAbsent(String key, String ifAbsent()) =>
       _attributes.putIfAbsent(_attr(key), ifAbsent);
 
-  String remove(Object key) => _attributes.remove(_attr(key));
+  String? remove(Object? key) => _attributes.remove(_attr(key));
 
   void clear() {
     // Needs to operate on a snapshot since we are mutating the collection.
@@ -34627,7 +36805,7 @@
    * [value] must be a valid 'token' representing a single class, i.e. a
    * non-empty string containing no whitespace.
    */
-  bool contains(Object value);
+  bool contains(Object? value);
 
   /**
    * Add the class [value] to element.
@@ -34657,7 +36835,7 @@
    * non-empty string containing no whitespace.  To remove multiple classes, use
    * [removeAll].
    */
-  bool remove(Object value);
+  bool remove(Object? value);
 
   /**
    * Add all classes specified in [iterable] to element.
@@ -34679,7 +36857,7 @@
    * Each element of [iterable] must be a valid 'token' representing a single
    * class, i.e. a non-empty string containing no whitespace.
    */
-  void removeAll(Iterable<Object> iterable);
+  void removeAll(Iterable<Object?> iterable);
 
   /**
    * Toggles all classes specified in [iterable] on element.
@@ -35120,7 +37298,7 @@
    * TODO(sra): It seems wrong to collect a 'changed' flag like this when the
    * underlying toggle returns an 'is set' flag.
    */
-  bool toggle(String value, [bool shouldAdd]) => _sets.fold(
+  bool toggle(String value, [bool? shouldAdd]) => _sets.fold(
       false,
       (bool changed, CssClassSetImpl e) =>
           e.toggle(value, shouldAdd) || changed);
@@ -35132,7 +37310,7 @@
    * This is the Dart equivalent of jQuery's
    * [removeClass](http://api.jquery.com/removeClass/).
    */
-  bool remove(Object value) => _sets.fold(
+  bool remove(Object? value) => _sets.fold(
       false, (bool changed, CssClassSetImpl e) => e.remove(value) || changed);
 }
 
@@ -35166,7 +37344,7 @@
     _element.className = '';
   }
 
-  bool contains(Object value) {
+  bool contains(Object? value) {
     return _contains(_element, value);
   }
 
@@ -35174,11 +37352,11 @@
     return _add(_element, value);
   }
 
-  bool remove(Object value) {
+  bool remove(Object? value) {
     return value is String && _remove(_element, value);
   }
 
-  bool toggle(String value, [bool shouldAdd]) {
+  bool toggle(String value, [bool? shouldAdd]) {
     return _toggle(_element, value, shouldAdd);
   }
 
@@ -35186,11 +37364,11 @@
     _addAll(_element, iterable);
   }
 
-  void removeAll(Iterable<Object> iterable) {
+  void removeAll(Iterable<Object?> iterable) {
     _removeAll(_element, iterable);
   }
 
-  void retainAll(Iterable<Object> iterable) {
+  void retainAll(Iterable<Object?> iterable) {
     _removeWhere(_element, iterable.toSet().contains, false);
   }
 
@@ -35223,7 +37401,7 @@
     return removed;
   }
 
-  static bool _toggle(Element _element, String value, bool shouldAdd) {
+  static bool _toggle(Element _element, String value, bool? shouldAdd) {
     // There is no value that can be passed as the second argument of
     // DomTokenList.toggle that behaves the same as passing one argument.
     // `null` is seen as false, meaning 'remove'.
@@ -35237,13 +37415,13 @@
     return _classListToggle1(list, value);
   }
 
-  static bool _toggleOnOff(Element _element, String value, bool shouldAdd) {
+  static bool _toggleOnOff(Element _element, String value, bool? shouldAdd) {
     DomTokenList list = _classListOf(_element);
     // IE's toggle does not take a second parameter. We would prefer:
     //
     //    return _classListToggle2(list, value, shouldAdd);
     //
-    if (shouldAdd) {
+    if (shouldAdd ?? false) {
       _classListAdd(list, value);
       return true;
     } else {
@@ -35320,7 +37498,7 @@
   }
 
   static bool _classListToggle2(
-      DomTokenList list, String value, bool shouldAdd) {
+      DomTokenList list, String value, bool? shouldAdd) {
     return JS('bool', '#.toggle(#, #)', list, value, shouldAdd);
   }
 }
@@ -35544,16 +37722,16 @@
 
   // DOM events are inherently multi-subscribers.
   Stream<T> asBroadcastStream(
-          {void onListen(StreamSubscription<T> subscription),
-          void onCancel(StreamSubscription<T> subscription)}) =>
+          {void onListen(StreamSubscription<T> subscription)?,
+          void onCancel(StreamSubscription<T> subscription)?}) =>
       this;
   bool get isBroadcast => true;
 
   // TODO(9757): Inlining should be smart and inline only when inlining would
   // enable scalar replacement of an immediately allocated receiver.
   @pragma('dart2js:tryInline')
-  StreamSubscription<T> listen(void onData(T event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<T> listen(void onData(T event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return new _EventStreamSubscription<T>(
         this._target, this._eventType, onData, this._useCapture);
   }
@@ -35604,8 +37782,8 @@
       });
 
   // Delegate all regular Stream behavior to a wrapped Stream.
-  StreamSubscription<T> listen(void onData(T event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<T> listen(void onData(T event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     var pool = new _StreamPool<T>.broadcast();
     for (var target in _targetList) {
       pool.add(new _EventStream<T>(target, _eventType, _useCapture));
@@ -35623,8 +37801,8 @@
   }
 
   Stream<T> asBroadcastStream(
-          {void onListen(StreamSubscription<T> subscription),
-          void onCancel(StreamSubscription<T> subscription)}) =>
+          {void onListen(StreamSubscription<T> subscription)?,
+          void onCancel(StreamSubscription<T> subscription)?}) =>
       this;
   bool get isBroadcast => true;
 }
@@ -35669,23 +37847,25 @@
 
   bool get _canceled => _target == null;
 
-  void onData(void handleData(T event)) {
+  void onData(void handleData(T event)?) {
     if (_canceled) {
       throw new StateError("Subscription has been canceled.");
     }
     // Remove current event listener.
     _unlisten();
-    _onData = _wrapZone<Event>(handleData);
+    _onData = handleData == null
+        ? null
+        : _wrapZone<Event>((e) => (handleData as dynamic)(e));
     _tryResume();
   }
 
   /// Has no effect.
-  void onError(Function handleError) {}
+  void onError(Function? handleError) {}
 
   /// Has no effect.
-  void onDone(void handleDone()) {}
+  void onDone(void handleDone()?) {}
 
-  void pause([Future resumeSignal]) {
+  void pause([Future? resumeSignal]) {
     if (_canceled) return;
     ++_pauseCount;
     _unlisten();
@@ -35715,7 +37895,7 @@
     }
   }
 
-  Future<E> asFuture<E>([E futureValue]) {
+  Future<E> asFuture<E>([E? futureValue]) {
     // We just need a future that will never succeed or fail.
     var completer = new Completer<E>();
     return completer.future;
@@ -35746,15 +37926,15 @@
   }
 
   // Delegate all regular Stream behavior to our wrapped Stream.
-  StreamSubscription<T> listen(void onData(T event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<T> listen(void onData(T event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _streamController.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
 
   Stream<T> asBroadcastStream(
-          {void onListen(StreamSubscription<T> subscription),
-          void onCancel(StreamSubscription<T> subscription)}) =>
+          {void onListen(StreamSubscription<T> subscription)?,
+          void onCancel(StreamSubscription<T> subscription)?}) =>
       _streamController.stream;
 
   bool get isBroadcast => true;
@@ -36271,8 +38451,8 @@
    * All known URI attributes will be validated against the UriPolicy, if
    * [uriPolicy] is null then a default UriPolicy will be used.
    */
-  _Html5NodeValidator({UriPolicy uriPolicy})
-      : uriPolicy = uriPolicy != null ? uriPolicy : new UriPolicy() {
+  _Html5NodeValidator({UriPolicy? uriPolicy})
+      : uriPolicy = uriPolicy ?? UriPolicy() {
     if (_attributeValidators.isEmpty) {
       for (var attr in _standardAttributes) {
         _attributeValidators[attr] = _standardAttributeValidator;
@@ -36332,11 +38512,11 @@
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void sort([int compare(E a, E b)]) {
+  void sort([int compare(E a, E b)?]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random? random]) {
     throw new UnsupportedError("Cannot shuffle immutable List.");
   }
 
@@ -36360,7 +38540,7 @@
     throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
-  bool remove(Object object) {
+  bool remove(Object? object) {
     throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
@@ -36384,7 +38564,7 @@
     throw new UnsupportedError("Cannot modify an immutable List.");
   }
 
-  void fillRange(int start, int end, [E fillValue]) {
+  void fillRange(int start, int end, [E? fillValue]) {
     throw new UnsupportedError("Cannot modify an immutable List.");
   }
 }
@@ -37795,7 +39975,7 @@
    */
   void allowCustomElement(String tagName,
       {UriPolicy uriPolicy,
-      Iterable<String> attributes,
+      Iterable<String>? attributes,
       Iterable<String> uriAttributes}) {
     var tagNameUpper = tagName.toUpperCase();
     var attrs = attributes
@@ -38147,7 +40327,7 @@
     _list.add(element);
   }
 
-  bool remove(Object element) => _list.remove(element);
+  bool remove(Object? element) => _list.remove(element);
 
   void clear() {
     _list.clear();
@@ -38165,14 +40345,14 @@
     _list.length = newLength;
   }
 
-  void sort([int compare(E a, E b)]) {
+  void sort([int compare(E a, E b)?]) {
     // Implicit downcast on argument from Node to E-extends-Node.
     _list.sort((Node a, Node b) => compare(a, b));
   }
 
   int indexOf(Object element, [int start = 0]) => _list.indexOf(element, start);
 
-  int lastIndexOf(Object element, [int start]) =>
+  int lastIndexOf(Object element, [int? start]) =>
       _list.lastIndexOf(element, start);
 
   void insert(int index, E element) => _list.insert(index, element);
@@ -38191,7 +40371,7 @@
     _list.replaceRange(start, end, iterable);
   }
 
-  void fillRange(int start, int end, [E fillValue]) {
+  void fillRange(int start, int end, [E? fillValue]) {
     _list.fillRange(start, end, fillValue);
   }
 
@@ -38210,7 +40390,7 @@
     return _iterator.moveNext();
   }
 
-  E get current => _iterator.current;
+  E get current => _iterator.current as E;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -38693,8 +40873,8 @@
   Events get on => throw new UnsupportedError(
       'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void _addEventListener(String type, EventListener listener,
-          [bool useCapture]) =>
+  void _addEventListener(String? type, EventListener? listener,
+          [bool? useCapture]) =>
       throw new UnsupportedError(
           'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
@@ -38706,8 +40886,8 @@
   bool dispatchEvent(Event event) => throw new UnsupportedError(
       'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void _removeEventListener(String type, EventListener listener,
-          [bool useCapture]) =>
+  void _removeEventListener(String? type, EventListener? listener,
+          [bool? useCapture]) =>
       throw new UnsupportedError(
           'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
@@ -38968,7 +41148,7 @@
   bool get shiftKey => _parent.shiftKey;
   Window get view => _parent.view;
   void _initUIEvent(
-      String type, bool canBubble, bool cancelable, Window view, int detail) {
+      String type, bool canBubble, bool cancelable, Window? view, int detail) {
     throw new UnsupportedError("Cannot initialize a UI Event from a KeyEvent.");
   }
 
@@ -39057,7 +41237,7 @@
 
   String get type => wrapped.type;
 
-  void _initEvent(String type, [bool bubbles, bool cancelable]) {
+  void _initEvent(String type, [bool? bubbles, bool? cancelable]) {
     throw new UnsupportedError('Cannot initialize this Event.');
   }
 
diff --git a/sdk_nnbd/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk_nnbd/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index f1acb15..26b7a28 100644
--- a/sdk_nnbd/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk_nnbd/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -1,4 +1,3 @@
-// @dart = 2.5
 /**
  * A client-side key-value store with support for indexes.
  *
@@ -245,19 +244,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String direction;
+  String get direction => JS("String", "#.direction", this);
 
   @_annotation_Creates_IDBKey
   @_annotation_Returns_IDBKey
-  final Object key;
+  Object get key => JS("Object", "#.key", this);
 
   @_annotation_Creates_IDBKey
   @_annotation_Returns_IDBKey
-  final Object primaryKey;
+  Object get primaryKey => JS("Object", "#.primaryKey", this);
 
   @Creates('Null')
   @Returns('ObjectStore|Index|Null')
-  final Object source;
+  Object get source => JS("Object", "#.source", this);
 
   void advance(int count) native;
 
@@ -401,19 +400,20 @@
   static const EventStreamProvider<VersionChangeEvent> versionChangeEvent =
       const EventStreamProvider<VersionChangeEvent>('versionchange');
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
-  final List<String> objectStoreNames;
+  List<String> get objectStoreNames =>
+      JS("DomStringList", "#.objectStoreNames", this);
 
   @Creates('int|String|Null')
   @Returns('int|String|Null')
-  final int version;
+  int get version => JS("int", "#.version", this);
 
   void close() native;
 
-  ObjectStore _createObjectStore(String name, [Map options]) {
+  ObjectStore _createObjectStore(String name, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return _createObjectStore_1(name, options_1);
@@ -539,7 +539,7 @@
   @Returns('Request')
   @Creates('Request')
   @Creates('Database')
-  OpenDBRequest _open(String name, [int version]) native;
+  OpenDBRequest _open(String name, [int? version]) native;
 }
 
 /**
@@ -655,15 +655,19 @@
   }
 
   @annotation_Creates_SerializedScriptValue
-  final Object keyPath;
+  Object get keyPath => JS("Object", "#.keyPath", this);
 
-  final bool multiEntry;
+  bool get multiEntry => JS("bool", "#.multiEntry", this);
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  final ObjectStore objectStore;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
 
-  final bool unique;
+  ObjectStore get objectStore => JS("ObjectStore", "#.objectStore", this);
+
+  bool get unique => JS("bool", "#.unique", this);
 
   @JSName('count')
   Request _count(Object key) native;
@@ -674,9 +678,9 @@
   @annotation_Creates_SerializedScriptValue
   Request _get(Object key) native;
 
-  Request getAll(Object query, [int count]) native;
+  Request getAll(Object query, [int? count]) native;
 
-  Request getAllKeys(Object query, [int count]) native;
+  Request getAllKeys(Object query, [int? count]) native;
 
   @JSName('getKey')
   @Returns('Request')
@@ -689,13 +693,13 @@
   @Returns('Request')
   @Creates('Request')
   @Creates('Cursor')
-  Request _openCursor(Object range, [String direction]) native;
+  Request _openCursor(Object range, [String? direction]) native;
 
   @JSName('openKeyCursor')
   @Returns('Request')
   @Creates('Request')
   @Creates('Cursor')
-  Request _openKeyCursor(Object range, [String direction]) native;
+  Request _openKeyCursor(Object range, [String? direction]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -724,29 +728,29 @@
   }
 
   @annotation_Creates_SerializedScriptValue
-  final Object lower;
+  Object get lower => JS("Object", "#.lower", this);
 
-  final bool lowerOpen;
+  bool get lowerOpen => JS("bool", "#.lowerOpen", this);
 
   @annotation_Creates_SerializedScriptValue
-  final Object upper;
+  Object get upper => JS("Object", "#.upper", this);
 
-  final bool upperOpen;
+  bool get upperOpen => JS("bool", "#.upperOpen", this);
 
   @JSName('bound')
   static KeyRange bound_(Object lower, Object upper,
-      [bool lowerOpen, bool upperOpen]) native;
+      [bool? lowerOpen, bool? upperOpen]) native;
 
   bool includes(Object key) native;
 
   @JSName('lowerBound')
-  static KeyRange lowerBound_(Object bound, [bool open]) native;
+  static KeyRange lowerBound_(Object bound, [bool? open]) native;
 
   @JSName('only')
   static KeyRange only_(Object value) native;
 
   @JSName('upperBound')
-  static KeyRange upperBound_(Object bound, [bool open]) native;
+  static KeyRange upperBound_(Object bound, [bool? open]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -878,18 +882,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool autoIncrement;
+  bool get autoIncrement => JS("bool", "#.autoIncrement", this);
 
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
-  final List<String> indexNames;
+  List<String> get indexNames => JS("DomStringList", "#.indexNames", this);
 
   @annotation_Creates_SerializedScriptValue
-  final Object keyPath;
+  Object get keyPath => JS("Object", "#.keyPath", this);
 
-  String name;
+  String get name => JS("String", "#.name", this);
 
-  final Transaction transaction;
+  set name(String value) {
+    JS("void", "#.name = #", this, value);
+  }
+
+  Transaction get transaction => JS("Transaction", "#.transaction", this);
 
   @Returns('Request')
   @Creates('Request')
@@ -921,7 +929,7 @@
   @JSName('count')
   Request _count(Object key) native;
 
-  Index _createIndex(String name, Object keyPath, [Map options]) {
+  Index _createIndex(String name, Object keyPath, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return _createIndex_1(name, keyPath, options_1);
@@ -945,9 +953,9 @@
   @annotation_Creates_SerializedScriptValue
   Request _get(Object key) native;
 
-  Request getAll(Object query, [int count]) native;
+  Request getAll(Object query, [int? count]) native;
 
-  Request getAllKeys(Object query, [int count]) native;
+  Request getAllKeys(Object query, [int? count]) native;
 
   Request getKey(Object key) native;
 
@@ -957,9 +965,9 @@
   @Returns('Request')
   @Creates('Request')
   @Creates('Cursor')
-  Request _openCursor(Object range, [String direction]) native;
+  Request _openCursor(Object range, [String? direction]) native;
 
-  Request openKeyCursor(Object range, [String direction]) native;
+  Request openKeyCursor(Object range, [String? direction]) native;
 
   @Returns('Request')
   @Creates('Request')
@@ -1023,11 +1031,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Object key;
+  Object get key => JS("Object", "#.key", this);
 
-  final String type;
+  String get type => JS("String", "#.type", this);
 
-  final Object value;
+  Object get value => JS("Object", "#.value", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1069,11 +1077,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Database database;
+  Database get database => JS("Database", "#.database", this);
 
-  final Object records;
+  Object get records => JS("Object", "#.records", this);
 
-  final Transaction transaction;
+  Transaction get transaction => JS("Transaction", "#.transaction", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1142,9 +1150,9 @@
   static const EventStreamProvider<Event> successEvent =
       const EventStreamProvider<Event>('success');
 
-  final DomException error;
+  DomException get error => JS("DomException", "#.error", this);
 
-  final String readyState;
+  String get readyState => JS("String", "#.readyState", this);
 
   dynamic get result => _convertNativeToDart_IDBAny(this._get_result);
   @JSName('result')
@@ -1152,9 +1160,9 @@
   final dynamic _get_result;
 
   @Creates('Null')
-  final Object source;
+  Object get source => JS("Object", "#.source", this);
 
-  final Transaction transaction;
+  Transaction get transaction => JS("Transaction", "#.transaction", this);
 
   /// Stream of `error` events handled by this [Request].
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -1229,15 +1237,16 @@
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  final Database db;
+  Database get db => JS("Database", "#.db", this);
 
-  final DomException error;
+  DomException get error => JS("DomException", "#.error", this);
 
-  final String mode;
+  String get mode => JS("String", "#.mode", this);
 
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
-  final List<String> objectStoreNames;
+  List<String> get objectStoreNames =>
+      JS("DomStringList", "#.objectStoreNames", this);
 
   void abort() native;
 
@@ -1264,7 +1273,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory VersionChangeEvent(String type, [Map eventInitDict]) {
+  factory VersionChangeEvent(String type, [Map? eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
       return VersionChangeEvent._create_1(type, eventInitDict_1);
@@ -1279,17 +1288,17 @@
   static VersionChangeEvent _create_2(type) =>
       JS('VersionChangeEvent', 'new IDBVersionChangeEvent(#)', type);
 
-  final String dataLoss;
+  String get dataLoss => JS("String", "#.dataLoss", this);
 
-  final String dataLossMessage;
+  String get dataLossMessage => JS("String", "#.dataLossMessage", this);
 
   @Creates('int|String|Null')
   @Returns('int|String|Null')
-  final int newVersion;
+  final int? newVersion;
 
   @Creates('int|String|Null')
   @Returns('int|String|Null')
-  final int oldVersion;
+  int get oldVersion => JS("int", "#.oldVersion", this);
 
   @JSName('target')
   final OpenDBRequest target;
diff --git a/sdk_nnbd/lib/io/bytes_builder.dart b/sdk_nnbd/lib/io/bytes_builder.dart
index 0951945..6f13693 100644
--- a/sdk_nnbd/lib/io/bytes_builder.dart
+++ b/sdk_nnbd/lib/io/bytes_builder.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
diff --git a/sdk_nnbd/lib/io/common.dart b/sdk_nnbd/lib/io/common.dart
index 1635f56..f8fda15 100644
--- a/sdk_nnbd/lib/io/common.dart
+++ b/sdk_nnbd/lib/io/common.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 // Constants used when working with native ports.
@@ -56,8 +54,8 @@
   /** Constant used to indicate that no OS error code is available. */
   static const int noErrorCode = -1;
 
-  /// Error message supplied by the operating system. This may be `null` or
-  /// empty if no message is associated with the error.
+  /// Error message supplied by the operating system. This will be empty if no
+  /// message is associated with the error.
   final String message;
 
   /// Error code supplied by the operating system.
@@ -107,7 +105,8 @@
   int j = start;
   for (int i = 0; i < length; i++) {
     int value = buffer[j];
-    if (value == null) throw ArgumentError("List element is null at index $j");
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(value, "buffer[]");
     newBuffer[i] = value;
     j++;
   }
diff --git a/sdk_nnbd/lib/io/data_transformer.dart b/sdk_nnbd/lib/io/data_transformer.dart
index 4e23969..81fe195 100644
--- a/sdk_nnbd/lib/io/data_transformer.dart
+++ b/sdk_nnbd/lib/io/data_transformer.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -155,7 +153,7 @@
    * be predicted with good accuracy; the data can then be compressed better
    * than with the default empty dictionary.
    */
-  final List<int> dictionary;
+  final List<int>? dictionary;
 
   ZLibCodec(
       {this.level: ZLibOption.defaultLevel,
@@ -266,7 +264,7 @@
    * be predicted with good accuracy; the data can then be compressed better
    * than with the default empty dictionary.
    */
-  final List<int> dictionary;
+  final List<int>? dictionary;
 
   /**
    * When true, deflate generates raw data with no zlib header or trailer, and
@@ -373,7 +371,7 @@
    * be predicted with good accuracy; the data can then be compressed better
    * than with the default empty dictionary.
    */
-  final List<int> dictionary;
+  final List<int>? dictionary;
 
   /**
    * When true, deflate generates raw data with no zlib header or trailer, and
@@ -442,7 +440,7 @@
    * be predicted with good accuracy; the data can then be compressed better
    * than with the default empty dictionary.
    */
-  final List<int> dictionary;
+  final List<int>? dictionary;
 
   /**
    * When true, deflate generates raw data with no zlib header or trailer, and
@@ -496,7 +494,7 @@
     int windowBits: ZLibOption.defaultWindowBits,
     int memLevel: ZLibOption.defaultMemLevel,
     int strategy: ZLibOption.strategyDefault,
-    List<int> dictionary,
+    List<int>? dictionary,
     bool raw: false,
   }) {
     return _makeZLibDeflateFilter(
@@ -509,7 +507,7 @@
    */
   factory RawZLibFilter.inflateFilter({
     int windowBits: ZLibOption.defaultWindowBits,
-    List<int> dictionary,
+    List<int>? dictionary,
     bool raw: false,
   }) {
     return _makeZLibInflateFilter(windowBits, dictionary, raw);
@@ -529,7 +527,7 @@
    * The last call to [processed] should have [end] set to [:true:]. This will
    * make sure an 'end' packet is written on the stream.
    */
-  List<int> processed({bool flush: true, bool end: false});
+  List<int>? processed({bool flush: true, bool end: false});
 
   external static RawZLibFilter _makeZLibDeflateFilter(
       bool gzip,
@@ -537,11 +535,11 @@
       int windowBits,
       int memLevel,
       int strategy,
-      List<int> dictionary,
+      List<int>? dictionary,
       bool raw);
 
   external static RawZLibFilter _makeZLibInflateFilter(
-      int windowBits, List<int> dictionary, bool raw);
+      int windowBits, List<int>? dictionary, bool raw);
 }
 
 class _BufferSink extends ByteConversionSink {
@@ -572,7 +570,7 @@
       int windowBits,
       int memLevel,
       int strategy,
-      List<int> dictionary,
+      List<int>? dictionary,
       bool raw)
       : super(
             sink,
@@ -582,7 +580,7 @@
 
 class _ZLibDecoderSink extends _FilterSink {
   _ZLibDecoderSink._(
-      ByteConversionSink sink, int windowBits, List<int> dictionary, bool raw)
+      ByteConversionSink sink, int windowBits, List<int>? dictionary, bool raw)
       : super(sink,
             RawZLibFilter._makeZLibInflateFilter(windowBits, dictionary, raw));
 }
@@ -600,8 +598,9 @@
   }
 
   void addSlice(List<int> data, int start, int end, bool isLast) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(end, "end");
     if (_closed) return;
-    if (end == null) throw new ArgumentError.notNull("end");
     RangeError.checkValidRange(start, end, data.length);
     try {
       _empty = false;
@@ -609,8 +608,10 @@
           _ensureFastAndSerializableByteData(data, start, end);
       _filter.process(bufferAndStart.buffer, bufferAndStart.start,
           end - (start - bufferAndStart.start));
-      List<int> out;
-      while ((out = _filter.processed(flush: false)) != null) {
+      List<int>? out;
+      while (true) {
+        final out = _filter.processed(flush: false);
+        if (out == null) break;
         _sink.add(out);
       }
     } catch (e) {
@@ -627,8 +628,9 @@
     // message would not have a GZip frame (if compressed with GZip).
     if (_empty) _filter.process(const [], 0, 0);
     try {
-      List<int> out;
-      while ((out = _filter.processed(end: true)) != null) {
+      while (true) {
+        final out = _filter.processed(end: true);
+        if (out == null) break;
         _sink.add(out);
       }
     } catch (e) {
diff --git a/sdk_nnbd/lib/io/directory.dart b/sdk_nnbd/lib/io/directory.dart
index b655779..90e2159 100644
--- a/sdk_nnbd/lib/io/directory.dart
+++ b/sdk_nnbd/lib/io/directory.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -131,7 +129,7 @@
    */
   @pragma("vm:entry-point")
   factory Directory(String path) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return new _Directory(path);
     }
@@ -156,7 +154,7 @@
    * directory.
    */
   static Directory get current {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _Directory.current;
     }
@@ -191,7 +189,7 @@
    * are working with the file system, can lead to unexpected results.
    */
   static void set current(path) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       _Directory.current = path;
       return;
@@ -232,7 +230,7 @@
    * and may be set by an environment variable.
    */
   static Directory get systemTemp {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _Directory.systemTemp;
     }
@@ -248,7 +246,7 @@
    * Returns a [:Future<Directory>:] that completes with the newly
    * created temporary directory.
    */
-  Future<Directory> createTemp([String prefix]);
+  Future<Directory> createTemp([String? prefix]);
 
   /**
    * Synchronously creates a temporary directory in this directory.
@@ -258,7 +256,7 @@
    *
    * Returns the newly created temporary directory.
    */
-  Directory createTempSync([String prefix]);
+  Directory createTempSync([String? prefix]);
 
   Future<String> resolveSymbolicLinks();
 
diff --git a/sdk_nnbd/lib/io/directory_impl.dart b/sdk_nnbd/lib/io/directory_impl.dart
index 9f6b907..29342c5 100644
--- a/sdk_nnbd/lib/io/directory_impl.dart
+++ b/sdk_nnbd/lib/io/directory_impl.dart
@@ -2,27 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 class _Directory extends FileSystemEntity implements Directory {
-  String _path;
-  Uint8List _rawPath;
+  final String _path;
+  final Uint8List _rawPath;
 
-  _Directory(String path) {
-    ArgumentError.checkNotNull(path, 'path');
-    _path = path;
-    _rawPath = FileSystemEntity._toUtf8Array(_path);
-  }
+  _Directory(String path)
+      : _path = path,
+        _rawPath = FileSystemEntity._toUtf8Array(path);
 
-  _Directory.fromRawPath(Uint8List rawPath) {
-    if (rawPath == null) {
-      throw new ArgumentError('rawPath cannot be null');
-    }
-    _rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawPath);
-    _path = FileSystemEntity._toStringFromUtf8Array(rawPath);
-  }
+  _Directory.fromRawPath(Uint8List rawPath)
+      : _rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawPath),
+        _path = FileSystemEntity._toStringFromUtf8Array(rawPath);
 
   String get path => _path;
 
@@ -53,7 +45,7 @@
   }
 
   static void set current(path) {
-    Uint8List _rawPath;
+    late Uint8List _rawPath;
     if (path is _Directory) {
       // For our internal Directory implementation, go ahead and use the raw
       // path.
@@ -144,7 +136,7 @@
   static Directory get systemTemp =>
       new Directory(_systemTemp(_Namespace._namespace));
 
-  Future<Directory> createTemp([String prefix]) {
+  Future<Directory> createTemp([String? prefix]) {
     prefix ??= '';
     if (path == '') {
       throw new ArgumentError("Directory.createTemp called with an empty path. "
@@ -168,7 +160,7 @@
     });
   }
 
-  Directory createTempSync([String prefix]) {
+  Directory createTempSync([String? prefix]) {
     prefix ??= '';
     if (path == '') {
       throw new ArgumentError("Directory.createTemp called with an empty path. "
@@ -220,9 +212,8 @@
   }
 
   Directory renameSync(String newPath) {
-    if (newPath is! String) {
-      throw new ArgumentError();
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(newPath, "newPath");
     var result = _rename(_Namespace._namespace, _rawPath, newPath);
     if (result is OSError) {
       throw new FileSystemException("Rename failed", path, result);
@@ -244,9 +235,9 @@
 
   List<FileSystemEntity> listSync(
       {bool recursive: false, bool followLinks: true}) {
-    if (recursive is! bool || followLinks is! bool) {
-      throw new ArgumentError();
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(recursive, "recursive");
+    ArgumentError.checkNotNull(followLinks, "followLinks");
     var result = <FileSystemEntity>[];
     _fillWithDirectoryListing(
         _Namespace._namespace,
@@ -283,7 +274,7 @@
 abstract class _AsyncDirectoryListerOps {
   external factory _AsyncDirectoryListerOps(int pointer);
 
-  int getPointer();
+  int? getPointer();
 }
 
 class _AsyncDirectoryLister {
@@ -302,16 +293,18 @@
   final bool recursive;
   final bool followLinks;
 
-  StreamController<FileSystemEntity> controller;
+  final controller = new StreamController<FileSystemEntity>(sync: true);
   bool canceled = false;
   bool nextRunning = false;
   bool closed = false;
-  _AsyncDirectoryListerOps _ops;
+  _AsyncDirectoryListerOps? _ops;
   Completer closeCompleter = new Completer();
 
   _AsyncDirectoryLister(this.rawPath, this.recursive, this.followLinks) {
-    controller = new StreamController<FileSystemEntity>(
-        onListen: onListen, onResume: onResume, onCancel: onCancel, sync: true);
+    controller
+      ..onListen = onListen
+      ..onResume = onResume
+      ..onCancel = onCancel;
   }
 
   // WARNING:
@@ -319,8 +312,8 @@
   // object that implements the async directory lister operations. It should
   // only be called to pass the pointer to the IO Service, which will decrement
   // the reference count when it is finished with it.
-  int _pointer() {
-    return (_ops == null) ? null : _ops.getPointer();
+  int? _pointer() {
+    return _ops?.getPointer();
   }
 
   Stream<FileSystemEntity> get stream => controller.stream;
diff --git a/sdk_nnbd/lib/io/embedder_config.dart b/sdk_nnbd/lib/io/embedder_config.dart
index 2248d1b..cbc94f7 100644
--- a/sdk_nnbd/lib/io/embedder_config.dart
+++ b/sdk_nnbd/lib/io/embedder_config.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /// Embedder-specific, fine-grained dart:io configuration.
diff --git a/sdk_nnbd/lib/io/eventhandler.dart b/sdk_nnbd/lib/io/eventhandler.dart
index 90f22a6..36f54e6 100644
--- a/sdk_nnbd/lib/io/eventhandler.dart
+++ b/sdk_nnbd/lib/io/eventhandler.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 class _EventHandler {
diff --git a/sdk_nnbd/lib/io/file.dart b/sdk_nnbd/lib/io/file.dart
index a291c71..a4d5ef8 100644
--- a/sdk_nnbd/lib/io/file.dart
+++ b/sdk_nnbd/lib/io/file.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -252,7 +250,7 @@
    */
   @pragma("vm:entry-point")
   factory File(String path) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return new _File(path);
     }
@@ -485,7 +483,7 @@
    * must be read to completion or the subscription on the stream must
    * be cancelled.
    */
-  Stream<List<int>> openRead([int start, int end]);
+  Stream<List<int>> openRead([int? start, int? end]);
 
   /**
    * Creates a new independent [IOSink] for the file. The
@@ -703,7 +701,7 @@
    *
    * Returns a `Future<int>` that completes with the number of bytes read.
    */
-  Future<int> readInto(List<int> buffer, [int start = 0, int end]);
+  Future<int> readInto(List<int> buffer, [int start = 0, int? end]);
 
   /**
    * Synchronously reads into an existing [List<int>] from the file and returns
@@ -716,7 +714,7 @@
    *
    * Throws a [FileSystemException] if the operation fails.
    */
-  int readIntoSync(List<int> buffer, [int start = 0, int end]);
+  int readIntoSync(List<int> buffer, [int start = 0, int? end]);
 
   /**
    * Writes a single byte to the file. Returns a
@@ -742,7 +740,7 @@
    * [RandomAccessFile] when the write completes.
    */
   Future<RandomAccessFile> writeFrom(List<int> buffer,
-      [int start = 0, int end]);
+      [int start = 0, int? end]);
 
   /**
    * Synchronously writes from a [List<int>] to the file. It will read the
@@ -752,7 +750,7 @@
    *
    * Throws a [FileSystemException] if the operation fails.
    */
-  void writeFromSync(List<int> buffer, [int start = 0, int end]);
+  void writeFromSync(List<int> buffer, [int start = 0, int? end]);
 
   /**
    * Writes a string to the file using the given [Encoding]. Returns a
@@ -974,13 +972,13 @@
    * The file system path on which the error occurred. Can be `null`
    * if the exception does not relate directly to a file system path.
    */
-  final String path;
+  final String? path;
 
   /**
    * The underlying OS error. Can be `null` if the exception is not
    * raised due to an OS error.
    */
-  final OSError osError;
+  final OSError? osError;
 
   /**
    * Creates a new FileSystemException with an optional error message
diff --git a/sdk_nnbd/lib/io/file_impl.dart b/sdk_nnbd/lib/io/file_impl.dart
index ea8fb3f..47593d3 100644
--- a/sdk_nnbd/lib/io/file_impl.dart
+++ b/sdk_nnbd/lib/io/file_impl.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 // Read the file in blocks of size 64k.
@@ -11,13 +9,13 @@
 
 class _FileStream extends Stream<List<int>> {
   // Stream controller.
-  StreamController<Uint8List> _controller;
+  late StreamController<Uint8List> _controller;
 
   // Information about the underlying file.
-  String _path;
-  RandomAccessFile _openedFile;
+  String? _path;
+  late RandomAccessFile _openedFile;
   int _position;
-  int _end;
+  int? _end;
   final Completer _closeCompleter = new Completer();
 
   // Has the stream been paused or unsubscribed?
@@ -29,20 +27,12 @@
 
   bool _atEnd = false;
 
-  _FileStream(this._path, this._position, this._end) {
-    _position ??= 0;
-  }
+  _FileStream(this._path, int? position, this._end) : _position = position ?? 0;
 
   _FileStream.forStdin() : _position = 0;
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event),
-      {Function onError, void onDone(), bool cancelOnError}) {
-    _setupController();
-    return _controller.stream.listen(onData,
-        onError: onError, onDone: onDone, cancelOnError: cancelOnError);
-  }
-
-  void _setupController() {
+  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     _controller = new StreamController<Uint8List>(
         sync: true,
         onListen: _start,
@@ -51,6 +41,8 @@
           _unsubscribed = true;
           return _closeFile();
         });
+    return _controller.stream.listen(onData,
+        onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
 
   Future _closeFile() {
@@ -77,12 +69,13 @@
     }
     _readInProgress = true;
     int readBytes = _blockSize;
-    if (_end != null) {
-      readBytes = min(readBytes, _end - _position);
+    final end = _end;
+    if (end != null) {
+      readBytes = min(readBytes, end - _position);
       if (readBytes < 0) {
         _readInProgress = false;
         if (!_unsubscribed) {
-          _controller.addError(new RangeError("Bad end position: $_end"));
+          _controller.addError(new RangeError("Bad end position: $end"));
           _closeFile();
           _unsubscribed = true;
         }
@@ -147,8 +140,9 @@
       _closeCompleter.complete();
     }
 
-    if (_path != null) {
-      new File(_path)
+    final path = _path;
+    if (path != null) {
+      new File(path)
           .open(mode: FileMode.read)
           .then(onOpenFile, onError: openFailed);
     } else {
@@ -162,22 +156,21 @@
 }
 
 class _FileStreamConsumer extends StreamConsumer<List<int>> {
-  File _file;
+  File? _file;
   Future<RandomAccessFile> _openFuture;
 
-  _FileStreamConsumer(this._file, FileMode mode) {
-    _openFuture = _file.open(mode: mode);
-  }
+  _FileStreamConsumer(File file, FileMode mode)
+      : _file = file,
+        _openFuture = file.open(mode: mode);
 
-  _FileStreamConsumer.fromStdio(int fd) {
-    _openFuture = new Future.value(_File._openStdioSync(fd));
-  }
+  _FileStreamConsumer.fromStdio(int fd)
+      : _openFuture = new Future.value(_File._openStdioSync(fd));
 
   Future<File> addStream(Stream<List<int>> stream) {
     Completer<File> completer = new Completer<File>.sync();
     _openFuture.then((openedFile) {
-      var _subscription;
-      void error(e, [StackTrace stackTrace]) {
+      late StreamSubscription<List<int>> _subscription;
+      void error(e, StackTrace stackTrace) {
         _subscription.cancel();
         openedFile.close();
         completer.completeError(e, stackTrace);
@@ -199,26 +192,22 @@
     return completer.future;
   }
 
-  Future<File> close() =>
+  Future<File?> close() =>
       _openFuture.then((openedFile) => openedFile.close()).then((_) => _file);
 }
 
 // Class for encapsulating the native implementation of files.
 class _File extends FileSystemEntity implements File {
-  String _path;
-  Uint8List _rawPath;
+  final String _path;
+  final Uint8List _rawPath;
 
-  _File(String path) {
-    ArgumentError.checkNotNull(path, 'path');
-    _path = path;
-    _rawPath = FileSystemEntity._toUtf8Array(path);
-  }
+  _File(String path)
+      : _path = path,
+        _rawPath = FileSystemEntity._toUtf8Array(path);
 
-  _File.fromRawPath(Uint8List rawPath) {
-    ArgumentError.checkNotNull(rawPath, 'rawPath');
-    _rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawPath);
-    _path = FileSystemEntity._toStringFromUtf8Array(rawPath);
-  }
+  _File.fromRawPath(Uint8List rawPath)
+      : _rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawPath),
+        _path = FileSystemEntity._toStringFromUtf8Array(rawPath);
 
   String get path => _path;
 
@@ -500,7 +489,7 @@
     return new _RandomAccessFile(id, "");
   }
 
-  Stream<List<int>> openRead([int start, int end]) {
+  Stream<List<int>> openRead([int? start, int? end]) {
     return new _FileStream(path, start, end);
   }
 
@@ -654,9 +643,9 @@
   int close();
   readByte();
   read(int bytes);
-  readInto(List<int> buffer, int start, int end);
+  readInto(List<int> buffer, int start, int? end);
   writeByte(int value);
-  writeFrom(List<int> buffer, int start, int end);
+  writeFrom(List<int> buffer, int start, int? end);
   position();
   setPosition(int position);
   truncate(int length);
@@ -671,13 +660,12 @@
   final String path;
 
   bool _asyncDispatched = false;
-  SendPort _fileService;
 
-  _FileResourceInfo _resourceInfo;
+  late _FileResourceInfo _resourceInfo;
   _RandomAccessFileOps _ops;
 
-  _RandomAccessFile(int pointer, this.path) {
-    _ops = new _RandomAccessFileOps(pointer);
+  _RandomAccessFile(int pointer, this.path)
+      : _ops = new _RandomAccessFileOps(pointer) {
     _resourceInfo = new _FileResourceInfo(this);
     _maybeConnectHandler();
   }
@@ -744,7 +732,8 @@
   }
 
   Future<Uint8List> read(int bytes) {
-    ArgumentError.checkNotNull(bytes, 'bytes');
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(bytes, "bytes");
     return _dispatch(_IOService.fileRead, [null, bytes]).then((response) {
       if (_isErrorResponse(response)) {
         throw _exceptionFromResponse(response, "read failed", path);
@@ -756,8 +745,9 @@
   }
 
   Uint8List readSync(int bytes) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(bytes, "bytes");
     _checkAvailable();
-    ArgumentError.checkNotNull(bytes, 'bytes');
     var result = _ops.read(bytes);
     if (result is OSError) {
       throw new FileSystemException("readSync failed", path, result);
@@ -766,17 +756,14 @@
     return result;
   }
 
-  Future<int> readInto(List<int> buffer, [int start = 0, int end]) {
-    if ((buffer is! List) ||
-        ((start != null) && (start is! int)) ||
-        ((end != null) && (end is! int))) {
-      throw new ArgumentError();
-    }
+  Future<int> readInto(List<int> buffer, [int start = 0, int? end]) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(buffer, "buffer");
     end = RangeError.checkValidRange(start, end, buffer.length);
     if (end == start) {
       return new Future.value(0);
     }
-    int length = end - start;
+    int length = end! - start;
     return _dispatch(_IOService.fileReadInto, [null, length]).then((response) {
       if (_isErrorResponse(response)) {
         throw _exceptionFromResponse(response, "readInto failed", path);
@@ -789,18 +776,15 @@
     });
   }
 
-  int readIntoSync(List<int> buffer, [int start = 0, int end]) {
+  int readIntoSync(List<int> buffer, [int start = 0, int? end]) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(buffer, "buffer");
     _checkAvailable();
-    if ((buffer is! List) ||
-        ((start != null) && (start is! int)) ||
-        ((end != null) && (end is! int))) {
-      throw new ArgumentError();
-    }
     end = RangeError.checkValidRange(start, end, buffer.length);
     if (end == start) {
       return 0;
     }
-    var result = _ops.readInto(buffer, start, end);
+    var result = _ops.readInto(buffer, start, end!);
     if (result is OSError) {
       throw new FileSystemException("readInto failed", path, result);
     }
@@ -809,7 +793,8 @@
   }
 
   Future<RandomAccessFile> writeByte(int value) {
-    ArgumentError.checkNotNull(value, 'value');
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(value, "value");
     return _dispatch(_IOService.fileWriteByte, [null, value]).then((response) {
       if (_isErrorResponse(response)) {
         throw _exceptionFromResponse(response, "writeByte failed", path);
@@ -821,7 +806,8 @@
 
   int writeByteSync(int value) {
     _checkAvailable();
-    ArgumentError.checkNotNull(value, 'value');
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(value, "value");
     var result = _ops.writeByte(value);
     if (result is OSError) {
       throw new FileSystemException("writeByte failed", path, result);
@@ -831,19 +817,17 @@
   }
 
   Future<RandomAccessFile> writeFrom(List<int> buffer,
-      [int start = 0, int end]) {
-    if ((buffer is! List) ||
-        ((start != null) && (start is! int)) ||
-        ((end != null) && (end is! int))) {
-      throw new ArgumentError("Invalid arguments to writeFrom");
-    }
+      [int start = 0, int? end]) {
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(buffer, "buffer");
+    ArgumentError.checkNotNull(start, "start");
     end = RangeError.checkValidRange(start, end, buffer.length);
     if (end == start) {
       return new Future.value(this);
     }
     _BufferAndStart result;
     try {
-      result = _ensureFastAndSerializableByteData(buffer, start, end);
+      result = _ensureFastAndSerializableByteData(buffer, start, end!);
     } catch (e) {
       return new Future.error(e);
     }
@@ -857,24 +841,19 @@
       if (_isErrorResponse(response)) {
         throw _exceptionFromResponse(response, "writeFrom failed", path);
       }
-      _resourceInfo.addWrite(end - (start - result.start));
+      _resourceInfo.addWrite(end! - (start - result.start));
       return this;
     });
   }
 
-  void writeFromSync(List<int> buffer, [int start = 0, int end]) {
+  void writeFromSync(List<int> buffer, [int start = 0, int? end]) {
     _checkAvailable();
-    if ((buffer is! List) ||
-        ((start != null) && (start is! int)) ||
-        ((end != null) && (end is! int))) {
-      throw new ArgumentError("Invalid arguments to writeFromSync");
-    }
     end = RangeError.checkValidRange(start, end, buffer.length);
     if (end == start) {
       return;
     }
     _BufferAndStart bufferAndStart =
-        _ensureFastAndSerializableByteData(buffer, start, end);
+        _ensureFastAndSerializableByteData(buffer, start, end!);
     var result = _ops.writeFrom(bufferAndStart.buffer, bufferAndStart.start,
         end - (start - bufferAndStart.start));
     if (result is OSError) {
@@ -885,13 +864,11 @@
 
   Future<RandomAccessFile> writeString(String string,
       {Encoding encoding: utf8}) {
-    ArgumentError.checkNotNull(encoding, 'encoding');
     var data = encoding.encode(string);
     return writeFrom(data, 0, data.length);
   }
 
   void writeStringSync(String string, {Encoding encoding: utf8}) {
-    ArgumentError.checkNotNull(encoding, 'encoding');
     var data = encoding.encode(string);
     writeFromSync(data, 0, data.length);
   }
@@ -994,9 +971,10 @@
 
   Future<RandomAccessFile> lock(
       [FileLock mode = FileLock.exclusive, int start = 0, int end = -1]) {
-    if ((mode is! FileLock) || (start is! int) || (end is! int)) {
-      throw new ArgumentError();
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(mode, "mode");
+    ArgumentError.checkNotNull(start, "start");
+    ArgumentError.checkNotNull(end, "end");
     if ((start < 0) || (end < -1) || ((end != -1) && (start >= end))) {
       throw new ArgumentError();
     }
@@ -1011,9 +989,9 @@
   }
 
   Future<RandomAccessFile> unlock([int start = 0, int end = -1]) {
-    if ((start is! int) || (end is! int)) {
-      throw new ArgumentError();
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(start, "start");
+    ArgumentError.checkNotNull(end, "end");
     if (start == end) {
       throw new ArgumentError();
     }
@@ -1029,9 +1007,10 @@
   void lockSync(
       [FileLock mode = FileLock.exclusive, int start = 0, int end = -1]) {
     _checkAvailable();
-    if ((mode is! FileLock) || (start is! int) || (end is! int)) {
-      throw new ArgumentError();
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(mode, "mode");
+    ArgumentError.checkNotNull(start, "start");
+    ArgumentError.checkNotNull(end, "end");
     if ((start < 0) || (end < -1) || ((end != -1) && (start >= end))) {
       throw new ArgumentError();
     }
@@ -1044,9 +1023,9 @@
 
   void unlockSync([int start = 0, int end = -1]) {
     _checkAvailable();
-    if ((start is! int) || (end is! int)) {
-      throw new ArgumentError();
-    }
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(start, "start");
+    ArgumentError.checkNotNull(end, "end");
     if (start == end) {
       throw new ArgumentError();
     }
diff --git a/sdk_nnbd/lib/io/file_system_entity.dart b/sdk_nnbd/lib/io/file_system_entity.dart
index dc56f7f..737d673 100644
--- a/sdk_nnbd/lib/io/file_system_entity.dart
+++ b/sdk_nnbd/lib/io/file_system_entity.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -59,7 +57,9 @@
   static const _mode = 4;
   static const _size = 5;
 
-  static const _notFound = const FileStat._internalNotFound();
+  static final _epoch = DateTime.fromMillisecondsSinceEpoch(0, isUtc: true);
+  static final _notFound = new FileStat._internal(
+      _epoch, _epoch, _epoch, FileSystemEntityType.notFound, 0, -1);
 
   /**
    * The time of the last change to the data or metadata of the file system
@@ -105,14 +105,6 @@
   FileStat._internal(this.changed, this.modified, this.accessed, this.type,
       this.mode, this.size);
 
-  const FileStat._internalNotFound()
-      : changed = null,
-        modified = null,
-        accessed = null,
-        type = FileSystemEntityType.notFound,
-        mode = 0,
-        size = -1;
-
   external static _statSync(_Namespace namespace, String path);
 
   /**
@@ -123,7 +115,7 @@
    * [FileSystemEntityType.notFound] and the other fields invalid.
    */
   static FileStat statSync(String path) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _statSyncInternal(path);
     }
@@ -153,7 +145,7 @@
    * Returns a [Future] which completes with the same results as [statSync].
    */
   static Future<FileStat> stat(String path) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _stat(path);
     }
@@ -255,8 +247,8 @@
  *   files and directories.
  */
 abstract class FileSystemEntity {
-  String _path;
-  Uint8List _rawPath;
+  String get _path;
+  Uint8List get _rawPath;
 
   String get path;
 
@@ -502,7 +494,7 @@
       {int events: FileSystemEvent.all, bool recursive: false}) {
     // FIXME(bkonyi): find a way to do this using the raw path.
     final String trimmedPath = _trimTrailingPathSeparators(path);
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _FileSystemWatcher._watch(trimmedPath, events, recursive);
     }
@@ -538,7 +530,7 @@
    * to an object that does not exist.
    */
   static Future<bool> identical(String path1, String path2) {
-    IOOverrides overrides = IOOverrides.current;
+    IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _identical(path1, path2);
     }
@@ -620,7 +612,7 @@
    * exist.
    */
   static bool identicalSync(String path1, String path2) {
-    IOOverrides overrides = IOOverrides.current;
+    IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _identicalSync(path1, path2);
     }
@@ -633,7 +625,7 @@
    * OS X 10.6 and below is not supported.
    */
   static bool get isWatchSupported {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _FileSystemWatcher.isSupported;
     }
@@ -643,12 +635,9 @@
   // The native methods which determine type of the FileSystemEntity require
   // that the buffer provided is null terminated.
   static Uint8List _toUtf8Array(String s) =>
-      _toNullTerminatedUtf8Array(utf8.encode(s));
+      _toNullTerminatedUtf8Array(utf8.encoder.convert(s));
 
   static Uint8List _toNullTerminatedUtf8Array(Uint8List l) {
-    if (l == null) {
-      return null;
-    }
     if (l.isNotEmpty && l.last != 0) {
       final tmp = new Uint8List(l.length + 1);
       tmp.setRange(0, l.length, l);
@@ -659,9 +648,6 @@
   }
 
   static String _toStringFromUtf8Array(Uint8List l) {
-    if (l == null) {
-      return '';
-    }
     Uint8List nonNullTerminated = l;
     if (l.last == 0) {
       nonNullTerminated =
@@ -799,7 +785,7 @@
 
   static FileSystemEntityType _getTypeSync(
       Uint8List rawPath, bool followLinks) {
-    IOOverrides overrides = IOOverrides.current;
+    IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _getTypeSyncHelper(rawPath, followLinks);
     }
@@ -821,7 +807,7 @@
 
   static Future<FileSystemEntityType> _getType(
       Uint8List rawPath, bool followLinks) {
-    IOOverrides overrides = IOOverrides.current;
+    IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return _getTypeRequest(rawPath, followLinks);
     }
@@ -829,7 +815,7 @@
         utf8.decode(rawPath, allowMalformed: true), followLinks);
   }
 
-  static _throwIfError(Object result, String msg, [String path]) {
+  static _throwIfError(Object result, String msg, [String? path]) {
     if (result is OSError) {
       throw new FileSystemException(msg, path, result);
     } else if (result is ArgumentError) {
@@ -839,8 +825,8 @@
 
   // TODO(bkonyi): find a way to do this with raw paths.
   static String _trimTrailingPathSeparators(String path) {
-    // Don't handle argument errors here.
-    if (path == null) return path;
+    // TODO: Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(path, "path");
     if (Platform.isWindows) {
       while (path.length > 1 &&
           (path.endsWith(Platform.pathSeparator) || path.endsWith('/'))) {
@@ -856,8 +842,6 @@
 
   // TODO(bkonyi): find a way to do this with raw paths.
   static String _ensureTrailingPathSeparators(String path) {
-    // Don't handle argument errors here.
-    if (path == null) return path;
     if (path.isEmpty) path = '.';
     if (Platform.isWindows) {
       while (!path.endsWith(Platform.pathSeparator) && !path.endsWith('/')) {
@@ -986,7 +970,7 @@
    * If the underlying implementation is able to identify the destination of
    * the moved file, [destination] will be set. Otherwise, it will be `null`.
    */
-  final String destination;
+  final String? destination;
 
   FileSystemMoveEvent._(path, isDirectory, this.destination)
       : super._(FileSystemEvent.move, path, isDirectory);
@@ -1000,7 +984,7 @@
   }
 }
 
-class _FileSystemWatcher {
+abstract class _FileSystemWatcher {
   external static Stream<FileSystemEvent> _watch(
       String path, int events, bool recursive);
   external static bool get isSupported;
diff --git a/sdk_nnbd/lib/io/io.dart b/sdk_nnbd/lib/io/io.dart
index 2c692fcf..27cd6a3 100644
--- a/sdk_nnbd/lib/io/io.dart
+++ b/sdk_nnbd/lib/io/io.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 /**
  * File, socket, HTTP, and other I/O support for non-web applications.
  *
diff --git a/sdk_nnbd/lib/io/io_resource_info.dart b/sdk_nnbd/lib/io/io_resource_info.dart
index 8426483..b916dd8 100644
--- a/sdk_nnbd/lib/io/io_resource_info.dart
+++ b/sdk_nnbd/lib/io/io_resource_info.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 abstract class _IOResourceInfo {
@@ -125,10 +123,9 @@
   }
 
   static Future<ServiceExtensionResponse> getFileInfoMapByID(function, params) {
-    assert(params.containsKey('id'));
-    var id = int.parse(params['id']);
+    var id = int.parse(params['id']!);
     var result =
-        openFiles.containsKey(id) ? openFiles[id].getFileInfoMap() : {};
+        openFiles.containsKey(id) ? openFiles[id]!.getFileInfoMap() : {};
     var jsonValue = json.encode(result);
     return new Future.value(new ServiceExtensionResponse.result(jsonValue));
   }
@@ -192,9 +189,9 @@
 
   static Future<ServiceExtensionResponse> getProcessInfoMapById(
       String function, Map<String, String> params) {
-    var id = int.parse(params['id']);
+    var id = int.parse(params['id']!);
     var result = startedProcesses.containsKey(id)
-        ? startedProcesses[id].fullValueMap
+        ? startedProcesses[id]!.fullValueMap
         : {};
     var jsonValue = json.encode(result);
     return new Future.value(new ServiceExtensionResponse.result(jsonValue));
@@ -257,10 +254,9 @@
 
   static Future<ServiceExtensionResponse> getSocketInfoMapByID(
       String function, Map<String, String> params) {
-    assert(params.containsKey('id'));
-    var id = int.parse(params['id']);
+    var id = int.parse(params['id']!);
     var result =
-        openSockets.containsKey(id) ? openSockets[id].getSocketInfoMap() : {};
+        openSockets.containsKey(id) ? openSockets[id]!.getSocketInfoMap() : {};
     var jsonValue = json.encode(result);
     return new Future.value(new ServiceExtensionResponse.result(jsonValue));
   }
diff --git a/sdk_nnbd/lib/io/io_service.dart b/sdk_nnbd/lib/io/io_service.dart
index b572def..7af382c 100644
--- a/sdk_nnbd/lib/io/io_service.dart
+++ b/sdk_nnbd/lib/io/io_service.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 class _IOService {
diff --git a/sdk_nnbd/lib/io/io_sink.dart b/sdk_nnbd/lib/io/io_sink.dart
index 8331dd0..38296b8 100644
--- a/sdk_nnbd/lib/io/io_sink.dart
+++ b/sdk_nnbd/lib/io/io_sink.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -58,13 +56,13 @@
    * This operation is non-blocking. See [flush] or [done] for how to get any
    * errors generated by this call.
    */
-  void write(Object obj);
+  void write(Object? obj);
 
   /**
    * Iterates over the given [objects] and [write]s them in sequence.
    *
    * If [separator] is provided, a `write` with the `separator` is performed
-   * between any two elements of objects`.
+   * between any two elements of objects.
    *
    * This operation is non-blocking. See [flush] or [done] for how to get any
    * errors generated by this call.
@@ -78,7 +76,7 @@
    * This operation is non-blocking. See [flush] or [done] for how to get any
    * errors generated by this call.
    */
-  void writeln([Object obj = ""]);
+  void writeln([Object? obj = ""]);
 
   /**
    * Writes the character of [charCode].
@@ -99,7 +97,7 @@
    * This operation is non-blocking. See [flush] or [done] for how to get any
    * errors generated by this call.
    */
-  void addError(error, [StackTrace stackTrace]);
+  void addError(error, [StackTrace? stackTrace]);
 
   /**
    * Adds all elements of the given [stream] to `this`.
@@ -143,8 +141,8 @@
 class _StreamSinkImpl<T> implements StreamSink<T> {
   final StreamConsumer<T> _target;
   final Completer _doneCompleter = new Completer();
-  StreamController<T> _controllerInstance;
-  Completer _controllerCompleter;
+  StreamController<T>? _controllerInstance;
+  Completer? _controllerCompleter;
   bool _isClosed = false;
   bool _isBound = false;
   bool _hasError = false;
@@ -158,7 +156,7 @@
     _controller.add(data);
   }
 
-  void addError(error, [StackTrace stackTrace]) {
+  void addError(error, [StackTrace? stackTrace]) {
     if (_isClosed) {
       throw StateError("StreamSink is closed");
     }
@@ -174,7 +172,7 @@
     _isBound = true;
     var future = _controllerCompleter == null
         ? _target.addStream(stream)
-        : _controllerCompleter.future.then((_) => _target.addStream(stream));
+        : _controllerCompleter!.future.then((_) => _target.addStream(stream));
     _controllerInstance?.close();
 
     // Wait for any pending events in [_controller] to be dispatched before
@@ -192,8 +190,8 @@
     // Adding an empty stream-controller will return a future that will complete
     // when all data is done.
     _isBound = true;
-    var future = _controllerCompleter.future;
-    _controllerInstance.close();
+    var future = _controllerCompleter!.future;
+    _controllerInstance!.close();
     return future.whenComplete(() {
       _isBound = false;
     });
@@ -206,7 +204,7 @@
     if (!_isClosed) {
       _isClosed = true;
       if (_controllerInstance != null) {
-        _controllerInstance.close();
+        _controllerInstance!.close();
       } else {
         _closeTarget();
       }
@@ -226,7 +224,7 @@
     }
   }
 
-  void _completeDoneError(error, StackTrace stackTrace) {
+  void _completeDoneError(error, StackTrace? stackTrace) {
     if (!_doneCompleter.isCompleted) {
       _hasError = true;
       _doneCompleter.completeError(error, stackTrace);
@@ -246,7 +244,7 @@
       _target.addStream(_controller.stream).then((_) {
         if (_isBound) {
           // A new stream takes over - forward values to that stream.
-          _controllerCompleter.complete(this);
+          _controllerCompleter!.complete(this);
           _controllerCompleter = null;
           _controllerInstance = null;
         } else {
@@ -256,7 +254,7 @@
       }, onError: (error, stackTrace) {
         if (_isBound) {
           // A new stream takes over - forward errors to that stream.
-          _controllerCompleter.completeError(error, stackTrace);
+          _controllerCompleter!.completeError(error, stackTrace);
           _controllerCompleter = null;
           _controllerInstance = null;
         } else {
@@ -266,7 +264,7 @@
         }
       });
     }
-    return _controllerInstance;
+    return _controllerInstance!;
   }
 }
 
@@ -285,7 +283,7 @@
     _encoding = value;
   }
 
-  void write(Object obj) {
+  void write(Object? obj) {
     String string = '$obj';
     if (string.isEmpty) return;
     add(_encoding.encode(string));
@@ -307,7 +305,7 @@
     }
   }
 
-  void writeln([Object object = ""]) {
+  void writeln([Object? object = ""]) {
     write(object);
     write("\n");
   }
diff --git a/sdk_nnbd/lib/io/link.dart b/sdk_nnbd/lib/io/link.dart
index 0ff9e9d..97addfb 100644
--- a/sdk_nnbd/lib/io/link.dart
+++ b/sdk_nnbd/lib/io/link.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -17,7 +15,7 @@
    */
   @pragma("vm:entry-point")
   factory Link(String path) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return new _Link(path);
     }
@@ -155,19 +153,16 @@
 }
 
 class _Link extends FileSystemEntity implements Link {
-  String _path;
-  Uint8List _rawPath;
+  final String _path;
+  final Uint8List _rawPath;
 
-  _Link(String path) {
-    ArgumentError.checkNotNull(path, 'path');
-    _path = path;
-    _rawPath = FileSystemEntity._toUtf8Array(path);
-  }
+  _Link(String path)
+      : _path = path,
+        _rawPath = FileSystemEntity._toUtf8Array(path);
 
-  _Link.fromRawPath(Uint8List rawPath) {
-    _rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawPath);
-    _path = FileSystemEntity._toStringFromUtf8Array(rawPath);
-  }
+  _Link.fromRawPath(Uint8List rawPath)
+      : _rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawPath),
+        _path = FileSystemEntity._toStringFromUtf8Array(rawPath);
 
   String get path => _path;
 
diff --git a/sdk_nnbd/lib/io/namespace_impl.dart b/sdk_nnbd/lib/io/namespace_impl.dart
index 1bac5a2..88987b6 100644
--- a/sdk_nnbd/lib/io/namespace_impl.dart
+++ b/sdk_nnbd/lib/io/namespace_impl.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 // Each Isolate may run in a different "namespace", which provides the scope in
diff --git a/sdk_nnbd/lib/io/network_profiling.dart b/sdk_nnbd/lib/io/network_profiling.dart
index 3ab99b2..87d6527 100644
--- a/sdk_nnbd/lib/io/network_profiling.dart
+++ b/sdk_nnbd/lib/io/network_profiling.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 const int _versionMajor = 1;
@@ -105,7 +103,7 @@
   if (!parameters.containsKey(kEnable)) {
     throw _missingArgument(kEnable);
   }
-  final enable = parameters[kEnable].toLowerCase();
+  final enable = parameters[kEnable]!.toLowerCase();
   if (enable != 'true' && enable != 'false') {
     throw _invalidArgument(kEnable, enable);
   }
@@ -139,8 +137,7 @@
     // Skip socket that started before _enableSocketProfiling turned on.
     if (!_idToSocketStatistic.containsKey(id) &&
         type != _SocketProfileType.startTime) return;
-    _idToSocketStatistic[id] ??= _SocketStatistic(id);
-    _SocketStatistic stats = _idToSocketStatistic[id];
+    _SocketStatistic stats = _idToSocketStatistic[id] ??= _SocketStatistic(id);
     switch (type) {
       case _SocketProfileType.startTime:
         stats.startTime = Timeline.now;
@@ -162,16 +159,12 @@
         break;
       case _SocketProfileType.readBytes:
         if (object == null) return;
-        assert(object is int);
-        stats.readBytes ??= 0;
-        stats.readBytes += object;
+        stats.readBytes += object as int;
         stats.lastReadTime = Timeline.now;
         break;
       case _SocketProfileType.writeBytes:
         if (object == null) return;
-        assert(object is int);
-        stats.writeBytes ??= 0;
-        stats.writeBytes += object;
+        stats.writeBytes += object as int;
         stats.lastWriteTime = Timeline.now;
         break;
       default:
@@ -192,7 +185,7 @@
 
   // clear the storage if _idToSocketStatistic has been initialized.
   static String clear() {
-    _idToSocketStatistic?.clear();
+    _idToSocketStatistic.clear();
     return _success();
   }
 }
@@ -212,15 +205,15 @@
 /// Socket statistic
 class _SocketStatistic {
   final int id;
-  int startTime;
-  int endTime;
-  String address;
-  int port;
-  String socketType;
+  int? startTime;
+  int? endTime;
+  String? address;
+  int? port;
+  String? socketType;
   int readBytes = 0;
   int writeBytes = 0;
-  int lastWriteTime;
-  int lastReadTime;
+  int? lastWriteTime;
+  int? lastReadTime;
 
   _SocketStatistic(this.id);
 
@@ -240,7 +233,7 @@
     return map;
   }
 
-  void _setIfNotNull(Map<String, Object> json, String key, Object value) {
+  void _setIfNotNull(Map<String, dynamic> json, String key, Object? value) {
     if (value == null) return;
     json[key] = value;
   }
diff --git a/sdk_nnbd/lib/io/overrides.dart b/sdk_nnbd/lib/io/overrides.dart
index b46af8a..1fd0f06 100644
--- a/sdk_nnbd/lib/io/overrides.dart
+++ b/sdk_nnbd/lib/io/overrides.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 final _ioOverridesToken = new Object();
@@ -34,9 +32,9 @@
 /// }
 /// ```
 abstract class IOOverrides {
-  static IOOverrides _global;
+  static IOOverrides? _global;
 
-  static IOOverrides get current {
+  static IOOverrides? get current {
     return Zone.current[_ioOverridesToken] ?? _global;
   }
 
@@ -45,7 +43,7 @@
   /// These are the [IOOverrides] that will be used in the root Zone, and in
   /// Zone's that do not set [IOOverrides] and whose ancestors up to the root
   /// Zone do not set [IOOverrides].
-  static set global(IOOverrides overrides) {
+  static set global(IOOverrides? overrides) {
     _global = overrides;
   }
 
@@ -56,47 +54,47 @@
   static R runZoned<R>(R body(),
       {
       // Directory
-      Directory Function(String) createDirectory,
-      Directory Function() getCurrentDirectory,
-      void Function(String) setCurrentDirectory,
-      Directory Function() getSystemTempDirectory,
+      Directory Function(String)? createDirectory,
+      Directory Function()? getCurrentDirectory,
+      void Function(String)? setCurrentDirectory,
+      Directory Function()? getSystemTempDirectory,
 
       // File
-      File Function(String) createFile,
+      File Function(String)? createFile,
 
       // FileStat
-      Future<FileStat> Function(String) stat,
-      FileStat Function(String) statSync,
+      Future<FileStat> Function(String)? stat,
+      FileStat Function(String)? statSync,
 
       // FileSystemEntity
-      Future<bool> Function(String, String) fseIdentical,
-      bool Function(String, String) fseIdenticalSync,
-      Future<FileSystemEntityType> Function(String, bool) fseGetType,
-      FileSystemEntityType Function(String, bool) fseGetTypeSync,
+      Future<bool> Function(String, String)? fseIdentical,
+      bool Function(String, String)? fseIdenticalSync,
+      Future<FileSystemEntityType> Function(String, bool)? fseGetType,
+      FileSystemEntityType Function(String, bool)? fseGetTypeSync,
 
       // _FileSystemWatcher
-      Stream<FileSystemEvent> Function(String, int, bool) fsWatch,
-      bool Function() fsWatchIsSupported,
+      Stream<FileSystemEvent> Function(String, int, bool)? fsWatch,
+      bool Function()? fsWatchIsSupported,
 
       // Link
-      Link Function(String) createLink,
+      Link Function(String)? createLink,
 
       // Socket
       Future<Socket> Function(dynamic, int,
-              {dynamic sourceAddress, Duration timeout})
+              {dynamic sourceAddress, Duration? timeout})?
           socketConnect,
       Future<ConnectionTask<Socket>> Function(dynamic, int,
-              {dynamic sourceAddress})
+              {dynamic sourceAddress})?
           socketStartConnect,
 
       // ServerSocket
       Future<ServerSocket> Function(dynamic, int,
-              {int backlog, bool v6Only, bool shared})
+              {int backlog, bool v6Only, bool shared})?
           serverSocketBind,
 
       // Optional Zone parameters
-      ZoneSpecification zoneSpecification,
-      Function onError}) {
+      ZoneSpecification? zoneSpecification,
+      Function? onError}) {
     IOOverrides overrides = new _IOOverridesScope(
       // Directory
       createDirectory,
@@ -142,7 +140,7 @@
   /// Note that [overrides] should be an instance of a class that extends
   /// [IOOverrides].
   static R runWithIOOverrides<R>(R body(), IOOverrides overrides,
-      {ZoneSpecification zoneSpecification, Function onError}) {
+      {ZoneSpecification? zoneSpecification, Function? onError}) {
     return _asyncRunZoned<R>(body,
         zoneValues: {_ioOverridesToken: overrides},
         zoneSpecification: zoneSpecification,
@@ -228,7 +226,8 @@
   /// When this override is installed, this function overrides the behavior of
   /// `FileSystemEntity.type`.
   Future<FileSystemEntityType> fseGetType(String path, bool followLinks) {
-    return FileSystemEntity._getTypeRequest(utf8.encode(path), followLinks);
+    return FileSystemEntity._getTypeRequest(
+        utf8.encoder.convert(path), followLinks);
   }
 
   /// Returns the [FileSystemEntityType] for [path].
@@ -236,7 +235,8 @@
   /// When this override is installed, this function overrides the behavior of
   /// `FileSystemEntity.typeSync`.
   FileSystemEntityType fseGetTypeSync(String path, bool followLinks) {
-    return FileSystemEntity._getTypeSyncHelper(utf8.encode(path), followLinks);
+    return FileSystemEntity._getTypeSyncHelper(
+        utf8.encoder.convert(path), followLinks);
   }
 
   // _FileSystemWatcher
@@ -270,7 +270,7 @@
   /// When this override is installed, this functions overrides the behavior of
   /// `Socket.connect(...)`.
   Future<Socket> socketConnect(host, int port,
-      {sourceAddress, Duration timeout}) {
+      {sourceAddress, Duration? timeout}) {
     return Socket._connect(host, port,
         sourceAddress: sourceAddress, timeout: timeout);
   }
@@ -300,43 +300,43 @@
 }
 
 class _IOOverridesScope extends IOOverrides {
-  final IOOverrides _previous = IOOverrides.current;
+  final IOOverrides? _previous = IOOverrides.current;
 
   // Directory
-  Directory Function(String) _createDirectory;
-  Directory Function() _getCurrentDirectory;
-  void Function(String) _setCurrentDirectory;
-  Directory Function() _getSystemTempDirectory;
+  Directory Function(String)? _createDirectory;
+  Directory Function()? _getCurrentDirectory;
+  void Function(String)? _setCurrentDirectory;
+  Directory Function()? _getSystemTempDirectory;
 
   // File
-  File Function(String) _createFile;
+  File Function(String)? _createFile;
 
   // FileStat
-  Future<FileStat> Function(String) _stat;
-  FileStat Function(String) _statSync;
+  Future<FileStat> Function(String)? _stat;
+  FileStat Function(String)? _statSync;
 
   // FileSystemEntity
-  Future<bool> Function(String, String) _fseIdentical;
-  bool Function(String, String) _fseIdenticalSync;
-  Future<FileSystemEntityType> Function(String, bool) _fseGetType;
-  FileSystemEntityType Function(String, bool) _fseGetTypeSync;
+  Future<bool> Function(String, String)? _fseIdentical;
+  bool Function(String, String)? _fseIdenticalSync;
+  Future<FileSystemEntityType> Function(String, bool)? _fseGetType;
+  FileSystemEntityType Function(String, bool)? _fseGetTypeSync;
 
   // _FileSystemWatcher
-  Stream<FileSystemEvent> Function(String, int, bool) _fsWatch;
-  bool Function() _fsWatchIsSupported;
+  Stream<FileSystemEvent> Function(String, int, bool)? _fsWatch;
+  bool Function()? _fsWatchIsSupported;
 
   // Link
-  Link Function(String) _createLink;
+  Link Function(String)? _createLink;
 
   // Socket
   Future<Socket> Function(dynamic, int,
-      {dynamic sourceAddress, Duration timeout}) _socketConnect;
-  Future<ConnectionTask<Socket>> Function(dynamic, int, {dynamic sourceAddress})
-      _socketStartConnect;
+      {dynamic sourceAddress, Duration? timeout})? _socketConnect;
+  Future<ConnectionTask<Socket>> Function(dynamic, int,
+      {dynamic sourceAddress})? _socketStartConnect;
 
   // ServerSocket
   Future<ServerSocket> Function(dynamic, int,
-      {int backlog, bool v6Only, bool shared}) _serverSocketBind;
+      {int backlog, bool v6Only, bool shared})? _serverSocketBind;
 
   _IOOverridesScope(
     // Directory
@@ -376,120 +376,120 @@
   // Directory
   @override
   Directory createDirectory(String path) {
-    if (_createDirectory != null) return _createDirectory(path);
-    if (_previous != null) return _previous.createDirectory(path);
+    if (_createDirectory != null) return _createDirectory!(path);
+    if (_previous != null) return _previous!.createDirectory(path);
     return super.createDirectory(path);
   }
 
   @override
   Directory getCurrentDirectory() {
-    if (_getCurrentDirectory != null) return _getCurrentDirectory();
-    if (_previous != null) return _previous.getCurrentDirectory();
+    if (_getCurrentDirectory != null) return _getCurrentDirectory!();
+    if (_previous != null) return _previous!.getCurrentDirectory();
     return super.getCurrentDirectory();
   }
 
   @override
   void setCurrentDirectory(String path) {
     if (_setCurrentDirectory != null)
-      _setCurrentDirectory(path);
+      _setCurrentDirectory!(path);
     else if (_previous != null)
-      _previous.setCurrentDirectory(path);
+      _previous!.setCurrentDirectory(path);
     else
       super.setCurrentDirectory(path);
   }
 
   @override
   Directory getSystemTempDirectory() {
-    if (_getSystemTempDirectory != null) return _getSystemTempDirectory();
-    if (_previous != null) return _previous.getSystemTempDirectory();
+    if (_getSystemTempDirectory != null) return _getSystemTempDirectory!();
+    if (_previous != null) return _previous!.getSystemTempDirectory();
     return super.getSystemTempDirectory();
   }
 
   // File
   @override
   File createFile(String path) {
-    if (_createFile != null) return _createFile(path);
-    if (_previous != null) return _previous.createFile(path);
+    if (_createFile != null) return _createFile!(path);
+    if (_previous != null) return _previous!.createFile(path);
     return super.createFile(path);
   }
 
   // FileStat
   @override
   Future<FileStat> stat(String path) {
-    if (_stat != null) return _stat(path);
-    if (_previous != null) return _previous.stat(path);
+    if (_stat != null) return _stat!(path);
+    if (_previous != null) return _previous!.stat(path);
     return super.stat(path);
   }
 
   @override
   FileStat statSync(String path) {
-    if (_stat != null) return _statSync(path);
-    if (_previous != null) return _previous.statSync(path);
+    if (_stat != null) return _statSync!(path);
+    if (_previous != null) return _previous!.statSync(path);
     return super.statSync(path);
   }
 
   // FileSystemEntity
   @override
   Future<bool> fseIdentical(String path1, String path2) {
-    if (_fseIdentical != null) return _fseIdentical(path1, path2);
-    if (_previous != null) return _previous.fseIdentical(path1, path2);
+    if (_fseIdentical != null) return _fseIdentical!(path1, path2);
+    if (_previous != null) return _previous!.fseIdentical(path1, path2);
     return super.fseIdentical(path1, path2);
   }
 
   @override
   bool fseIdenticalSync(String path1, String path2) {
-    if (_fseIdenticalSync != null) return _fseIdenticalSync(path1, path2);
-    if (_previous != null) return _previous.fseIdenticalSync(path1, path2);
+    if (_fseIdenticalSync != null) return _fseIdenticalSync!(path1, path2);
+    if (_previous != null) return _previous!.fseIdenticalSync(path1, path2);
     return super.fseIdenticalSync(path1, path2);
   }
 
   @override
   Future<FileSystemEntityType> fseGetType(String path, bool followLinks) {
-    if (_fseGetType != null) return _fseGetType(path, followLinks);
-    if (_previous != null) return _previous.fseGetType(path, followLinks);
+    if (_fseGetType != null) return _fseGetType!(path, followLinks);
+    if (_previous != null) return _previous!.fseGetType(path, followLinks);
     return super.fseGetType(path, followLinks);
   }
 
   @override
   FileSystemEntityType fseGetTypeSync(String path, bool followLinks) {
-    if (_fseGetTypeSync != null) return _fseGetTypeSync(path, followLinks);
-    if (_previous != null) return _previous.fseGetTypeSync(path, followLinks);
+    if (_fseGetTypeSync != null) return _fseGetTypeSync!(path, followLinks);
+    if (_previous != null) return _previous!.fseGetTypeSync(path, followLinks);
     return super.fseGetTypeSync(path, followLinks);
   }
 
   // _FileSystemWatcher
   @override
   Stream<FileSystemEvent> fsWatch(String path, int events, bool recursive) {
-    if (_fsWatch != null) return _fsWatch(path, events, recursive);
-    if (_previous != null) return _previous.fsWatch(path, events, recursive);
+    if (_fsWatch != null) return _fsWatch!(path, events, recursive);
+    if (_previous != null) return _previous!.fsWatch(path, events, recursive);
     return super.fsWatch(path, events, recursive);
   }
 
   @override
   bool fsWatchIsSupported() {
-    if (_fsWatchIsSupported != null) return _fsWatchIsSupported();
-    if (_previous != null) return _previous.fsWatchIsSupported();
+    if (_fsWatchIsSupported != null) return _fsWatchIsSupported!();
+    if (_previous != null) return _previous!.fsWatchIsSupported();
     return super.fsWatchIsSupported();
   }
 
   // Link
   @override
   Link createLink(String path) {
-    if (_createLink != null) return _createLink(path);
-    if (_previous != null) return _previous.createLink(path);
+    if (_createLink != null) return _createLink!(path);
+    if (_previous != null) return _previous!.createLink(path);
     return super.createLink(path);
   }
 
   // Socket
   @override
   Future<Socket> socketConnect(host, int port,
-      {sourceAddress, Duration timeout}) {
+      {sourceAddress, Duration? timeout}) {
     if (_socketConnect != null) {
-      return _socketConnect(host, port,
+      return _socketConnect!(host, port,
           sourceAddress: sourceAddress, timeout: timeout);
     }
     if (_previous != null) {
-      return _previous.socketConnect(host, port,
+      return _previous!.socketConnect(host, port,
           sourceAddress: sourceAddress, timeout: timeout);
     }
     return super.socketConnect(host, port,
@@ -500,11 +500,11 @@
   Future<ConnectionTask<Socket>> socketStartConnect(host, int port,
       {sourceAddress}) {
     if (_socketStartConnect != null) {
-      return _socketStartConnect(host, port, sourceAddress: sourceAddress);
+      return _socketStartConnect!(host, port, sourceAddress: sourceAddress);
     }
     if (_previous != null) {
-      return _previous.socketStartConnect(host, port,
-          sourceAddress: sourceAddress);
+      return _previous!
+          .socketStartConnect(host, port, sourceAddress: sourceAddress);
     }
     return super.socketStartConnect(host, port, sourceAddress: sourceAddress);
   }
@@ -514,11 +514,11 @@
   Future<ServerSocket> serverSocketBind(address, int port,
       {int backlog: 0, bool v6Only: false, bool shared: false}) {
     if (_serverSocketBind != null) {
-      return _serverSocketBind(address, port,
+      return _serverSocketBind!(address, port,
           backlog: backlog, v6Only: v6Only, shared: shared);
     }
     if (_previous != null) {
-      return _previous.serverSocketBind(address, port,
+      return _previous!.serverSocketBind(address, port,
           backlog: backlog, v6Only: v6Only, shared: shared);
     }
     return super.serverSocketBind(address, port,
diff --git a/sdk_nnbd/lib/io/platform.dart b/sdk_nnbd/lib/io/platform.dart
index c08b937..412e258 100644
--- a/sdk_nnbd/lib/io/platform.dart
+++ b/sdk_nnbd/lib/io/platform.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -210,7 +208,7 @@
    *
    */
   @Deprecated('packages/ directory resolution is not supported in Dart 2')
-  static String get packageRoot => null; // TODO(mfairhurst): remove this
+  static String? get packageRoot => null; // TODO(mfairhurst): remove this
 
   /**
    * The `--packages` flag passed to the executable used to run the script
@@ -220,7 +218,7 @@
    *
    * Is `null` if there is no `--packages` flag.
    */
-  static String get packageConfig => _Platform.packageConfig;
+  static String? get packageConfig => _Platform.packageConfig;
 
   /**
    * The version of the current Dart runtime.
diff --git a/sdk_nnbd/lib/io/platform_impl.dart b/sdk_nnbd/lib/io/platform_impl.dart
index c7b23a9..0251445 100644
--- a/sdk_nnbd/lib/io/platform_impl.dart
+++ b/sdk_nnbd/lib/io/platform_impl.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 class _Platform {
@@ -32,21 +30,19 @@
    */
   external static _environment();
   external static List<String> _executableArguments();
-  external static String _packageRoot(); // TODO(mfairhurst): remove this
-  external static String _packageConfig();
+  external static String? _packageConfig();
   external static String _version();
   external static String _localeName();
   external static Uri _script();
 
   static String executable = _executable();
   static String resolvedExecutable = _resolvedExecutable();
-  static String packageRoot; // TODO(mfairhurst): remove this
-  static String packageConfig = _packageConfig();
+  static String? packageConfig = _packageConfig();
 
   @pragma("vm:entry-point")
-  static String Function() _localeClosure;
+  static String Function()? _localeClosure;
   static String localeName() {
-    final result = (_localeClosure == null) ? _localeName() : _localeClosure();
+    final result = (_localeClosure == null) ? _localeName() : _localeClosure!();
     if (result is OSError) {
       throw result;
     }
@@ -55,14 +51,14 @@
 
   // Cache the OS environment. This can be an OSError instance if
   // retrieving the environment failed.
-  static var /*OSError|Map<String,String>*/ _environmentCache;
+  static var /*OSError?|Map<String,String>?*/ _environmentCache;
 
   static int get numberOfProcessors => _numberOfProcessors();
   static String get pathSeparator => _pathSeparator();
   static String get operatingSystem => _operatingSystem();
   static Uri get script => _script();
 
-  static String _cachedOSVersion;
+  static String? _cachedOSVersion;
   static String get operatingSystemVersion {
     if (_cachedOSVersion == null) {
       var result = _operatingSystemVersion();
@@ -71,7 +67,7 @@
       }
       _cachedOSVersion = result;
     }
-    return _cachedOSVersion;
+    return _cachedOSVersion!;
   }
 
   static String get localHostname {
@@ -116,7 +112,7 @@
     if (_environmentCache is OSError) {
       throw _environmentCache;
     } else {
-      return _environmentCache;
+      return _environmentCache!;
     }
   }
 
@@ -128,10 +124,10 @@
 class _CaseInsensitiveStringMap<V> extends MapBase<String, V> {
   final Map<String, V> _map = new Map<String, V>();
 
-  bool containsKey(Object key) =>
+  bool containsKey(Object? key) =>
       key is String && _map.containsKey(key.toUpperCase());
-  bool containsValue(Object value) => _map.containsValue(value);
-  V operator [](Object key) => key is String ? _map[key.toUpperCase()] : null;
+  bool containsValue(Object? value) => _map.containsValue(value);
+  V? operator [](Object? key) => key is String ? _map[key.toUpperCase()] : null;
   void operator []=(String key, V value) {
     _map[key.toUpperCase()] = value;
   }
@@ -144,7 +140,8 @@
     other.forEach((key, value) => this[key.toUpperCase()] = value);
   }
 
-  V remove(Object key) => key is String ? _map.remove(key.toUpperCase()) : null;
+  V? remove(Object? key) =>
+      key is String ? _map.remove(key.toUpperCase()) : null;
 
   void clear() {
     _map.clear();
@@ -165,7 +162,7 @@
   Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> transform(String key, V value)) =>
       _map.map(transform);
 
-  V update(String key, V update(V value), {V ifAbsent()}) =>
+  V update(String key, V update(V value), {V ifAbsent()?}) =>
       _map.update(key.toUpperCase(), update, ifAbsent: ifAbsent);
 
   void updateAll(V update(String key, V value)) {
diff --git a/sdk_nnbd/lib/io/process.dart b/sdk_nnbd/lib/io/process.dart
index b503e9e..9b2884f 100644
--- a/sdk_nnbd/lib/io/process.dart
+++ b/sdk_nnbd/lib/io/process.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 // TODO(ager): The only reason for this class is that we
@@ -13,7 +11,7 @@
   external static void _setExitCode(int status);
   external static int _getExitCode();
   external static void _sleep(int millis);
-  external static int _pid(Process process);
+  external static int _pid(Process? process);
   external static Stream<ProcessSignal> _watchSignal(ProcessSignal signal);
 }
 
@@ -363,8 +361,8 @@
    */
   external static Future<Process> start(
       String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
       ProcessStartMode mode: ProcessStartMode.normal});
@@ -412,12 +410,12 @@
    */
   external static Future<ProcessResult> run(
       String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
-      Encoding stdoutEncoding: systemEncoding,
-      Encoding stderrEncoding: systemEncoding});
+      Encoding? stdoutEncoding: systemEncoding,
+      Encoding? stderrEncoding: systemEncoding});
 
   /**
    * Starts a process and runs it to completion. This is a synchronous
@@ -430,12 +428,12 @@
    */
   external static ProcessResult runSync(
       String executable, List<String> arguments,
-      {String workingDirectory,
-      Map<String, String> environment,
+      {String? workingDirectory,
+      Map<String, String>? environment,
       bool includeParentEnvironment: true,
       bool runInShell: false,
-      Encoding stdoutEncoding: systemEncoding,
-      Encoding stderrEncoding: systemEncoding});
+      Encoding? stdoutEncoding: systemEncoding,
+      Encoding? stderrEncoding: systemEncoding});
 
   /**
    * Kills the process with id [pid].
@@ -695,8 +693,7 @@
   const ProcessException(this.executable, this.arguments,
       [this.message = "", this.errorCode = 0]);
   String toString() {
-    var msg = (message == null) ? 'OS error code: $errorCode' : message;
     var args = arguments.join(' ');
-    return "ProcessException: $msg\n  Command: $executable $args";
+    return "ProcessException: $message\n  Command: $executable $args";
   }
 }
diff --git a/sdk_nnbd/lib/io/secure_server_socket.dart b/sdk_nnbd/lib/io/secure_server_socket.dart
index 4b84859..c7b58f5 100644
--- a/sdk_nnbd/lib/io/secure_server_socket.dart
+++ b/sdk_nnbd/lib/io/secure_server_socket.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -74,10 +72,9 @@
       bool v6Only: false,
       bool requestClientCertificate: false,
       bool requireClientCertificate: false,
-      List<String> supportedProtocols,
+      List<String>? supportedProtocols,
       bool shared: false}) {
-    return RawSecureServerSocket
-        .bind(address, port, context,
+    return RawSecureServerSocket.bind(address, port, context,
             backlog: backlog,
             v6Only: v6Only,
             requestClientCertificate: requestClientCertificate,
@@ -87,8 +84,8 @@
         .then((serverSocket) => new SecureServerSocket._(serverSocket));
   }
 
-  StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _socket.map((rawSocket) => new SecureSocket._(rawSocket)).listen(
         onData,
         onError: onError,
@@ -125,12 +122,12 @@
  */
 class RawSecureServerSocket extends Stream<RawSecureSocket> {
   final RawServerSocket _socket;
-  StreamController<RawSecureSocket> _controller;
-  StreamSubscription<RawSocket> _subscription;
+  late StreamController<RawSecureSocket> _controller;
+  StreamSubscription<RawSocket>? _subscription;
   final SecurityContext _context;
   final bool requestClientCertificate;
   final bool requireClientCertificate;
-  final List<String> supportedProtocols;
+  final List<String>? supportedProtocols;
   bool _closed = false;
 
   RawSecureServerSocket._(
@@ -203,10 +200,10 @@
       bool v6Only: false,
       bool requestClientCertificate: false,
       bool requireClientCertificate: false,
-      List<String> supportedProtocols,
+      List<String>? supportedProtocols,
       bool shared: false}) {
-    return RawServerSocket
-        .bind(address, port, backlog: backlog, v6Only: v6Only, shared: shared)
+    return RawServerSocket.bind(address, port,
+            backlog: backlog, v6Only: v6Only, shared: shared)
         .then((serverSocket) => new RawSecureServerSocket._(
             serverSocket,
             context,
@@ -215,8 +212,8 @@
             supportedProtocols));
   }
 
-  StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -249,11 +246,8 @@
       // Do nothing - connection is closed.
       return;
     }
-    _RawSecureSocket
-        .connect(connection.address, remotePort,
+    _RawSecureSocket.connect(connection.address, remotePort, true, connection,
             context: _context,
-            is_server: true,
-            socket: connection,
             requestClientCertificate: requestClientCertificate,
             requireClientCertificate: requireClientCertificate,
             supportedProtocols: supportedProtocols)
@@ -272,9 +266,9 @@
 
   void _onPauseStateChange() {
     if (_controller.isPaused) {
-      _subscription.pause();
+      _subscription!.pause();
     } else {
-      _subscription.resume();
+      _subscription!.resume();
     }
   }
 
diff --git a/sdk_nnbd/lib/io/secure_socket.dart b/sdk_nnbd/lib/io/secure_socket.dart
index 6d23b13..2f6fc00 100644
--- a/sdk_nnbd/lib/io/secure_socket.dart
+++ b/sdk_nnbd/lib/io/secure_socket.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -44,10 +42,10 @@
 
    */
   static Future<SecureSocket> connect(host, int port,
-      {SecurityContext context,
-      bool onBadCertificate(X509Certificate certificate),
-      List<String> supportedProtocols,
-      Duration timeout}) {
+      {SecurityContext? context,
+      bool onBadCertificate(X509Certificate certificate)?,
+      List<String>? supportedProtocols,
+      Duration? timeout}) {
     return RawSecureSocket.connect(host, port,
             context: context,
             onBadCertificate: onBadCertificate,
@@ -60,9 +58,9 @@
   /// [ConnectionTask] that can be cancelled if the [SecureSocket] is no
   /// longer needed.
   static Future<ConnectionTask<SecureSocket>> startConnect(host, int port,
-      {SecurityContext context,
-      bool onBadCertificate(X509Certificate certificate),
-      List<String> supportedProtocols}) {
+      {SecurityContext? context,
+      bool onBadCertificate(X509Certificate certificate)?,
+      List<String>? supportedProtocols}) {
     return RawSecureSocket.startConnect(host, port,
             context: context,
             onBadCertificate: onBadCertificate,
@@ -70,8 +68,7 @@
         .then((rawState) {
       Future<SecureSocket> socket =
           rawState.socket.then((rawSocket) => new SecureSocket._(rawSocket));
-      return new ConnectionTask<SecureSocket>._(
-          socket: socket, onCancel: rawState._onCancel);
+      return new ConnectionTask<SecureSocket>._(socket, rawState._onCancel);
     });
   }
 
@@ -110,9 +107,9 @@
    */
   static Future<SecureSocket> secure(Socket socket,
       {host,
-      SecurityContext context,
-      bool onBadCertificate(X509Certificate certificate),
-      @Since("2.6") List<String> supportedProtocols}) {
+      SecurityContext? context,
+      bool onBadCertificate(X509Certificate certificate)?,
+      @Since("2.6") List<String>? supportedProtocols}) {
     return ((socket as dynamic /*_Socket*/)._detachRaw() as Future)
         .then<RawSecureSocket>((detachedRaw) {
       return RawSecureSocket.secure(detachedRaw[0] as RawSocket,
@@ -146,11 +143,11 @@
    *
    */
   static Future<SecureSocket> secureServer(
-      Socket socket, SecurityContext context,
-      {List<int> bufferedData,
+      Socket socket, SecurityContext? context,
+      {List<int>? bufferedData,
       bool requestClientCertificate: false,
       bool requireClientCertificate: false,
-      List<String> supportedProtocols}) {
+      List<String>? supportedProtocols}) {
     return ((socket as dynamic /*_Socket*/)._detachRaw() as Future)
         .then<RawSecureSocket>((detachedRaw) {
       return RawSecureSocket.secureServer(detachedRaw[0] as RawSocket, context,
@@ -169,7 +166,7 @@
    * client certificate was received.  If it is the client end,
    * [peerCertificate] will return the server's certificate.
    */
-  X509Certificate get peerCertificate;
+  X509Certificate? get peerCertificate;
 
   /**
    * The protocol which was selected during ALPN protocol negotiation.
@@ -178,7 +175,7 @@
    * specify a list of supported ALPN protocols or there was no common
    * protocol between client and server.
    */
-  String get selectedProtocol;
+  String? get selectedProtocol;
 
   /**
    * Renegotiate an existing secure connection, renewing the session keys
@@ -228,12 +225,11 @@
    * can be obtained via [RawSecureSocket.selectedProtocol].
    */
   static Future<RawSecureSocket> connect(host, int port,
-      {SecurityContext context,
-      bool onBadCertificate(X509Certificate certificate),
-      List<String> supportedProtocols,
-      Duration timeout}) {
-    _RawSecureSocket._verifyFields(
-        host, port, false, false, false, onBadCertificate);
+      {SecurityContext? context,
+      bool onBadCertificate(X509Certificate certificate)?,
+      List<String>? supportedProtocols,
+      Duration? timeout}) {
+    _RawSecureSocket._verifyFields(host, port, false, false);
     return RawSocket.connect(host, port, timeout: timeout).then((socket) {
       return secure(socket,
           context: context,
@@ -246,9 +242,9 @@
   /// [ConnectionTask] that can be cancelled if the [RawSecureSocket] is no
   /// longer needed.
   static Future<ConnectionTask<RawSecureSocket>> startConnect(host, int port,
-      {SecurityContext context,
-      bool onBadCertificate(X509Certificate certificate),
-      List<String> supportedProtocols}) {
+      {SecurityContext? context,
+      bool onBadCertificate(X509Certificate certificate)?,
+      List<String>? supportedProtocols}) {
     return RawSocket.startConnect(host, port)
         .then((ConnectionTask<RawSocket> rawState) {
       Future<RawSecureSocket> socket = rawState.socket.then((rawSocket) {
@@ -257,8 +253,7 @@
             onBadCertificate: onBadCertificate,
             supportedProtocols: supportedProtocols);
       });
-      return new ConnectionTask<RawSecureSocket>._(
-          socket: socket, onCancel: rawState._onCancel);
+      return new ConnectionTask<RawSecureSocket>._(socket, rawState._onCancel);
     });
   }
 
@@ -296,17 +291,15 @@
    *
    */
   static Future<RawSecureSocket> secure(RawSocket socket,
-      {StreamSubscription<RawSocketEvent> subscription,
+      {StreamSubscription<RawSocketEvent>? subscription,
       host,
-      SecurityContext context,
-      bool onBadCertificate(X509Certificate certificate),
-      List<String> supportedProtocols}) {
+      SecurityContext? context,
+      bool onBadCertificate(X509Certificate certificate)?,
+      List<String>? supportedProtocols}) {
     socket.readEventsEnabled = false;
     socket.writeEventsEnabled = false;
     return _RawSecureSocket.connect(
-        host != null ? host : socket.address.host, socket.port,
-        is_server: false,
-        socket: socket,
+        host != null ? host : socket.address.host, socket.port, false, socket,
         subscription: subscription,
         context: context,
         onBadCertificate: onBadCertificate,
@@ -337,18 +330,17 @@
    *
    */
   static Future<RawSecureSocket> secureServer(
-      RawSocket socket, SecurityContext context,
-      {StreamSubscription<RawSocketEvent> subscription,
-      List<int> bufferedData,
+      RawSocket socket, SecurityContext? context,
+      {StreamSubscription<RawSocketEvent>? subscription,
+      List<int>? bufferedData,
       bool requestClientCertificate: false,
       bool requireClientCertificate: false,
-      List<String> supportedProtocols}) {
+      List<String>? supportedProtocols}) {
     socket.readEventsEnabled = false;
     socket.writeEventsEnabled = false;
-    return _RawSecureSocket.connect(socket.address, socket.remotePort,
+    return _RawSecureSocket.connect(
+        socket.address, socket.remotePort, true, socket,
         context: context,
-        is_server: true,
-        socket: socket,
         subscription: subscription,
         bufferedData: bufferedData,
         requestClientCertificate: requestClientCertificate,
@@ -375,7 +367,7 @@
    * client certificate was received.  If it is the client end,
    * [peerCertificate] will return the server's certificate.
    */
-  X509Certificate get peerCertificate;
+  X509Certificate? get peerCertificate;
 
   /**
    * The protocol which was selected during protocol negotiation.
@@ -384,7 +376,7 @@
    * specify a list of supported ALPN protocols or there was no common
    * protocol between client and server.
    */
-  String get selectedProtocol;
+  String? get selectedProtocol;
 }
 
 /**
@@ -443,20 +435,19 @@
   static bool _isBufferEncrypted(int identifier) =>
       identifier >= readEncryptedId;
 
-  RawSocket _socket;
+  final RawSocket _socket;
   final Completer<_RawSecureSocket> _handshakeComplete =
       new Completer<_RawSecureSocket>();
-  StreamController<RawSocketEvent> _controller;
-  Stream<RawSocketEvent> _stream;
-  StreamSubscription<RawSocketEvent> _socketSubscription;
-  List<int> _bufferedData;
+  final _controller = new StreamController<RawSocketEvent>(sync: true);
+  late final StreamSubscription<RawSocketEvent> _socketSubscription;
+  List<int>? _bufferedData;
   int _bufferedDataIndex = 0;
   final InternetAddress address;
-  final bool is_server;
-  SecurityContext context;
+  final bool isServer;
+  final SecurityContext context;
   final bool requestClientCertificate;
   final bool requireClientCertificate;
-  final Function onBadCertificate;
+  final bool Function(X509Certificate certificate)? onBadCertificate;
 
   var _status = handshakeStatus;
   bool _writeEventsEnabled = true;
@@ -474,22 +465,23 @@
   bool _filterPending = false;
   bool _filterActive = false;
 
-  _SecureFilter _secureFilter = new _SecureFilter._();
-  String _selectedProtocol;
+  _SecureFilter? _secureFilter = new _SecureFilter._();
+  String? _selectedProtocol;
 
   static Future<_RawSecureSocket> connect(
-      dynamic /*String|InternetAddress*/ host, int requestedPort,
-      {bool is_server,
-      SecurityContext context,
+      dynamic /*String|InternetAddress*/ host,
+      int requestedPort,
+      bool isServer,
       RawSocket socket,
-      StreamSubscription<RawSocketEvent> subscription,
-      List<int> bufferedData,
+      {SecurityContext? context,
+      StreamSubscription<RawSocketEvent>? subscription,
+      List<int>? bufferedData,
       bool requestClientCertificate: false,
       bool requireClientCertificate: false,
-      bool onBadCertificate(X509Certificate certificate),
-      List<String> supportedProtocols}) {
-    _verifyFields(host, requestedPort, is_server, requestClientCertificate,
-        requireClientCertificate, onBadCertificate);
+      bool onBadCertificate(X509Certificate certificate)?,
+      List<String>? supportedProtocols}) {
+    _verifyFields(host, requestedPort, requestClientCertificate,
+        requireClientCertificate);
     if (host is InternetAddress) host = host.host;
     InternetAddress address = socket.address;
     if (host != null) {
@@ -498,8 +490,8 @@
     return new _RawSecureSocket(
             address,
             requestedPort,
-            is_server,
-            context,
+            isServer,
+            context ?? SecurityContext.defaultContext,
             socket,
             subscription,
             bufferedData,
@@ -514,39 +506,38 @@
   _RawSecureSocket(
       this.address,
       int requestedPort,
-      this.is_server,
+      this.isServer,
       this.context,
       this._socket,
-      this._socketSubscription,
+      StreamSubscription<RawSocketEvent>? subscription,
       this._bufferedData,
       this.requestClientCertificate,
       this.requireClientCertificate,
       this.onBadCertificate,
-      List<String> supportedProtocols) {
-    context ??= SecurityContext.defaultContext;
-    _controller = new StreamController<RawSocketEvent>(
-        sync: true,
-        onListen: _onSubscriptionStateChange,
-        onPause: _onPauseStateChange,
-        onResume: _onPauseStateChange,
-        onCancel: _onSubscriptionStateChange);
-    _stream = _controller.stream;
+      List<String>? supportedProtocols) {
+    _controller
+      ..onListen = _onSubscriptionStateChange
+      ..onPause = _onPauseStateChange
+      ..onResume = _onPauseStateChange
+      ..onCancel = _onSubscriptionStateChange;
     // Throw an ArgumentError if any field is invalid.  After this, all
     // errors will be reported through the future or the stream.
-    _secureFilter.init();
-    _secureFilter
+    final secureFilter = _secureFilter!;
+    secureFilter.init();
+    secureFilter
         .registerHandshakeCompleteCallback(_secureHandshakeCompleteHandler);
     if (onBadCertificate != null) {
-      _secureFilter.registerBadCertificateCallback(_onBadCertificateWrapper);
+      secureFilter.registerBadCertificateCallback(_onBadCertificateWrapper);
     }
     _socket.readEventsEnabled = true;
     _socket.writeEventsEnabled = false;
-    if (_socketSubscription == null) {
+    if (subscription == null) {
       // If a current subscription is provided use this otherwise
       // create a new one.
       _socketSubscription = _socket.listen(_eventDispatcher,
           onError: _reportError, onDone: _doneHandler);
     } else {
+      _socketSubscription = subscription;
       if (_socketSubscription.isPaused) {
         _socket.close();
         throw new ArgumentError("Subscription passed to TLS upgrade is paused");
@@ -565,10 +556,10 @@
     try {
       var encodedProtocols =
           SecurityContext._protocolsToLengthEncoding(supportedProtocols);
-      _secureFilter.connect(
+      secureFilter.connect(
           address.host,
           context,
-          is_server,
+          isServer,
           requestClientCertificate || requireClientCertificate,
           requireClientCertificate,
           encodedProtocols);
@@ -578,27 +569,24 @@
     }
   }
 
-  StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent data),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent data)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     _sendWriteEvent();
-    return _stream.listen(onData,
+    return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
 
-  static void _verifyFields(
-      host,
-      int requestedPort,
-      bool is_server,
-      bool requestClientCertificate,
-      bool requireClientCertificate,
-      Function onBadCertificate) {
+  static void _verifyFields(host, int requestedPort,
+      bool requestClientCertificate, bool requireClientCertificate) {
     if (host is! String && host is! InternetAddress) {
       throw new ArgumentError("host is not a String or an InternetAddress");
     }
+    // TODO: Remove once non-nullability is sound.
     ArgumentError.checkNotNull(requestedPort, "requestedPort");
     if (requestedPort < 0 || requestedPort > 65535) {
       throw ArgumentError("requestedPort is not in the range 0..65535");
     }
+    // TODO: Remove once non-nullability is sound.
     ArgumentError.checkNotNull(
         requestClientCertificate, "requestClientCertificate");
     ArgumentError.checkNotNull(
@@ -618,7 +606,7 @@
   int available() {
     return _status != connectedStatus
         ? 0
-        : _secureFilter.buffers[readPlaintextId].length;
+        : _secureFilter!.buffers![readPlaintextId].length;
   }
 
   Future<RawSecureSocket> close() {
@@ -626,22 +614,18 @@
     return _closeCompleter.future;
   }
 
-  void _completeCloseCompleter([RawSocket dummy]) {
+  void _completeCloseCompleter([RawSocket? dummy]) {
     if (!_closeCompleter.isCompleted) _closeCompleter.complete(this);
   }
 
   void _close() {
     _closedWrite = true;
     _closedRead = true;
-    if (_socket != null) {
-      _socket.close().then(_completeCloseCompleter);
-    } else {
-      _completeCloseCompleter();
-    }
+    _socket.close().then(_completeCloseCompleter);
     _socketClosedWrite = true;
     _socketClosedRead = true;
     if (!_filterActive && _secureFilter != null) {
-      _secureFilter.destroy();
+      _secureFilter!.destroy();
       _secureFilter = null;
     }
     if (_socketSubscription != null) {
@@ -690,8 +674,8 @@
     _scheduleReadEvent();
   }
 
-  Uint8List read([int length]) {
-    if (length != null && (length is! int || length < 0)) {
+  Uint8List? read([int? length]) {
+    if (length != null && length < 0) {
       throw new ArgumentError(
           "Invalid length parameter in SecureSocket.read (length: $length)");
     }
@@ -701,18 +685,22 @@
     if (_status != connectedStatus) {
       return null;
     }
-    var result = _secureFilter.buffers[readPlaintextId].read(length);
+    var result = _secureFilter!.buffers![readPlaintextId].read(length);
     _scheduleFilter();
     return result;
   }
 
+  static int _fixOffset(int? offset) => offset ?? 0;
+
   // Write the data to the socket, and schedule the filter to encrypt it.
-  int write(List<int> data, [int offset, int bytes]) {
-    if (bytes != null && (bytes is! int || bytes < 0)) {
+  int write(List<int> data, [int offset = 0, int? bytes]) {
+    if (bytes != null && bytes < 0) {
       throw new ArgumentError(
           "Invalid bytes parameter in SecureSocket.read (bytes: $bytes)");
     }
-    if (offset != null && (offset is! int || offset < 0)) {
+    // TODO: Remove once non-nullability is sound.
+    offset = _fixOffset(offset);
+    if (offset < 0) {
       throw new ArgumentError(
           "Invalid offset parameter in SecureSocket.read (offset: $offset)");
     }
@@ -725,7 +713,7 @@
     bytes ??= data.length - offset;
 
     int written =
-        _secureFilter.buffers[writePlaintextId].write(data, offset, bytes);
+        _secureFilter!.buffers![writePlaintextId].write(data, offset, bytes);
     if (written > 0) {
       _filterStatus.writeEmpty = false;
     }
@@ -733,29 +721,25 @@
     return written;
   }
 
-  X509Certificate get peerCertificate => _secureFilter.peerCertificate;
+  X509Certificate? get peerCertificate => _secureFilter!.peerCertificate;
 
-  String get selectedProtocol => _selectedProtocol;
+  String? get selectedProtocol => _selectedProtocol;
 
   bool _onBadCertificateWrapper(X509Certificate certificate) {
     if (onBadCertificate == null) return false;
-    var result = onBadCertificate(certificate);
-    if (result is bool) return result;
-    throw new HandshakeException(
-        "onBadCertificate callback returned non-boolean $result");
+    return onBadCertificate!(certificate);
   }
 
   bool setOption(SocketOption option, bool enabled) {
-    if (_socket == null) return false;
     return _socket.setOption(option, enabled);
   }
 
   Uint8List getRawOption(RawSocketOption option) {
-    return _socket?.getRawOption(option);
+    return _socket.getRawOption(option);
   }
 
   void setRawOption(RawSocketOption option) {
-    _socket?.setRawOption(option);
+    _socket.setRawOption(option);
   }
 
   void _eventDispatcher(RawSocketEvent event) {
@@ -788,7 +772,7 @@
     }
   }
 
-  void _reportError(e, [StackTrace stackTrace]) {
+  void _reportError(e, [StackTrace? stackTrace]) {
     if (_status == closedStatus) {
       return;
     } else if (_connectPending) {
@@ -829,7 +813,7 @@
 
   void _secureHandshake() {
     try {
-      _secureFilter.handshake();
+      _secureFilter!.handshake();
       _filterStatus.writeEmpty = false;
       _readSocket();
       _writeSocket();
@@ -847,7 +831,7 @@
       throw new HandshakeException(
           "Called renegotiate on a non-connected socket");
     }
-    _secureFilter.renegotiate(
+    _secureFilter!.renegotiate(
         useSessionCache, requestClientCertificate, requireClientCertificate);
     _status = handshakeStatus;
     _filterStatus.writeEmpty = false;
@@ -859,7 +843,7 @@
     if (_connectPending) {
       _connectPending = false;
       try {
-        _selectedProtocol = _secureFilter.selectedProtocol();
+        _selectedProtocol = _secureFilter!.selectedProtocol();
         // We don't want user code to run synchronously in this callback.
         Timer.run(() => _handshakeComplete.complete(this));
       } catch (error, stack) {
@@ -910,7 +894,7 @@
         _filterStatus = status;
         _filterActive = false;
         if (_status == closedStatus) {
-          _secureFilter.destroy();
+          _secureFilter!.destroy();
           _secureFilter = null;
           return;
         }
@@ -924,7 +908,7 @@
         }
         if (_filterStatus.readEmpty && _socketClosedRead && !_closedRead) {
           if (_status == handshakeStatus) {
-            _secureFilter.handshake();
+            _secureFilter!.handshake();
             if (_status == handshakeStatus) {
               throw new HandshakeException(
                   'Connection terminated during handshake');
@@ -958,15 +942,16 @@
     }
   }
 
-  List<int> _readSocketOrBufferedData(int bytes) {
-    if (_bufferedData != null) {
-      if (bytes > _bufferedData.length - _bufferedDataIndex) {
-        bytes = _bufferedData.length - _bufferedDataIndex;
+  List<int>? _readSocketOrBufferedData(int bytes) {
+    final bufferedData = _bufferedData;
+    if (bufferedData != null) {
+      if (bytes > bufferedData.length - _bufferedDataIndex) {
+        bytes = bufferedData.length - _bufferedDataIndex;
       }
       var result =
-          _bufferedData.sublist(_bufferedDataIndex, _bufferedDataIndex + bytes);
+          bufferedData.sublist(_bufferedDataIndex, _bufferedDataIndex + bytes);
       _bufferedDataIndex += bytes;
-      if (_bufferedData.length == _bufferedDataIndex) {
+      if (bufferedData.length == _bufferedDataIndex) {
         _bufferedData = null;
       }
       return result;
@@ -979,7 +964,7 @@
 
   void _readSocket() {
     if (_status == closedStatus) return;
-    var buffer = _secureFilter.buffers[readEncryptedId];
+    var buffer = _secureFilter!.buffers![readEncryptedId];
     if (buffer.writeFromSource(_readSocketOrBufferedData) > 0) {
       _filterStatus.readEmpty = false;
     } else {
@@ -989,7 +974,7 @@
 
   void _writeSocket() {
     if (_socketClosedWrite) return;
-    var buffer = _secureFilter.buffers[writeEncryptedId];
+    var buffer = _secureFilter!.buffers![writeEncryptedId];
     if (buffer.readToSocket(_socket)) {
       // Returns true if blocked
       _socket.writeEventsEnabled = true;
@@ -1002,7 +987,7 @@
         _readEventsEnabled &&
         _pauseCount == 0 &&
         _secureFilter != null &&
-        !_secureFilter.buffers[readPlaintextId].isEmpty) {
+        !_secureFilter!.buffers![readPlaintextId].isEmpty) {
       _pendingReadEvent = true;
       Timer.run(_sendReadEvent);
     }
@@ -1014,7 +999,7 @@
         _readEventsEnabled &&
         _pauseCount == 0 &&
         _secureFilter != null &&
-        !_secureFilter.buffers[readPlaintextId].isEmpty) {
+        !_secureFilter!.buffers![readPlaintextId].isEmpty) {
       _controller.add(RawSocketEvent.read);
       _scheduleReadEvent();
     }
@@ -1026,7 +1011,7 @@
         _writeEventsEnabled &&
         _pauseCount == 0 &&
         _secureFilter != null &&
-        _secureFilter.buffers[writePlaintextId].free > 0) {
+        _secureFilter!.buffers![writePlaintextId].free > 0) {
       _writeEventsEnabled = false;
       _controller.add(RawSocketEvent.write);
     }
@@ -1035,9 +1020,9 @@
   Future<_FilterStatus> _pushAllFilterStages() {
     bool wasInHandshake = _status != connectedStatus;
     List args = new List.filled(2 + bufferCount * 2, null);
-    args[0] = _secureFilter._pointer();
+    args[0] = _secureFilter!._pointer();
     args[1] = wasInHandshake;
-    var bufs = _secureFilter.buffers;
+    var bufs = _secureFilter!.buffers!;
     for (var i = 0; i < bufferCount; ++i) {
       args[2 * i + 2] = bufs[i].start;
       args[2 * i + 3] = bufs[i].end;
@@ -1123,7 +1108,7 @@
 class _ExternalBuffer {
   // This will be an ExternalByteArray, backed by C allocated data.
   @pragma("vm:entry-point", "set")
-  List<int> data;
+  List<int>? data;
 
   @pragma("vm:entry-point")
   int start;
@@ -1131,11 +1116,12 @@
   @pragma("vm:entry-point")
   int end;
 
-  final size;
+  final int size;
 
-  _ExternalBuffer(this.size) {
-    start = end = size ~/ 2;
-  }
+  _ExternalBuffer(int size)
+      : size = size,
+        start = size ~/ 2,
+        end = size ~/ 2;
 
   void advanceStart(int bytes) {
     assert(start > end || start + bytes <= end);
@@ -1171,7 +1157,7 @@
     return size - end;
   }
 
-  Uint8List read(int bytes) {
+  Uint8List? read(int? bytes) {
     if (bytes == null) {
       bytes = length;
     } else {
@@ -1183,7 +1169,7 @@
     // Loop over zero, one, or two linear data ranges.
     while (bytesRead < bytes) {
       int toRead = min(bytes - bytesRead, linearLength);
-      result.setRange(bytesRead, bytesRead + toRead, data, start);
+      result.setRange(bytesRead, bytesRead + toRead, data!, start);
       advanceStart(toRead);
       bytesRead += toRead;
     }
@@ -1198,7 +1184,7 @@
     int toWrite = min(bytes, linearFree);
     // Loop over zero, one, or two linear data ranges.
     while (toWrite > 0) {
-      data.setRange(end, end + toWrite, inputData, offset);
+      data!.setRange(end, end + toWrite, inputData, offset);
       advanceEnd(toWrite);
       offset += toWrite;
       written += toWrite;
@@ -1207,7 +1193,7 @@
     return written;
   }
 
-  int writeFromSource(List<int> getData(int requested)) {
+  int writeFromSource(List<int>? getData(int requested)) {
     int written = 0;
     int toWrite = linearFree;
     // Loop over zero, one, or two linear data ranges.
@@ -1216,7 +1202,7 @@
       var inputData = getData(toWrite);
       if (inputData == null || inputData.length == 0) break;
       var len = inputData.length;
-      data.setRange(end, end + len, inputData);
+      data!.setRange(end, end + len, inputData);
       advanceEnd(len);
       written += len;
       toWrite = linearFree;
@@ -1229,7 +1215,7 @@
     while (true) {
       var toWrite = linearLength;
       if (toWrite == 0) return false;
-      int bytes = socket.write(data, start, toWrite);
+      int bytes = socket.write(data!, start, toWrite);
       advanceStart(bytes);
       if (bytes < toWrite) {
         // The socket has blocked while we have data to write.
@@ -1245,7 +1231,7 @@
   void connect(
       String hostName,
       SecurityContext context,
-      bool is_server,
+      bool isServer,
       bool requestClientCertificate,
       bool requireClientCertificate,
       Uint8List protocols);
@@ -1256,7 +1242,7 @@
   void renegotiate(bool useSessionCache, bool requestClientCertificate,
       bool requireClientCertificate);
   void init();
-  X509Certificate get peerCertificate;
+  X509Certificate? get peerCertificate;
   int processBuffer(int bufferIndex);
   void registerBadCertificateCallback(Function callback);
   void registerHandshakeCompleteCallback(Function handshakeCompleteHandler);
@@ -1266,7 +1252,7 @@
   // value is passed to the IO service through a call to dispatch().
   int _pointer();
 
-  List<_ExternalBuffer> get buffers;
+  List<_ExternalBuffer>? get buffers;
 }
 
 /** A secure networking exception caused by a failure in the
@@ -1275,10 +1261,10 @@
 class TlsException implements IOException {
   final String type;
   final String message;
-  final OSError osError;
+  final OSError? osError;
 
   @pragma("vm:entry-point")
-  const TlsException([String message = "", OSError osError])
+  const TlsException([String message = "", OSError? osError])
       : this._("TlsException", message, osError);
 
   const TlsException._(this.type, this.message, this.osError);
@@ -1305,7 +1291,7 @@
 @pragma("vm:entry-point")
 class HandshakeException extends TlsException {
   @pragma("vm:entry-point")
-  const HandshakeException([String message = "", OSError osError])
+  const HandshakeException([String message = "", OSError? osError])
       : super._("HandshakeException", message, osError);
 }
 
@@ -1316,6 +1302,6 @@
  */
 class CertificateException extends TlsException {
   @pragma("vm:entry-point")
-  const CertificateException([String message = "", OSError osError])
+  const CertificateException([String message = "", OSError? osError])
       : super._("CertificateException", message, osError);
 }
diff --git a/sdk_nnbd/lib/io/security_context.dart b/sdk_nnbd/lib/io/security_context.dart
index 78a4569..e4fd5c6 100644
--- a/sdk_nnbd/lib/io/security_context.dart
+++ b/sdk_nnbd/lib/io/security_context.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -69,7 +67,7 @@
    * data is used instead of two calls to [useCertificateChain] and
    * [usePrivateKey].
    */
-  void usePrivateKey(String file, {String password});
+  void usePrivateKey(String file, {String? password});
 
   /**
    * Sets the private key for a server certificate or client certificate.
@@ -77,7 +75,7 @@
    * Like [usePrivateKey], but takes the contents of the file as a list
    * of bytes.
    */
-  void usePrivateKeyBytes(List<int> keyBytes, {String password});
+  void usePrivateKeyBytes(List<int> keyBytes, {String? password});
 
   /**
    * Sets the set of trusted X509 certificates used by [SecureSocket]
@@ -99,7 +97,7 @@
    *
    *   $ openssl x509 -outform der -in cert.pem -out cert.der
    */
-  void setTrustedCertificates(String file, {String password});
+  void setTrustedCertificates(String file, {String? password});
 
   /**
    * Sets the set of trusted X509 certificates used by [SecureSocket]
@@ -107,7 +105,7 @@
    *
    * Like [setTrustedCertificates] but takes the contents of the file.
    */
-  void setTrustedCertificatesBytes(List<int> certBytes, {String password});
+  void setTrustedCertificatesBytes(List<int> certBytes, {String? password});
 
   /**
    * Sets the chain of X509 certificates served by [SecureServerSocket]
@@ -127,7 +125,7 @@
    * iOS note: As noted above, [usePrivateKey] does the job of both
    * that call and this one. On iOS, this call is a no-op.
    */
-  void useCertificateChain(String file, {String password});
+  void useCertificateChain(String file, {String? password});
 
   /**
    * Sets the chain of X509 certificates served by [SecureServerSocket]
@@ -135,7 +133,7 @@
    *
    * Like [useCertificateChain] but takes the contents of the file.
    */
-  void useCertificateChainBytes(List<int> chainBytes, {String password});
+  void useCertificateChainBytes(List<int> chainBytes, {String? password});
 
   /**
    * Sets the list of authority names that a [SecureServerSocket] will advertise
@@ -153,7 +151,7 @@
    *
    * iOS note: This call is not supported.
    */
-  void setClientAuthorities(String file, {String password});
+  void setClientAuthorities(String file, {String? password});
 
   /**
    * Sets the list of authority names that a [SecureServerSocket] will advertise
@@ -162,7 +160,7 @@
    *
    * Like [setClientAuthorities] but takes the contents of the file.
    */
-  void setClientAuthoritiesBytes(List<int> authCertBytes, {String password});
+  void setClientAuthoritiesBytes(List<int> authCertBytes, {String? password});
 
   /**
    * Whether the platform supports ALPN. This always returns true and will be
@@ -205,7 +203,7 @@
   /// `ProtocolNameList` length of 65535, this limit cannot be reached. Testing
   /// showed that more than ~ 2^14  bytes will fail to negotiate a protocol.
   /// We will be conservative and support only messages up to (1<<13)-1 bytes.
-  static Uint8List _protocolsToLengthEncoding(List<String> protocols) {
+  static Uint8List _protocolsToLengthEncoding(List<String>? protocols) {
     if (protocols == null || protocols.length == 0) {
       return new Uint8List(0);
     }
diff --git a/sdk_nnbd/lib/io/service_object.dart b/sdk_nnbd/lib/io/service_object.dart
index 54db0ea..e6b1851 100644
--- a/sdk_nnbd/lib/io/service_object.dart
+++ b/sdk_nnbd/lib/io/service_object.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 int _nextServiceId = 1;
diff --git a/sdk_nnbd/lib/io/socket.dart b/sdk_nnbd/lib/io/socket.dart
index 1ee61a8..dc92d8b 100644
--- a/sdk_nnbd/lib/io/socket.dart
+++ b/sdk_nnbd/lib/io/socket.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -331,7 +329,7 @@
    */
   static Future<ServerSocket> bind(address, int port,
       {int backlog: 0, bool v6Only: false, bool shared: false}) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return ServerSocket._bind(address, port,
           backlog: backlog, v6Only: v6Only, shared: shared);
@@ -429,8 +427,6 @@
 class RawSocketOption {
   /// Creates a RawSocketOption for getRawOption andSetRawOption.
   ///
-  /// All arguments are required and must not be null.
-  ///
   /// The level and option arguments correspond to level and optname arguments
   /// on the get/setsockopt native calls.
   ///
@@ -446,9 +442,6 @@
 
   /// Convenience constructor for creating an int based RawSocketOption.
   factory RawSocketOption.fromInt(int level, int option, int value) {
-    if (value == null) {
-      value = 0;
-    }
     final Uint8List list = Uint8List(4);
     final buffer = ByteData.view(list.buffer, list.offsetInBytes);
     buffer.setInt32(0, value, Endian.host);
@@ -457,7 +450,7 @@
 
   /// Convenience constructor for creating a bool based RawSocketOption.
   factory RawSocketOption.fromBool(int level, int option, bool value) =>
-      RawSocketOption.fromInt(level, option, value == true ? 1 : 0);
+      RawSocketOption.fromInt(level, option, value ? 1 : 0);
 
   /// The level for the option to set or get.
   ///
@@ -553,11 +546,8 @@
   final Future<S> socket;
   final void Function() _onCancel;
 
-  ConnectionTask._({Future<S> socket, void Function() onCancel})
-      : assert(socket != null),
-        assert(onCancel != null),
-        this.socket = socket,
-        this._onCancel = onCancel;
+  ConnectionTask._(Future<S> this.socket, void Function() onCancel)
+      : _onCancel = onCancel;
 
   /// Cancels the connection attempt.
   ///
@@ -582,7 +572,8 @@
    * Set or get, if the [RawSocket] should listen for [RawSocketEvent.read]
    * events. Default is [:true:].
    */
-  bool readEventsEnabled;
+  bool get readEventsEnabled;
+  void set readEventsEnabled(bool value);
 
   /**
    * Set or get, if the [RawSocket] should listen for [RawSocketEvent.write]
@@ -590,7 +581,8 @@
    * This is a one-shot listener, and writeEventsEnabled must be set
    * to true again to receive another write event.
    */
-  bool writeEventsEnabled;
+  bool get writeEventsEnabled;
+  void set writeEventsEnabled(bool value);
 
   /**
    * Creates a new socket connection to the host and port and returns a [Future]
@@ -615,7 +607,7 @@
    * connection attempts to [host] are cancelled.
    */
   external static Future<RawSocket> connect(host, int port,
-      {sourceAddress, Duration timeout});
+      {sourceAddress, Duration? timeout});
 
   /// Like [connect], but returns a [Future] that completes with a
   /// [ConnectionTask] that can be cancelled if the [RawSocket] is no
@@ -636,7 +628,7 @@
    * available for immediate reading. If no data is available [:null:]
    * is returned.
    */
-  Uint8List read([int len]);
+  Uint8List? read([int? len]);
 
   /**
    * Writes up to [count] bytes of the buffer from [offset] buffer offset to
@@ -647,25 +639,33 @@
    * The default value for [offset] is 0, and the default value for [count] is
    * [:buffer.length - offset:].
    */
-  int write(List<int> buffer, [int offset, int count]);
+  int write(List<int> buffer, [int offset = 0, int? count]);
 
   /**
    * Returns the port used by this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   int get port;
 
   /**
    * Returns the remote port connected to by this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   int get remotePort;
 
   /**
    * Returns the [InternetAddress] used to connect this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   InternetAddress get address;
 
   /**
    * Returns the remote [InternetAddress] connected to by this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   InternetAddress get remoteAddress;
 
@@ -746,8 +746,8 @@
    * connection attempts to [host] are cancelled.
    */
   static Future<Socket> connect(host, int port,
-      {sourceAddress, Duration timeout}) {
-    final IOOverrides overrides = IOOverrides.current;
+      {sourceAddress, Duration? timeout}) {
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return Socket._connect(host, port,
           sourceAddress: sourceAddress, timeout: timeout);
@@ -761,7 +761,7 @@
   /// longer needed.
   static Future<ConnectionTask<Socket>> startConnect(host, int port,
       {sourceAddress}) {
-    final IOOverrides overrides = IOOverrides.current;
+    final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
       return Socket._startConnect(host, port, sourceAddress: sourceAddress);
     }
@@ -770,7 +770,7 @@
   }
 
   external static Future<Socket> _connect(host, int port,
-      {sourceAddress, Duration timeout});
+      {sourceAddress, Duration? timeout});
 
   external static Future<ConnectionTask<Socket>> _startConnect(host, int port,
       {sourceAddress});
@@ -790,6 +790,9 @@
    * available options.
    *
    * Returns [:true:] if the option was set successfully, false otherwise.
+   *
+   * Throws a [SocketException] if the socket has been destroyed or upgraded to
+   * a secure socket.
    */
   bool setOption(SocketOption option, bool enabled);
 
@@ -799,7 +802,8 @@
    *
    * Returns the [RawSocketOption.value] on success.
    *
-   * Throws an [OSError] on failure.
+   * Throws an [OSError] on failure and a [SocketException] if the socket has
+   * been destroyed or upgraded to a secure socket.
    */
   Uint8List getRawOption(RawSocketOption option);
 
@@ -807,27 +811,36 @@
    * Use [setRawOption] to customize the [RawSocket]. See [RawSocketOption] for
    * available options.
    *
-   * Throws an [OSError] on failure.
+   * Throws an [OSError] on failure and a [SocketException] if the socket has
+   * been destroyed or upgraded to a secure socket.
    */
   void setRawOption(RawSocketOption option);
 
   /**
    * Returns the port used by this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   int get port;
 
   /**
    * Returns the remote port connected to by this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   int get remotePort;
 
   /**
    * Returns the [InternetAddress] used to connect this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   InternetAddress get address;
 
   /**
    * Returns the remote [InternetAddress] connected to by this socket.
+   *
+   * Throws a [SocketException] if the socket is closed.
    */
   InternetAddress get remoteAddress;
 
@@ -866,7 +879,8 @@
    * Set or get, if the [RawDatagramSocket] should listen for
    * [RawSocketEvent.read] events. Default is [:true:].
    */
-  bool readEventsEnabled;
+  bool get readEventsEnabled;
+  void set readEventsEnabled(bool value);
 
   /**
    * Set or get, if the [RawDatagramSocket] should listen for
@@ -874,14 +888,16 @@
    * one-shot listener, and writeEventsEnabled must be set to true
    * again to receive another write event.
    */
-  bool writeEventsEnabled;
+  bool get writeEventsEnabled;
+  void set writeEventsEnabled(bool value);
 
   /**
    * Set or get, whether multicast traffic is looped back to the host.
    *
    * By default multicast loopback is enabled.
    */
-  bool multicastLoopback;
+  bool get multicastLoopback;
+  void set multicastLoopback(bool value);
 
   /**
    * Set or get, the maximum network hops for multicast packages
@@ -892,7 +908,8 @@
    * By default this value is 1 causing multicast traffic to stay on
    * the local network.
    */
-  int multicastHops;
+  int get multicastHops;
+  void set multicastHops(int value);
 
   /**
    * Set or get, the network interface used for outgoing multicast packages.
@@ -904,7 +921,7 @@
    */
   @Deprecated("This property is not implemented. Use getRawOption and "
       "setRawOption instead.")
-  NetworkInterface multicastInterface;
+  NetworkInterface? multicastInterface;
 
   /**
    * Set or get, whether IPv4 broadcast is enabled.
@@ -915,7 +932,8 @@
    * For IPv6 there is no general broadcast mechanism. Use multicast
    * instead.
    */
-  bool broadcastEnabled;
+  bool get broadcastEnabled;
+  void set broadcastEnabled(bool value);
 
   /**
    * Creates a new raw datagram socket binding it to an address and
@@ -953,7 +971,7 @@
    *
    * The maximum length of the datagram that can be received is 65503 bytes.
    */
-  Datagram receive();
+  Datagram? receive();
 
   /**
    * Join a multicast group.
@@ -961,7 +979,7 @@
    * If an error occur when trying to join the multicast group an
    * exception is thrown.
    */
-  void joinMulticast(InternetAddress group, [NetworkInterface interface]);
+  void joinMulticast(InternetAddress group, [NetworkInterface? interface]);
 
   /**
    * Leave a multicast group.
@@ -969,7 +987,7 @@
    * If an error occur when trying to join the multicase group an
    * exception is thrown.
    */
-  void leaveMulticast(InternetAddress group, [NetworkInterface interface]);
+  void leaveMulticast(InternetAddress group, [NetworkInterface? interface]);
 
   /**
    * Use [getRawOption] to get low level information about the [RawSocket]. See
@@ -992,9 +1010,9 @@
 
 class SocketException implements IOException {
   final String message;
-  final OSError osError;
-  final InternetAddress address;
-  final int port;
+  final OSError? osError;
+  final InternetAddress? address;
+  final int? port;
 
   const SocketException(this.message, {this.osError, this.address, this.port});
   const SocketException.closed()
@@ -1015,7 +1033,7 @@
       sb.write(": $osError");
     }
     if (address != null) {
-      sb.write(", address = ${address.host}");
+      sb.write(", address = ${address!.host}");
     }
     if (port != null) {
       sb.write(", port = $port");
diff --git a/sdk_nnbd/lib/io/stdio.dart b/sdk_nnbd/lib/io/stdio.dart
index c1aacba..a0034c6 100644
--- a/sdk_nnbd/lib/io/stdio.dart
+++ b/sdk_nnbd/lib/io/stdio.dart
@@ -2,23 +2,23 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
+// These match enum StdioHandleType in file.h
 const int _stdioHandleTypeTerminal = 0;
 const int _stdioHandleTypePipe = 1;
 const int _stdioHandleTypeFile = 2;
 const int _stdioHandleTypeSocket = 3;
 const int _stdioHandleTypeOther = 4;
+const int _stdioHandleTypeError = 5;
 
 class _StdStream extends Stream<List<int>> {
   final Stream<List<int>> _stream;
 
   _StdStream(this._stream);
 
-  StreamSubscription<List<int>> listen(void onData(List<int> event),
-      {Function onError, void onDone(), bool cancelOnError}) {
+  StreamSubscription<List<int>> listen(void onData(List<int> event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
     return _stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -55,7 +55,7 @@
    * that data is returned without a line terminator.
    * Returns `null` if no bytes preceded the end of input.
    */
-  String readLineSync(
+  String? readLineSync(
       {Encoding encoding: systemEncoding, bool retainNewlines: false}) {
     const CR = 13;
     const LF = 10;
@@ -212,7 +212,7 @@
  */
 class Stdout extends _StdSink implements IOSink {
   final int _fd;
-  IOSink _nonBlocking;
+  IOSink? _nonBlocking;
 
   Stdout._(IOSink sink, this._fd) : super(sink);
 
@@ -270,14 +270,13 @@
    * Get a non-blocking `IOSink`.
    */
   IOSink get nonBlocking {
-    _nonBlocking ??= new IOSink(new _FileStreamConsumer.fromStdio(_fd));
-    return _nonBlocking;
+    return _nonBlocking ??= new IOSink(new _FileStreamConsumer.fromStdio(_fd));
   }
 }
 
 class StdoutException implements IOException {
   final String message;
-  final OSError osError;
+  final OSError? osError;
 
   const StdoutException(this.message, [this.osError]);
 
@@ -288,7 +287,7 @@
 
 class StdinException implements IOException {
   final String message;
-  final OSError osError;
+  final OSError? osError;
 
   const StdinException(this.message, [this.osError]);
 
@@ -335,15 +334,15 @@
     _sink.encoding = encoding;
   }
 
-  void write(object) {
+  void write(Object? object) {
     _sink.write(object);
   }
 
-  void writeln([object = ""]) {
+  void writeln([Object? object = ""]) {
     _sink.writeln(object);
   }
 
-  void writeAll(objects, [sep = ""]) {
+  void writeAll(Iterable objects, [String sep = ""]) {
     _sink.writeAll(objects, sep);
   }
 
@@ -351,7 +350,7 @@
     _sink.add(data);
   }
 
-  void addError(error, [StackTrace stackTrace]) {
+  void addError(error, [StackTrace? stackTrace]) {
     _sink.addError(error, stackTrace);
   }
 
@@ -386,9 +385,9 @@
   String toString() => "StdioType: $name";
 }
 
-Stdin _stdin;
-Stdout _stdout;
-Stdout _stderr;
+Stdin? _stdin;
+Stdout? _stdout;
+Stdout? _stderr;
 
 // These may be set to different values by the embedder by calling
 // _setStdioFDs when initializing dart:io.
@@ -405,8 +404,7 @@
 
 /// The standard input stream of data read by this program.
 Stdin get stdin {
-  _stdin ??= _StdIOUtils._getStdioInputStream(_stdinFD);
-  return _stdin;
+  return _stdin ??= _StdIOUtils._getStdioInputStream(_stdinFD);
 }
 
 /// The standard output stream of data written by this program.
@@ -415,8 +413,7 @@
 /// result in an unhandled asynchronous error unless there is an error handler
 /// on `done`.
 Stdout get stdout {
-  _stdout ??= _StdIOUtils._getStdioOutputStream(_stdoutFD);
-  return _stdout;
+  return _stdout ??= _StdIOUtils._getStdioOutputStream(_stdoutFD);
 }
 
 /// The standard output stream of errors written by this program.
@@ -425,8 +422,7 @@
 /// result in an unhandled asynchronous error unless there is an error handler
 /// on `done`.
 Stdout get stderr {
-  _stderr ??= _StdIOUtils._getStdioOutputStream(_stderrFD);
-  return _stderr;
+  return _stderr ??= _StdIOUtils._getStdioOutputStream(_stderrFD);
 }
 
 /// For a stream, returns whether it is attached to a file, pipe, terminal, or
@@ -436,7 +432,12 @@
     object = object._stream;
   } else if (object == stdout || object == stderr) {
     int stdiofd = object == stdout ? _stdoutFD : _stderrFD;
-    switch (_StdIOUtils._getStdioHandleType(stdiofd)) {
+    final type = _StdIOUtils._getStdioHandleType(stdiofd);
+    if (type is OSError) {
+      throw FileSystemException(
+          "Failed to get type of stdio handle (fd $stdiofd)", "", type);
+    }
+    switch (type) {
       case _stdioHandleTypeTerminal:
         return StdioType.terminal;
       case _stdioHandleTypePipe:
@@ -449,7 +450,7 @@
     return StdioType.file;
   }
   if (object is Socket) {
-    int socketType = _StdIOUtils._socketType(object);
+    int? socketType = _StdIOUtils._socketType(object);
     if (socketType == null) return StdioType.other;
     switch (socketType) {
       case _stdioHandleTypeTerminal:
@@ -477,6 +478,6 @@
   external static Stdin _getStdioInputStream(int fd);
 
   /// Returns the socket type or `null` if [socket] is not a builtin socket.
-  external static int _socketType(Socket socket);
+  external static int? _socketType(Socket socket);
   external static _getStdioHandleType(int fd);
 }
diff --git a/sdk_nnbd/lib/io/string_transformer.dart b/sdk_nnbd/lib/io/string_transformer.dart
index e8548d1..f31c41e 100644
--- a/sdk_nnbd/lib/io/string_transformer.dart
+++ b/sdk_nnbd/lib/io/string_transformer.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /// The current system encoding.
diff --git a/sdk_nnbd/lib/io/sync_socket.dart b/sdk_nnbd/lib/io/sync_socket.dart
index 0b7d5b1..771edfd 100644
--- a/sdk_nnbd/lib/io/sync_socket.dart
+++ b/sdk_nnbd/lib/io/sync_socket.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.5
-
 part of dart.io;
 
 /**
@@ -54,7 +52,7 @@
    * otherwise up to [buffer.length]. If [end] == [start], no bytes are read.
    * Returns the number of bytes read.
    */
-  int readIntoSync(List<int> buffer, [int start = 0, int end]);
+  int readIntoSync(List<int> buffer, [int start = 0, int? end]);
 
   /**
    * Reads up to [bytes] bytes from the socket.
@@ -64,7 +62,7 @@
    * be read. Returns the list of bytes read, which could be less than the
    * value specified by [bytes].
    */
-  List<int> readSync(int bytes);
+  List<int>? readSync(int bytes);
 
   /**
    * Shutdown a socket in the provided direction.
@@ -87,7 +85,7 @@
    * be written to the socket starting from index [start]. If [end] == [start],
    * nothing happens.
    */
-  void writeFromSync(List<int> buffer, [int start = 0, int end]);
+  void writeFromSync(List<int> buffer, [int start = 0, int? end]);
 
   /**
    * The port used by this socket.
diff --git a/sdk_nnbd/lib/svg/dart2js/svg_dart2js.dart b/sdk_nnbd/lib/svg/dart2js/svg_dart2js.dart
index f81c43a..4393f4b 100644
--- a/sdk_nnbd/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk_nnbd/lib/svg/dart2js/svg_dart2js.dart
@@ -1,4 +1,3 @@
-// @dart = 2.5
 /**
  * Scalable Vector Graphics:
  * Two-dimensional vector graphics with support for events and animation.
@@ -46,7 +45,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AElement() => _SvgElementFactoryProvider.createSvgElement_tag("a");
+  factory AElement() =>
+      _SvgElementFactoryProvider.createSvgElement_tag("a") as AElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -54,11 +54,11 @@
    */
   AElement.created() : super.created();
 
-  final AnimatedString target;
+  AnimatedString get target => JS("AnimatedString", "#.target", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -82,13 +82,25 @@
 
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
-  final int unitType;
+  int get unitType => JS("int", "#.unitType", this);
 
-  num value;
+  num get value => JS("num", "#.value", this);
 
-  String valueAsString;
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 
-  num valueInSpecifiedUnits;
+  String get valueAsString => JS("String", "#.valueAsString", this);
+
+  set valueAsString(String value) {
+    JS("void", "#.valueAsString = #", this, value);
+  }
+
+  num get valueInSpecifiedUnits => JS("num", "#.valueInSpecifiedUnits", this);
+
+  set valueInSpecifiedUnits(num value) {
+    JS("void", "#.valueInSpecifiedUnits = #", this, value);
+  }
 
   void convertToSpecifiedUnits(int unitType) native;
 
@@ -110,7 +122,8 @@
   }
 
   factory AnimateElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("animate");
+      _SvgElementFactoryProvider.createSvgElement_tag("animate")
+          as AnimateElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -139,7 +152,8 @@
   }
 
   factory AnimateMotionElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("animateMotion");
+      _SvgElementFactoryProvider.createSvgElement_tag("animateMotion")
+          as AnimateMotionElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -168,7 +182,8 @@
   }
 
   factory AnimateTransformElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("animateTransform");
+      _SvgElementFactoryProvider.createSvgElement_tag("animateTransform")
+          as AnimateTransformElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -193,9 +208,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Angle animVal;
+  Angle get animVal => JS("Angle", "#.animVal", this);
 
-  final Angle baseVal;
+  Angle get baseVal => JS("Angle", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -209,9 +224,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool animVal;
+  bool get animVal => JS("bool", "#.animVal", this);
 
-  bool baseVal;
+  bool get baseVal => JS("bool", "#.baseVal", this);
+
+  set baseVal(bool value) {
+    JS("void", "#.baseVal = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -225,9 +244,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int animVal;
+  int get animVal => JS("int", "#.animVal", this);
 
-  int baseVal;
+  int get baseVal => JS("int", "#.baseVal", this);
+
+  set baseVal(int value) {
+    JS("void", "#.baseVal = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -241,9 +264,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int animVal;
+  int get animVal => JS("int", "#.animVal", this);
 
-  int baseVal;
+  int get baseVal => JS("int", "#.baseVal", this);
+
+  set baseVal(int value) {
+    JS("void", "#.baseVal = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -257,9 +284,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Length animVal;
+  Length get animVal => JS("Length", "#.animVal", this);
 
-  final Length baseVal;
+  Length get baseVal => JS("Length", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -273,9 +300,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final LengthList animVal;
+  LengthList get animVal => JS("LengthList", "#.animVal", this);
 
-  final LengthList baseVal;
+  LengthList get baseVal => JS("LengthList", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -289,9 +316,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num animVal;
+  num get animVal => JS("num", "#.animVal", this);
 
-  num baseVal;
+  num get baseVal => JS("num", "#.baseVal", this);
+
+  set baseVal(num value) {
+    JS("void", "#.baseVal = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -305,9 +336,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final NumberList animVal;
+  NumberList get animVal => JS("NumberList", "#.animVal", this);
 
-  final NumberList baseVal;
+  NumberList get baseVal => JS("NumberList", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -321,9 +352,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final PreserveAspectRatio animVal;
+  PreserveAspectRatio get animVal =>
+      JS("PreserveAspectRatio", "#.animVal", this);
 
-  final PreserveAspectRatio baseVal;
+  PreserveAspectRatio get baseVal =>
+      JS("PreserveAspectRatio", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -337,9 +370,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Rect animVal;
+  Rect get animVal => JS("Rect", "#.animVal", this);
 
-  final Rect baseVal;
+  Rect get baseVal => JS("Rect", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -353,9 +386,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String animVal;
+  String get animVal => JS("String", "#.animVal", this);
 
-  String baseVal;
+  String get baseVal => JS("String", "#.baseVal", this);
+
+  set baseVal(String value) {
+    JS("void", "#.baseVal = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -369,9 +406,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final TransformList animVal;
+  TransformList get animVal => JS("TransformList", "#.animVal", this);
 
-  final TransformList baseVal;
+  TransformList get baseVal => JS("TransformList", "#.baseVal", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -386,7 +423,8 @@
   }
 
   factory AnimationElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("animation");
+      _SvgElementFactoryProvider.createSvgElement_tag("animation")
+          as AnimationElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -394,7 +432,7 @@
    */
   AnimationElement.created() : super.created();
 
-  final SvgElement targetElement;
+  SvgElement get targetElement => JS("SvgElement", "#.targetElement", this);
 
   void beginElement() native;
 
@@ -412,9 +450,10 @@
 
   // From SVGTests
 
-  final StringList requiredExtensions;
+  StringList get requiredExtensions =>
+      JS("StringList", "#.requiredExtensions", this);
 
-  final StringList systemLanguage;
+  StringList get systemLanguage => JS("StringList", "#.systemLanguage", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -429,7 +468,8 @@
   }
 
   factory CircleElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("circle");
+      _SvgElementFactoryProvider.createSvgElement_tag("circle")
+          as CircleElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -437,11 +477,11 @@
    */
   CircleElement.created() : super.created();
 
-  final AnimatedLength cx;
+  AnimatedLength get cx => JS("AnimatedLength", "#.cx", this);
 
-  final AnimatedLength cy;
+  AnimatedLength get cy => JS("AnimatedLength", "#.cy", this);
 
-  final AnimatedLength r;
+  AnimatedLength get r => JS("AnimatedLength", "#.r", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -456,7 +496,8 @@
   }
 
   factory ClipPathElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("clipPath");
+      _SvgElementFactoryProvider.createSvgElement_tag("clipPath")
+          as ClipPathElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -464,7 +505,8 @@
    */
   ClipPathElement.created() : super.created();
 
-  final AnimatedEnumeration clipPathUnits;
+  AnimatedEnumeration get clipPathUnits =>
+      JS("AnimatedEnumeration", "#.clipPathUnits", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -479,7 +521,7 @@
   }
 
   factory DefsElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("defs");
+      _SvgElementFactoryProvider.createSvgElement_tag("defs") as DefsElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -500,7 +542,7 @@
   }
 
   factory DescElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("desc");
+      _SvgElementFactoryProvider.createSvgElement_tag("desc") as DescElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -538,7 +580,8 @@
   }
 
   factory EllipseElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("ellipse");
+      _SvgElementFactoryProvider.createSvgElement_tag("ellipse")
+          as EllipseElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -546,13 +589,13 @@
    */
   EllipseElement.created() : super.created();
 
-  final AnimatedLength cx;
+  AnimatedLength get cx => JS("AnimatedLength", "#.cx", this);
 
-  final AnimatedLength cy;
+  AnimatedLength get cy => JS("AnimatedLength", "#.cy", this);
 
-  final AnimatedLength rx;
+  AnimatedLength get rx => JS("AnimatedLength", "#.rx", this);
 
-  final AnimatedLength ry;
+  AnimatedLength get ry => JS("AnimatedLength", "#.ry", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -572,7 +615,8 @@
   }
 
   factory FEBlendElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feBlend");
+      _SvgElementFactoryProvider.createSvgElement_tag("feBlend")
+          as FEBlendElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -597,23 +641,23 @@
 
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedString in2;
+  AnimatedString get in2 => JS("AnimatedString", "#.in2", this);
 
-  final AnimatedEnumeration mode;
+  AnimatedEnumeration get mode => JS("AnimatedEnumeration", "#.mode", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -633,7 +677,8 @@
   }
 
   factory FEColorMatrixElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feColorMatrix");
+      _SvgElementFactoryProvider.createSvgElement_tag("feColorMatrix")
+          as FEColorMatrixElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -656,23 +701,23 @@
 
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedEnumeration type;
+  AnimatedEnumeration get type => JS("AnimatedEnumeration", "#.type", this);
 
-  final AnimatedNumberList values;
+  AnimatedNumberList get values => JS("AnimatedNumberList", "#.values", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -692,7 +737,8 @@
   }
 
   factory FEComponentTransferElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feComponentTransfer");
+      _SvgElementFactoryProvider.createSvgElement_tag("feComponentTransfer")
+          as FEComponentTransferElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -705,19 +751,19 @@
       SvgElement.isTagSupported('feComponentTransfer') &&
       (new SvgElement.tag('feComponentTransfer') is FEComponentTransferElement);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -752,31 +798,32 @@
 
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedString in2;
+  AnimatedString get in2 => JS("AnimatedString", "#.in2", this);
 
-  final AnimatedNumber k1;
+  AnimatedNumber get k1 => JS("AnimatedNumber", "#.k1", this);
 
-  final AnimatedNumber k2;
+  AnimatedNumber get k2 => JS("AnimatedNumber", "#.k2", this);
 
-  final AnimatedNumber k3;
+  AnimatedNumber get k3 => JS("AnimatedNumber", "#.k3", this);
 
-  final AnimatedNumber k4;
+  AnimatedNumber get k4 => JS("AnimatedNumber", "#.k4", this);
 
-  final AnimatedEnumeration operator;
+  AnimatedEnumeration get operator =>
+      JS("AnimatedEnumeration", "#.operator", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -796,7 +843,8 @@
   }
 
   factory FEConvolveMatrixElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feConvolveMatrix");
+      _SvgElementFactoryProvider.createSvgElement_tag("feConvolveMatrix")
+          as FEConvolveMatrixElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -817,41 +865,46 @@
 
   static const int SVG_EDGEMODE_WRAP = 2;
 
-  final AnimatedNumber bias;
+  AnimatedNumber get bias => JS("AnimatedNumber", "#.bias", this);
 
-  final AnimatedNumber divisor;
+  AnimatedNumber get divisor => JS("AnimatedNumber", "#.divisor", this);
 
-  final AnimatedEnumeration edgeMode;
+  AnimatedEnumeration get edgeMode =>
+      JS("AnimatedEnumeration", "#.edgeMode", this);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedNumberList kernelMatrix;
+  AnimatedNumberList get kernelMatrix =>
+      JS("AnimatedNumberList", "#.kernelMatrix", this);
 
-  final AnimatedNumber kernelUnitLengthX;
+  AnimatedNumber get kernelUnitLengthX =>
+      JS("AnimatedNumber", "#.kernelUnitLengthX", this);
 
-  final AnimatedNumber kernelUnitLengthY;
+  AnimatedNumber get kernelUnitLengthY =>
+      JS("AnimatedNumber", "#.kernelUnitLengthY", this);
 
-  final AnimatedInteger orderX;
+  AnimatedInteger get orderX => JS("AnimatedInteger", "#.orderX", this);
 
-  final AnimatedInteger orderY;
+  AnimatedInteger get orderY => JS("AnimatedInteger", "#.orderY", this);
 
-  final AnimatedBoolean preserveAlpha;
+  AnimatedBoolean get preserveAlpha =>
+      JS("AnimatedBoolean", "#.preserveAlpha", this);
 
-  final AnimatedInteger targetX;
+  AnimatedInteger get targetX => JS("AnimatedInteger", "#.targetX", this);
 
-  final AnimatedInteger targetY;
+  AnimatedInteger get targetY => JS("AnimatedInteger", "#.targetY", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -871,7 +924,8 @@
   }
 
   factory FEDiffuseLightingElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feDiffuseLighting");
+      _SvgElementFactoryProvider.createSvgElement_tag("feDiffuseLighting")
+          as FEDiffuseLightingElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -884,27 +938,31 @@
       SvgElement.isTagSupported('feDiffuseLighting') &&
       (new SvgElement.tag('feDiffuseLighting') is FEDiffuseLightingElement);
 
-  final AnimatedNumber diffuseConstant;
+  AnimatedNumber get diffuseConstant =>
+      JS("AnimatedNumber", "#.diffuseConstant", this);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedNumber kernelUnitLengthX;
+  AnimatedNumber get kernelUnitLengthX =>
+      JS("AnimatedNumber", "#.kernelUnitLengthX", this);
 
-  final AnimatedNumber kernelUnitLengthY;
+  AnimatedNumber get kernelUnitLengthY =>
+      JS("AnimatedNumber", "#.kernelUnitLengthY", this);
 
-  final AnimatedNumber surfaceScale;
+  AnimatedNumber get surfaceScale =>
+      JS("AnimatedNumber", "#.surfaceScale", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -924,7 +982,8 @@
   }
 
   factory FEDisplacementMapElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feDisplacementMap");
+      _SvgElementFactoryProvider.createSvgElement_tag("feDisplacementMap")
+          as FEDisplacementMapElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -947,27 +1006,29 @@
 
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedString in2;
+  AnimatedString get in2 => JS("AnimatedString", "#.in2", this);
 
-  final AnimatedNumber scale;
+  AnimatedNumber get scale => JS("AnimatedNumber", "#.scale", this);
 
-  final AnimatedEnumeration xChannelSelector;
+  AnimatedEnumeration get xChannelSelector =>
+      JS("AnimatedEnumeration", "#.xChannelSelector", this);
 
-  final AnimatedEnumeration yChannelSelector;
+  AnimatedEnumeration get yChannelSelector =>
+      JS("AnimatedEnumeration", "#.yChannelSelector", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -986,7 +1047,8 @@
   }
 
   factory FEDistantLightElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feDistantLight");
+      _SvgElementFactoryProvider.createSvgElement_tag("feDistantLight")
+          as FEDistantLightElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -999,9 +1061,9 @@
       SvgElement.isTagSupported('feDistantLight') &&
       (new SvgElement.tag('feDistantLight') is FEDistantLightElement);
 
-  final AnimatedNumber azimuth;
+  AnimatedNumber get azimuth => JS("AnimatedNumber", "#.azimuth", this);
 
-  final AnimatedNumber elevation;
+  AnimatedNumber get elevation => JS("AnimatedNumber", "#.elevation", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1021,7 +1083,8 @@
   }
 
   factory FEFloodElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feFlood");
+      _SvgElementFactoryProvider.createSvgElement_tag("feFlood")
+          as FEFloodElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1036,15 +1099,15 @@
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1063,7 +1126,8 @@
   }
 
   factory FEFuncAElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feFuncA");
+      _SvgElementFactoryProvider.createSvgElement_tag("feFuncA")
+          as FEFuncAElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1093,7 +1157,8 @@
   }
 
   factory FEFuncBElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feFuncB");
+      _SvgElementFactoryProvider.createSvgElement_tag("feFuncB")
+          as FEFuncBElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1123,7 +1188,8 @@
   }
 
   factory FEFuncGElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feFuncG");
+      _SvgElementFactoryProvider.createSvgElement_tag("feFuncG")
+          as FEFuncGElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1153,7 +1219,8 @@
   }
 
   factory FEFuncRElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feFuncR");
+      _SvgElementFactoryProvider.createSvgElement_tag("feFuncR")
+          as FEFuncRElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1184,7 +1251,8 @@
   }
 
   factory FEGaussianBlurElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feGaussianBlur");
+      _SvgElementFactoryProvider.createSvgElement_tag("feGaussianBlur")
+          as FEGaussianBlurElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1197,25 +1265,27 @@
       SvgElement.isTagSupported('feGaussianBlur') &&
       (new SvgElement.tag('feGaussianBlur') is FEGaussianBlurElement);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedNumber stdDeviationX;
+  AnimatedNumber get stdDeviationX =>
+      JS("AnimatedNumber", "#.stdDeviationX", this);
 
-  final AnimatedNumber stdDeviationY;
+  AnimatedNumber get stdDeviationY =>
+      JS("AnimatedNumber", "#.stdDeviationY", this);
 
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1235,7 +1305,8 @@
   }
 
   factory FEImageElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feImage");
+      _SvgElementFactoryProvider.createSvgElement_tag("feImage")
+          as FEImageElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1248,23 +1319,24 @@
       SvgElement.isTagSupported('feImage') &&
       (new SvgElement.tag('feImage') is FEImageElement);
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1284,7 +1356,8 @@
   }
 
   factory FEMergeElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feMerge");
+      _SvgElementFactoryProvider.createSvgElement_tag("feMerge")
+          as FEMergeElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1299,15 +1372,15 @@
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1326,7 +1399,8 @@
   }
 
   factory FEMergeNodeElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feMergeNode");
+      _SvgElementFactoryProvider.createSvgElement_tag("feMergeNode")
+          as FEMergeNodeElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1339,7 +1413,7 @@
       SvgElement.isTagSupported('feMergeNode') &&
       (new SvgElement.tag('feMergeNode') is FEMergeNodeElement);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1370,25 +1444,26 @@
 
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedEnumeration operator;
+  AnimatedEnumeration get operator =>
+      JS("AnimatedEnumeration", "#.operator", this);
 
-  final AnimatedNumber radiusX;
+  AnimatedNumber get radiusX => JS("AnimatedNumber", "#.radiusX", this);
 
-  final AnimatedNumber radiusY;
+  AnimatedNumber get radiusY => JS("AnimatedNumber", "#.radiusY", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1408,7 +1483,8 @@
   }
 
   factory FEOffsetElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feOffset");
+      _SvgElementFactoryProvider.createSvgElement_tag("feOffset")
+          as FEOffsetElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1421,23 +1497,23 @@
       SvgElement.isTagSupported('feOffset') &&
       (new SvgElement.tag('feOffset') is FEOffsetElement);
 
-  final AnimatedNumber dx;
+  AnimatedNumber get dx => JS("AnimatedNumber", "#.dx", this);
 
-  final AnimatedNumber dy;
+  AnimatedNumber get dy => JS("AnimatedNumber", "#.dy", this);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1456,7 +1532,8 @@
   }
 
   factory FEPointLightElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("fePointLight");
+      _SvgElementFactoryProvider.createSvgElement_tag("fePointLight")
+          as FEPointLightElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1469,11 +1546,11 @@
       SvgElement.isTagSupported('fePointLight') &&
       (new SvgElement.tag('fePointLight') is FEPointLightElement);
 
-  final AnimatedNumber x;
+  AnimatedNumber get x => JS("AnimatedNumber", "#.x", this);
 
-  final AnimatedNumber y;
+  AnimatedNumber get y => JS("AnimatedNumber", "#.y", this);
 
-  final AnimatedNumber z;
+  AnimatedNumber get z => JS("AnimatedNumber", "#.z", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1493,7 +1570,8 @@
   }
 
   factory FESpecularLightingElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feSpecularLighting");
+      _SvgElementFactoryProvider.createSvgElement_tag("feSpecularLighting")
+          as FESpecularLightingElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1506,29 +1584,34 @@
       SvgElement.isTagSupported('feSpecularLighting') &&
       (new SvgElement.tag('feSpecularLighting') is FESpecularLightingElement);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
-  final AnimatedNumber kernelUnitLengthX;
+  AnimatedNumber get kernelUnitLengthX =>
+      JS("AnimatedNumber", "#.kernelUnitLengthX", this);
 
-  final AnimatedNumber kernelUnitLengthY;
+  AnimatedNumber get kernelUnitLengthY =>
+      JS("AnimatedNumber", "#.kernelUnitLengthY", this);
 
-  final AnimatedNumber specularConstant;
+  AnimatedNumber get specularConstant =>
+      JS("AnimatedNumber", "#.specularConstant", this);
 
-  final AnimatedNumber specularExponent;
+  AnimatedNumber get specularExponent =>
+      JS("AnimatedNumber", "#.specularExponent", this);
 
-  final AnimatedNumber surfaceScale;
+  AnimatedNumber get surfaceScale =>
+      JS("AnimatedNumber", "#.surfaceScale", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1547,7 +1630,8 @@
   }
 
   factory FESpotLightElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feSpotLight");
+      _SvgElementFactoryProvider.createSvgElement_tag("feSpotLight")
+          as FESpotLightElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1560,21 +1644,23 @@
       SvgElement.isTagSupported('feSpotLight') &&
       (new SvgElement.tag('feSpotLight') is FESpotLightElement);
 
-  final AnimatedNumber limitingConeAngle;
+  AnimatedNumber get limitingConeAngle =>
+      JS("AnimatedNumber", "#.limitingConeAngle", this);
 
-  final AnimatedNumber pointsAtX;
+  AnimatedNumber get pointsAtX => JS("AnimatedNumber", "#.pointsAtX", this);
 
-  final AnimatedNumber pointsAtY;
+  AnimatedNumber get pointsAtY => JS("AnimatedNumber", "#.pointsAtY", this);
 
-  final AnimatedNumber pointsAtZ;
+  AnimatedNumber get pointsAtZ => JS("AnimatedNumber", "#.pointsAtZ", this);
 
-  final AnimatedNumber specularExponent;
+  AnimatedNumber get specularExponent =>
+      JS("AnimatedNumber", "#.specularExponent", this);
 
-  final AnimatedNumber x;
+  AnimatedNumber get x => JS("AnimatedNumber", "#.x", this);
 
-  final AnimatedNumber y;
+  AnimatedNumber get y => JS("AnimatedNumber", "#.y", this);
 
-  final AnimatedNumber z;
+  AnimatedNumber get z => JS("AnimatedNumber", "#.z", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1594,7 +1680,8 @@
   }
 
   factory FETileElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feTile");
+      _SvgElementFactoryProvider.createSvgElement_tag("feTile")
+          as FETileElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1607,19 +1694,19 @@
       SvgElement.isTagSupported('feTile') &&
       (new SvgElement.tag('feTile') is FETileElement);
 
-  final AnimatedString in1;
+  AnimatedString get in1 => JS("AnimatedString", "#.in1", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1639,7 +1726,8 @@
   }
 
   factory FETurbulenceElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("feTurbulence");
+      _SvgElementFactoryProvider.createSvgElement_tag("feTurbulence")
+          as FETurbulenceElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1664,29 +1752,32 @@
 
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
-  final AnimatedNumber baseFrequencyX;
+  AnimatedNumber get baseFrequencyX =>
+      JS("AnimatedNumber", "#.baseFrequencyX", this);
 
-  final AnimatedNumber baseFrequencyY;
+  AnimatedNumber get baseFrequencyY =>
+      JS("AnimatedNumber", "#.baseFrequencyY", this);
 
-  final AnimatedInteger numOctaves;
+  AnimatedInteger get numOctaves => JS("AnimatedInteger", "#.numOctaves", this);
 
-  final AnimatedNumber seed;
+  AnimatedNumber get seed => JS("AnimatedNumber", "#.seed", this);
 
-  final AnimatedEnumeration stitchTiles;
+  AnimatedEnumeration get stitchTiles =>
+      JS("AnimatedEnumeration", "#.stitchTiles", this);
 
-  final AnimatedEnumeration type;
+  AnimatedEnumeration get type => JS("AnimatedEnumeration", "#.type", this);
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedString result;
+  AnimatedString get result => JS("AnimatedString", "#.result", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1705,7 +1796,8 @@
   }
 
   factory FilterElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("filter");
+      _SvgElementFactoryProvider.createSvgElement_tag("filter")
+          as FilterElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1718,21 +1810,23 @@
       SvgElement.isTagSupported('filter') &&
       (new SvgElement.tag('filter') is FilterElement);
 
-  final AnimatedEnumeration filterUnits;
+  AnimatedEnumeration get filterUnits =>
+      JS("AnimatedEnumeration", "#.filterUnits", this);
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedEnumeration primitiveUnits;
+  AnimatedEnumeration get primitiveUnits =>
+      JS("AnimatedEnumeration", "#.primitiveUnits", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1786,7 +1880,8 @@
   }
 
   factory ForeignObjectElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("foreignObject");
+      _SvgElementFactoryProvider.createSvgElement_tag("foreignObject")
+          as ForeignObjectElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1799,13 +1894,13 @@
       SvgElement.isTagSupported('foreignObject') &&
       (new SvgElement.tag('foreignObject') is ForeignObjectElement);
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1819,7 +1914,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory GElement() => _SvgElementFactoryProvider.createSvgElement_tag("g");
+  factory GElement() =>
+      _SvgElementFactoryProvider.createSvgElement_tag("g") as GElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1844,7 +1940,7 @@
    */
   GeometryElement.created() : super.created();
 
-  final AnimatedNumber pathLength;
+  AnimatedNumber get pathLength => JS("AnimatedNumber", "#.pathLength", this);
 
   Point getPointAtLength(num distance) native;
 
@@ -1871,11 +1967,14 @@
    */
   GraphicsElement.created() : super.created();
 
-  final SvgElement farthestViewportElement;
+  SvgElement get farthestViewportElement =>
+      JS("SvgElement", "#.farthestViewportElement", this);
 
-  final SvgElement nearestViewportElement;
+  SvgElement get nearestViewportElement =>
+      JS("SvgElement", "#.nearestViewportElement", this);
 
-  final AnimatedTransformList transform;
+  AnimatedTransformList get transform =>
+      JS("AnimatedTransformList", "#.transform", this);
 
   Rect getBBox() native;
 
@@ -1887,9 +1986,10 @@
 
   // From SVGTests
 
-  final StringList requiredExtensions;
+  StringList get requiredExtensions =>
+      JS("StringList", "#.requiredExtensions", this);
 
-  final StringList systemLanguage;
+  StringList get systemLanguage => JS("StringList", "#.systemLanguage", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1904,7 +2004,7 @@
   }
 
   factory ImageElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("image");
+      _SvgElementFactoryProvider.createSvgElement_tag("image") as ImageElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -1912,23 +2012,28 @@
    */
   ImageElement.created() : super.created();
 
-  String async;
+  String get async => JS("String", "#.async", this);
 
-  final AnimatedLength height;
+  set async(String value) {
+    JS("void", "#.async = #", this, value);
+  }
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedLength width;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
-  final AnimatedLength x;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength y;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
+
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   Future decode() => promiseToFuture(JS("", "#.decode()", this));
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1964,13 +2069,25 @@
 
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
-  final int unitType;
+  int get unitType => JS("int", "#.unitType", this);
 
-  num value;
+  num get value => JS("num", "#.value", this);
 
-  String valueAsString;
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 
-  num valueInSpecifiedUnits;
+  String get valueAsString => JS("String", "#.valueAsString", this);
+
+  set valueAsString(String value) {
+    JS("void", "#.valueAsString = #", this, value);
+  }
+
+  num get valueInSpecifiedUnits => JS("num", "#.valueInSpecifiedUnits", this);
+
+  set valueInSpecifiedUnits(num value) {
+    JS("void", "#.valueInSpecifiedUnits = #", this, value);
+  }
 
   void convertToSpecifiedUnits(int unitType) native;
 
@@ -1992,7 +2109,7 @@
 
   int get length => JS("int", "#.length", this);
 
-  final int numberOfItems;
+  int get numberOfItems => JS("int", "#.numberOfItems", this);
 
   Length operator [](int index) {
     if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
@@ -2066,7 +2183,7 @@
   }
 
   factory LineElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("line");
+      _SvgElementFactoryProvider.createSvgElement_tag("line") as LineElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2074,13 +2191,13 @@
    */
   LineElement.created() : super.created();
 
-  final AnimatedLength x1;
+  AnimatedLength get x1 => JS("AnimatedLength", "#.x1", this);
 
-  final AnimatedLength x2;
+  AnimatedLength get x2 => JS("AnimatedLength", "#.x2", this);
 
-  final AnimatedLength y1;
+  AnimatedLength get y1 => JS("AnimatedLength", "#.y1", this);
 
-  final AnimatedLength y2;
+  AnimatedLength get y2 => JS("AnimatedLength", "#.y2", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2095,7 +2212,8 @@
   }
 
   factory LinearGradientElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("linearGradient");
+      _SvgElementFactoryProvider.createSvgElement_tag("linearGradient")
+          as LinearGradientElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2103,13 +2221,13 @@
    */
   LinearGradientElement.created() : super.created();
 
-  final AnimatedLength x1;
+  AnimatedLength get x1 => JS("AnimatedLength", "#.x1", this);
 
-  final AnimatedLength x2;
+  AnimatedLength get x2 => JS("AnimatedLength", "#.x2", this);
 
-  final AnimatedLength y1;
+  AnimatedLength get y1 => JS("AnimatedLength", "#.y1", this);
 
-  final AnimatedLength y2;
+  AnimatedLength get y2 => JS("AnimatedLength", "#.y2", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2124,7 +2242,8 @@
   }
 
   factory MarkerElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("marker");
+      _SvgElementFactoryProvider.createSvgElement_tag("marker")
+          as MarkerElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2144,19 +2263,22 @@
 
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
-  final AnimatedLength markerHeight;
+  AnimatedLength get markerHeight =>
+      JS("AnimatedLength", "#.markerHeight", this);
 
-  final AnimatedEnumeration markerUnits;
+  AnimatedEnumeration get markerUnits =>
+      JS("AnimatedEnumeration", "#.markerUnits", this);
 
-  final AnimatedLength markerWidth;
+  AnimatedLength get markerWidth => JS("AnimatedLength", "#.markerWidth", this);
 
-  final AnimatedAngle orientAngle;
+  AnimatedAngle get orientAngle => JS("AnimatedAngle", "#.orientAngle", this);
 
-  final AnimatedEnumeration orientType;
+  AnimatedEnumeration get orientType =>
+      JS("AnimatedEnumeration", "#.orientType", this);
 
-  final AnimatedLength refX;
+  AnimatedLength get refX => JS("AnimatedLength", "#.refX", this);
 
-  final AnimatedLength refY;
+  AnimatedLength get refY => JS("AnimatedLength", "#.refY", this);
 
   void setOrientToAngle(Angle angle) native;
 
@@ -2164,9 +2286,10 @@
 
   // From SVGFitToViewBox
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
-  final AnimatedRect viewBox;
+  AnimatedRect get viewBox => JS("AnimatedRect", "#.viewBox", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2181,7 +2304,7 @@
   }
 
   factory MaskElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("mask");
+      _SvgElementFactoryProvider.createSvgElement_tag("mask") as MaskElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2189,23 +2312,26 @@
    */
   MaskElement.created() : super.created();
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedEnumeration maskContentUnits;
+  AnimatedEnumeration get maskContentUnits =>
+      JS("AnimatedEnumeration", "#.maskContentUnits", this);
 
-  final AnimatedEnumeration maskUnits;
+  AnimatedEnumeration get maskUnits =>
+      JS("AnimatedEnumeration", "#.maskUnits", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   // From SVGTests
 
-  final StringList requiredExtensions;
+  StringList get requiredExtensions =>
+      JS("StringList", "#.requiredExtensions", this);
 
-  final StringList systemLanguage;
+  StringList get systemLanguage => JS("StringList", "#.systemLanguage", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2219,17 +2345,41 @@
     throw new UnsupportedError("Not supported");
   }
 
-  num a;
+  num get a => JS("num", "#.a", this);
 
-  num b;
+  set a(num value) {
+    JS("void", "#.a = #", this, value);
+  }
 
-  num c;
+  num get b => JS("num", "#.b", this);
 
-  num d;
+  set b(num value) {
+    JS("void", "#.b = #", this, value);
+  }
 
-  num e;
+  num get c => JS("num", "#.c", this);
 
-  num f;
+  set c(num value) {
+    JS("void", "#.c = #", this, value);
+  }
+
+  num get d => JS("num", "#.d", this);
+
+  set d(num value) {
+    JS("void", "#.d = #", this, value);
+  }
+
+  num get e => JS("num", "#.e", this);
+
+  set e(num value) {
+    JS("void", "#.e = #", this, value);
+  }
+
+  num get f => JS("num", "#.f", this);
+
+  set f(num value) {
+    JS("void", "#.f = #", this, value);
+  }
 
   Matrix flipX() native;
 
@@ -2283,7 +2433,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  num value;
+  num get value => JS("num", "#.value", this);
+
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2301,7 +2455,7 @@
 
   int get length => JS("int", "#.length", this);
 
-  final int numberOfItems;
+  int get numberOfItems => JS("int", "#.numberOfItems", this);
 
   Number operator [](int index) {
     if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
@@ -2375,7 +2529,7 @@
   }
 
   factory PathElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("path");
+      _SvgElementFactoryProvider.createSvgElement_tag("path") as PathElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2397,7 +2551,8 @@
   }
 
   factory PatternElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("pattern");
+      _SvgElementFactoryProvider.createSvgElement_tag("pattern")
+          as PatternElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2405,35 +2560,40 @@
    */
   PatternElement.created() : super.created();
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedEnumeration patternContentUnits;
+  AnimatedEnumeration get patternContentUnits =>
+      JS("AnimatedEnumeration", "#.patternContentUnits", this);
 
-  final AnimatedTransformList patternTransform;
+  AnimatedTransformList get patternTransform =>
+      JS("AnimatedTransformList", "#.patternTransform", this);
 
-  final AnimatedEnumeration patternUnits;
+  AnimatedEnumeration get patternUnits =>
+      JS("AnimatedEnumeration", "#.patternUnits", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   // From SVGFitToViewBox
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
-  final AnimatedRect viewBox;
+  AnimatedRect get viewBox => JS("AnimatedRect", "#.viewBox", this);
 
   // From SVGTests
 
-  final StringList requiredExtensions;
+  StringList get requiredExtensions =>
+      JS("StringList", "#.requiredExtensions", this);
 
-  final StringList systemLanguage;
+  StringList get systemLanguage => JS("StringList", "#.systemLanguage", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2447,9 +2607,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  num x;
+  num get x => JS("num", "#.x", this);
 
-  num y;
+  set x(num value) {
+    JS("void", "#.x = #", this, value);
+  }
+
+  num get y => JS("num", "#.y", this);
+
+  set y(num value) {
+    JS("void", "#.y = #", this, value);
+  }
 
   Point matrixTransform(Matrix matrix) native;
 }
@@ -2465,9 +2633,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  final int numberOfItems;
+  int get numberOfItems => JS("int", "#.numberOfItems", this);
 
   void __setter__(int index, Point newItem) native;
 
@@ -2498,7 +2666,8 @@
   }
 
   factory PolygonElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("polygon");
+      _SvgElementFactoryProvider.createSvgElement_tag("polygon")
+          as PolygonElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2506,9 +2675,9 @@
    */
   PolygonElement.created() : super.created();
 
-  final PointList animatedPoints;
+  PointList get animatedPoints => JS("PointList", "#.animatedPoints", this);
 
-  final PointList points;
+  PointList get points => JS("PointList", "#.points", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2523,7 +2692,8 @@
   }
 
   factory PolylineElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("polyline");
+      _SvgElementFactoryProvider.createSvgElement_tag("polyline")
+          as PolylineElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2531,9 +2701,9 @@
    */
   PolylineElement.created() : super.created();
 
-  final PointList animatedPoints;
+  PointList get animatedPoints => JS("PointList", "#.animatedPoints", this);
 
-  final PointList points;
+  PointList get points => JS("PointList", "#.points", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2575,9 +2745,17 @@
 
   static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
 
-  int align;
+  int get align => JS("int", "#.align", this);
 
-  int meetOrSlice;
+  set align(int value) {
+    JS("void", "#.align = #", this, value);
+  }
+
+  int get meetOrSlice => JS("int", "#.meetOrSlice", this);
+
+  set meetOrSlice(int value) {
+    JS("void", "#.meetOrSlice = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2592,7 +2770,8 @@
   }
 
   factory RadialGradientElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("radialGradient");
+      _SvgElementFactoryProvider.createSvgElement_tag("radialGradient")
+          as RadialGradientElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2600,17 +2779,17 @@
    */
   RadialGradientElement.created() : super.created();
 
-  final AnimatedLength cx;
+  AnimatedLength get cx => JS("AnimatedLength", "#.cx", this);
 
-  final AnimatedLength cy;
+  AnimatedLength get cy => JS("AnimatedLength", "#.cy", this);
 
-  final AnimatedLength fr;
+  AnimatedLength get fr => JS("AnimatedLength", "#.fr", this);
 
-  final AnimatedLength fx;
+  AnimatedLength get fx => JS("AnimatedLength", "#.fx", this);
 
-  final AnimatedLength fy;
+  AnimatedLength get fy => JS("AnimatedLength", "#.fy", this);
 
-  final AnimatedLength r;
+  AnimatedLength get r => JS("AnimatedLength", "#.r", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2624,13 +2803,29 @@
     throw new UnsupportedError("Not supported");
   }
 
-  num height;
+  num get height => JS("num", "#.height", this);
 
-  num width;
+  set height(num value) {
+    JS("void", "#.height = #", this, value);
+  }
 
-  num x;
+  num get width => JS("num", "#.width", this);
 
-  num y;
+  set width(num value) {
+    JS("void", "#.width = #", this, value);
+  }
+
+  num get x => JS("num", "#.x", this);
+
+  set x(num value) {
+    JS("void", "#.x = #", this, value);
+  }
+
+  num get y => JS("num", "#.y", this);
+
+  set y(num value) {
+    JS("void", "#.y = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2645,7 +2840,7 @@
   }
 
   factory RectElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("rect");
+      _SvgElementFactoryProvider.createSvgElement_tag("rect") as RectElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2653,17 +2848,17 @@
    */
   RectElement.created() : super.created();
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedLength rx;
+  AnimatedLength get rx => JS("AnimatedLength", "#.rx", this);
 
-  final AnimatedLength ry;
+  AnimatedLength get ry => JS("AnimatedLength", "#.ry", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2678,7 +2873,8 @@
   }
 
   factory ScriptElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("script");
+      _SvgElementFactoryProvider.createSvgElement_tag("script")
+          as ScriptElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2686,11 +2882,15 @@
    */
   ScriptElement.created() : super.created();
 
-  String type;
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2708,7 +2908,7 @@
   }
 
   factory SetElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("set");
+      _SvgElementFactoryProvider.createSvgElement_tag("set") as SetElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2734,7 +2934,7 @@
   }
 
   factory StopElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("stop");
+      _SvgElementFactoryProvider.createSvgElement_tag("stop") as StopElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2743,7 +2943,7 @@
   StopElement.created() : super.created();
 
   @JSName('offset')
-  final AnimatedNumber gradientOffset;
+  AnimatedNumber get gradientOffset => JS("AnimatedNumber", "#.offset", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2761,7 +2961,7 @@
 
   int get length => JS("int", "#.length", this);
 
-  final int numberOfItems;
+  int get numberOfItems => JS("int", "#.numberOfItems", this);
 
   String operator [](int index) {
     if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
@@ -2834,7 +3034,7 @@
   }
 
   factory StyleElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("style");
+      _SvgElementFactoryProvider.createSvgElement_tag("style") as StyleElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -2842,16 +3042,28 @@
    */
   StyleElement.created() : super.created();
 
-  bool disabled;
+  bool get disabled => JS("bool", "#.disabled", this);
 
-  String media;
+  set disabled(bool value) {
+    JS("void", "#.disabled = #", this, value);
+  }
 
-  final StyleSheet sheet;
+  String get media => JS("String", "#.media", this);
+
+  set media(String value) {
+    JS("void", "#.media = #", this, value);
+  }
+
+  final StyleSheet? sheet;
 
   // Use implementation from Element.
   // final String title;
 
-  String type;
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3180,10 +3392,11 @@
   SvgElement.created() : super.created();
 
   // Shadowing definition.
+
   AnimatedString get _svgClassName => JS("AnimatedString", "#.className", this);
 
   @JSName('ownerSVGElement')
-  final SvgSvgElement ownerSvgElement;
+  final SvgSvgElement? ownerSvgElement;
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
@@ -3191,7 +3404,7 @@
   // Use implementation from Element.
   // final int tabIndex;
 
-  final SvgElement viewportElement;
+  final SvgElement? viewportElement;
 
   void blur() native;
 
@@ -3199,7 +3412,11 @@
 
   // From NoncedElement
 
-  String nonce;
+  String get nonce => JS("String", "#.nonce", this);
+
+  set nonce(String value) {
+    JS("void", "#.nonce = #", this, value);
+  }
 
   ElementStream<Event> get onAbort => abortEvent.forElement(this);
 
@@ -3351,17 +3568,21 @@
    */
   SvgSvgElement.created() : super.created();
 
-  num currentScale;
+  num get currentScale => JS("num", "#.currentScale", this);
 
-  final Point currentTranslate;
+  set currentScale(num value) {
+    JS("void", "#.currentScale = #", this, value);
+  }
 
-  final AnimatedLength height;
+  Point get currentTranslate => JS("Point", "#.currentTranslate", this);
 
-  final AnimatedLength width;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedLength x;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength y;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
+
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   bool animationsPaused() native;
 
@@ -3403,11 +3624,12 @@
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) native;
+  List<Node> getEnclosureList(Rect rect, SvgElement? referenceElement) native;
 
   @Returns('NodeList|Null')
   @Creates('NodeList')
-  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) native;
+  List<Node> getIntersectionList(Rect rect, SvgElement? referenceElement)
+      native;
 
   void pauseAnimations() native;
 
@@ -3423,13 +3645,18 @@
 
   // From SVGFitToViewBox
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
-  final AnimatedRect viewBox;
+  AnimatedRect get viewBox => JS("AnimatedRect", "#.viewBox", this);
 
   // From SVGZoomAndPan
 
-  int zoomAndPan;
+  int get zoomAndPan => JS("int", "#.zoomAndPan", this);
+
+  set zoomAndPan(int value) {
+    JS("void", "#.zoomAndPan = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3444,7 +3671,8 @@
   }
 
   factory SwitchElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("switch");
+      _SvgElementFactoryProvider.createSvgElement_tag("switch")
+          as SwitchElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3465,7 +3693,8 @@
   }
 
   factory SymbolElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("symbol");
+      _SvgElementFactoryProvider.createSvgElement_tag("symbol")
+          as SymbolElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3475,9 +3704,10 @@
 
   // From SVGFitToViewBox
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
-  final AnimatedRect viewBox;
+  AnimatedRect get viewBox => JS("AnimatedRect", "#.viewBox", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3492,7 +3722,7 @@
   }
 
   factory TSpanElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("tspan");
+      _SvgElementFactoryProvider.createSvgElement_tag("tspan") as TSpanElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3539,9 +3769,10 @@
 
   static const int LENGTHADJUST_UNKNOWN = 0;
 
-  final AnimatedEnumeration lengthAdjust;
+  AnimatedEnumeration get lengthAdjust =>
+      JS("AnimatedEnumeration", "#.lengthAdjust", this);
 
-  final AnimatedLength textLength;
+  AnimatedLength get textLength => JS("AnimatedLength", "#.textLength", this);
 
   int getCharNumAtPosition(Point point) native;
 
@@ -3574,7 +3805,7 @@
   }
 
   factory TextElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("text");
+      _SvgElementFactoryProvider.createSvgElement_tag("text") as TextElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3612,15 +3843,16 @@
 
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
-  final AnimatedEnumeration method;
+  AnimatedEnumeration get method => JS("AnimatedEnumeration", "#.method", this);
 
-  final AnimatedEnumeration spacing;
+  AnimatedEnumeration get spacing =>
+      JS("AnimatedEnumeration", "#.spacing", this);
 
-  final AnimatedLength startOffset;
+  AnimatedLength get startOffset => JS("AnimatedLength", "#.startOffset", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3640,15 +3872,15 @@
    */
   TextPositioningElement.created() : super.created();
 
-  final AnimatedLengthList dx;
+  AnimatedLengthList get dx => JS("AnimatedLengthList", "#.dx", this);
 
-  final AnimatedLengthList dy;
+  AnimatedLengthList get dy => JS("AnimatedLengthList", "#.dy", this);
 
-  final AnimatedNumberList rotate;
+  AnimatedNumberList get rotate => JS("AnimatedNumberList", "#.rotate", this);
 
-  final AnimatedLengthList x;
+  AnimatedLengthList get x => JS("AnimatedLengthList", "#.x", this);
 
-  final AnimatedLengthList y;
+  AnimatedLengthList get y => JS("AnimatedLengthList", "#.y", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3663,7 +3895,7 @@
   }
 
   factory TitleElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("title");
+      _SvgElementFactoryProvider.createSvgElement_tag("title") as TitleElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3697,11 +3929,11 @@
 
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
-  final num angle;
+  num get angle => JS("num", "#.angle", this);
 
-  final Matrix matrix;
+  Matrix get matrix => JS("Matrix", "#.matrix", this);
 
-  final int type;
+  int get type => JS("int", "#.type", this);
 
   void setMatrix(Matrix matrix) native;
 
@@ -3731,7 +3963,7 @@
 
   int get length => JS("int", "#.length", this);
 
-  final int numberOfItems;
+  int get numberOfItems => JS("int", "#.numberOfItems", this);
 
   Transform operator [](int index) {
     if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
@@ -3841,7 +4073,7 @@
   }
 
   factory UseElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("use");
+      _SvgElementFactoryProvider.createSvgElement_tag("use") as UseElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3849,17 +4081,17 @@
    */
   UseElement.created() : super.created();
 
-  final AnimatedLength height;
+  AnimatedLength get height => JS("AnimatedLength", "#.height", this);
 
-  final AnimatedLength width;
+  AnimatedLength get width => JS("AnimatedLength", "#.width", this);
 
-  final AnimatedLength x;
+  AnimatedLength get x => JS("AnimatedLength", "#.x", this);
 
-  final AnimatedLength y;
+  AnimatedLength get y => JS("AnimatedLength", "#.y", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3874,7 +4106,7 @@
   }
 
   factory ViewElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("view");
+      _SvgElementFactoryProvider.createSvgElement_tag("view") as ViewElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -3884,13 +4116,18 @@
 
   // From SVGFitToViewBox
 
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio get preserveAspectRatio =>
+      JS("AnimatedPreserveAspectRatio", "#.preserveAspectRatio", this);
 
-  final AnimatedRect viewBox;
+  AnimatedRect get viewBox => JS("AnimatedRect", "#.viewBox", this);
 
   // From SVGZoomAndPan
 
-  int zoomAndPan;
+  int get zoomAndPan => JS("int", "#.zoomAndPan", this);
+
+  set zoomAndPan(int value) {
+    JS("void", "#.zoomAndPan = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3937,15 +4174,18 @@
 
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
-  final AnimatedTransformList gradientTransform;
+  AnimatedTransformList get gradientTransform =>
+      JS("AnimatedTransformList", "#.gradientTransform", this);
 
-  final AnimatedEnumeration gradientUnits;
+  AnimatedEnumeration get gradientUnits =>
+      JS("AnimatedEnumeration", "#.gradientUnits", this);
 
-  final AnimatedEnumeration spreadMethod;
+  AnimatedEnumeration get spreadMethod =>
+      JS("AnimatedEnumeration", "#.spreadMethod", this);
 
   // From SVGURIReference
 
-  final AnimatedString href;
+  AnimatedString get href => JS("AnimatedString", "#.href", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3999,7 +4239,8 @@
   }
 
   factory _SVGMPathElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("mpath");
+      _SvgElementFactoryProvider.createSvgElement_tag("mpath")
+          as _SVGMPathElement;
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
diff --git a/sdk_nnbd/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk_nnbd/lib/web_audio/dart2js/web_audio_dart2js.dart
index 57f93f6..370361b 100644
--- a/sdk_nnbd/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk_nnbd/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -1,4 +1,3 @@
-// @dart = 2.5
 /**
  * High-fidelity audio programming in the browser.
  *
@@ -39,7 +38,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AnalyserNode(BaseAudioContext context, [Map options]) {
+  factory AnalyserNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return AnalyserNode._create_1(context, options_1);
@@ -51,15 +50,31 @@
   static AnalyserNode _create_2(context) =>
       JS('AnalyserNode', 'new AnalyserNode(#)', context);
 
-  int fftSize;
+  int get fftSize => JS("int", "#.fftSize", this);
 
-  final int frequencyBinCount;
+  set fftSize(int value) {
+    JS("void", "#.fftSize = #", this, value);
+  }
 
-  num maxDecibels;
+  int get frequencyBinCount => JS("int", "#.frequencyBinCount", this);
 
-  num minDecibels;
+  num get maxDecibels => JS("num", "#.maxDecibels", this);
 
-  num smoothingTimeConstant;
+  set maxDecibels(num value) {
+    JS("void", "#.maxDecibels = #", this, value);
+  }
+
+  num get minDecibels => JS("num", "#.minDecibels", this);
+
+  set minDecibels(num value) {
+    JS("void", "#.minDecibels = #", this, value);
+  }
+
+  num get smoothingTimeConstant => JS("num", "#.smoothingTimeConstant", this);
+
+  set smoothingTimeConstant(num value) {
+    JS("void", "#.smoothingTimeConstant = #", this, value);
+  }
 
   void getByteFrequencyData(Uint8List array) native;
 
@@ -87,19 +102,19 @@
   static AudioBuffer _create_1(options) =>
       JS('AudioBuffer', 'new AudioBuffer(#)', options);
 
-  final num duration;
+  num get duration => JS("num", "#.duration", this);
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
-  final int numberOfChannels;
+  int get numberOfChannels => JS("int", "#.numberOfChannels", this);
 
-  final num sampleRate;
+  num get sampleRate => JS("num", "#.sampleRate", this);
 
   void copyFromChannel(Float32List destination, int channelNumber,
-      [int startInChannel]) native;
+      [int? startInChannel]) native;
 
   void copyToChannel(Float32List source, int channelNumber,
-      [int startInChannel]) native;
+      [int? startInChannel]) native;
 
   Float32List getChannelData(int channelIndex) native;
 }
@@ -116,7 +131,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory AudioBufferSourceNode(BaseAudioContext context, [Map options]) {
+  factory AudioBufferSourceNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return AudioBufferSourceNode._create_1(context, options_1);
@@ -131,19 +146,31 @@
   static AudioBufferSourceNode _create_2(context) =>
       JS('AudioBufferSourceNode', 'new AudioBufferSourceNode(#)', context);
 
-  AudioBuffer buffer;
+  AudioBuffer? buffer;
 
-  final AudioParam detune;
+  AudioParam get detune => JS("AudioParam", "#.detune", this);
 
-  bool loop;
+  bool get loop => JS("bool", "#.loop", this);
 
-  num loopEnd;
+  set loop(bool value) {
+    JS("void", "#.loop = #", this, value);
+  }
 
-  num loopStart;
+  num get loopEnd => JS("num", "#.loopEnd", this);
 
-  final AudioParam playbackRate;
+  set loopEnd(num value) {
+    JS("void", "#.loopEnd = #", this, value);
+  }
 
-  void start([num when, num grainOffset, num grainDuration]) native;
+  num get loopStart => JS("num", "#.loopStart", this);
+
+  set loopStart(num value) {
+    JS("void", "#.loopStart = #", this, value);
+  }
+
+  AudioParam get playbackRate => JS("AudioParam", "#.playbackRate", this);
+
+  void start([num? when, num? grainOffset, num? grainDuration]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -162,7 +189,7 @@
   static bool get supported =>
       JS('bool', '!!(window.AudioContext || window.webkitAudioContext)');
 
-  final num baseLatency;
+  num get baseLatency => JS("num", "#.baseLatency", this);
 
   Future close() => promiseToFuture(JS("", "#.close()", this));
 
@@ -187,7 +214,9 @@
   }
 
   ScriptProcessorNode createScriptProcessor(
-      [int bufferSize, int numberOfInputChannels, int numberOfOutputChannels]) {
+      [int? bufferSize,
+      int? numberOfInputChannels,
+      int? numberOfOutputChannels]) {
     var function = JS(
         '=Object',
         '#.createScriptProcessor || '
@@ -214,8 +243,8 @@
       DecodeErrorCallback errorCallback]) native;
 
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
-      [DecodeSuccessCallback successCallback,
-      DecodeErrorCallback errorCallback]) {
+      [DecodeSuccessCallback? successCallback,
+      DecodeErrorCallback? errorCallback]) {
     if (successCallback != null && errorCallback != null) {
       return _decodeAudioData(audioData, successCallback, errorCallback);
     }
@@ -244,7 +273,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int maxChannelCount;
+  int get maxChannelCount => JS("int", "#.maxChannelCount", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -257,23 +286,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final AudioParam forwardX;
+  AudioParam get forwardX => JS("AudioParam", "#.forwardX", this);
 
-  final AudioParam forwardY;
+  AudioParam get forwardY => JS("AudioParam", "#.forwardY", this);
 
-  final AudioParam forwardZ;
+  AudioParam get forwardZ => JS("AudioParam", "#.forwardZ", this);
 
-  final AudioParam positionX;
+  AudioParam get positionX => JS("AudioParam", "#.positionX", this);
 
-  final AudioParam positionY;
+  AudioParam get positionY => JS("AudioParam", "#.positionY", this);
 
-  final AudioParam positionZ;
+  AudioParam get positionZ => JS("AudioParam", "#.positionZ", this);
 
-  final AudioParam upX;
+  AudioParam get upX => JS("AudioParam", "#.upX", this);
 
-  final AudioParam upY;
+  AudioParam get upY => JS("AudioParam", "#.upY", this);
 
-  final AudioParam upZ;
+  AudioParam get upZ => JS("AudioParam", "#.upZ", this);
 
   void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native;
 
@@ -290,22 +319,35 @@
     throw new UnsupportedError("Not supported");
   }
 
-  int channelCount;
+  int get channelCount => JS("int", "#.channelCount", this);
 
-  String channelCountMode;
+  set channelCount(int value) {
+    JS("void", "#.channelCount = #", this, value);
+  }
 
-  String channelInterpretation;
+  String get channelCountMode => JS("String", "#.channelCountMode", this);
 
-  final BaseAudioContext context;
+  set channelCountMode(String value) {
+    JS("void", "#.channelCountMode = #", this, value);
+  }
 
-  final int numberOfInputs;
+  String get channelInterpretation =>
+      JS("String", "#.channelInterpretation", this);
 
-  final int numberOfOutputs;
+  set channelInterpretation(String value) {
+    JS("void", "#.channelInterpretation = #", this, value);
+  }
+
+  BaseAudioContext get context => JS("BaseAudioContext", "#.context", this);
+
+  int get numberOfInputs => JS("int", "#.numberOfInputs", this);
+
+  int get numberOfOutputs => JS("int", "#.numberOfOutputs", this);
 
   @JSName('connect')
-  AudioNode _connect(destination, [int output, int input]) native;
+  AudioNode _connect(destination, [int? output, int? input]) native;
 
-  void disconnect([destination_OR_output, int output, int input]) native;
+  void disconnect([destination_OR_output, int? output, int? input]) native;
 
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) {
     _connect(destination, output, input);
@@ -326,13 +368,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num defaultValue;
+  num get defaultValue => JS("num", "#.defaultValue", this);
 
-  final num maxValue;
+  num get maxValue => JS("num", "#.maxValue", this);
 
-  final num minValue;
+  num get minValue => JS("num", "#.minValue", this);
 
-  num value;
+  num get value => JS("num", "#.value", this);
+
+  set value(num value) {
+    JS("void", "#.value = #", this, value);
+  }
 
   AudioParam cancelAndHoldAtTime(num startTime) native;
 
@@ -438,11 +484,11 @@
       type,
       eventInitDict);
 
-  final AudioBuffer inputBuffer;
+  AudioBuffer get inputBuffer => JS("AudioBuffer", "#.inputBuffer", this);
 
-  final AudioBuffer outputBuffer;
+  AudioBuffer get outputBuffer => JS("AudioBuffer", "#.outputBuffer", this);
 
-  final num playbackTime;
+  num get playbackTime => JS("num", "#.playbackTime", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -459,9 +505,9 @@
       const EventStreamProvider<Event>('ended');
 
   @JSName('start')
-  void start2([num when]) native;
+  void start2([num? when]) native;
 
-  void stop([num when]) native;
+  void stop([num? when]) native;
 
   Stream<Event> get onEnded => endedEvent.forTarget(this);
 }
@@ -476,17 +522,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  bool enabled;
+  bool get enabled => JS("bool", "#.enabled", this);
 
-  final String id;
+  set enabled(bool value) {
+    JS("void", "#.enabled = #", this, value);
+  }
 
-  final String kind;
+  String get id => JS("String", "#.id", this);
 
-  final String label;
+  String get kind => JS("String", "#.kind", this);
 
-  final String language;
+  String get label => JS("String", "#.label", this);
 
-  final SourceBuffer sourceBuffer;
+  String get language => JS("String", "#.language", this);
+
+  final SourceBuffer? sourceBuffer;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -502,7 +552,7 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   AudioTrack __getter__(int index) native;
 
@@ -521,9 +571,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num currentTime;
+  num get currentTime => JS("num", "#.currentTime", this);
 
-  final num sampleRate;
+  num get sampleRate => JS("num", "#.sampleRate", this);
 
   void registerProcessor(String name, Object processorConstructor) native;
 }
@@ -539,7 +589,7 @@
   }
 
   factory AudioWorkletNode(BaseAudioContext context, String name,
-      [Map options]) {
+      [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return AudioWorkletNode._create_1(context, name, options_1);
@@ -555,7 +605,7 @@
   static AudioWorkletNode _create_2(context, name) =>
       JS('AudioWorkletNode', 'new AudioWorkletNode(#,#)', context, name);
 
-  final AudioParamMap parameters;
+  AudioParamMap get parameters => JS("AudioParamMap", "#.parameters", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -579,15 +629,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final num currentTime;
+  num get currentTime => JS("num", "#.currentTime", this);
 
-  final AudioDestinationNode destination;
+  AudioDestinationNode get destination =>
+      JS("AudioDestinationNode", "#.destination", this);
 
-  final AudioListener listener;
+  AudioListener get listener => JS("AudioListener", "#.listener", this);
 
-  final num sampleRate;
+  num get sampleRate => JS("num", "#.sampleRate", this);
 
-  final String state;
+  String get state => JS("String", "#.state", this);
 
   AnalyserNode createAnalyser() native;
 
@@ -598,15 +649,15 @@
 
   AudioBufferSourceNode createBufferSource() native;
 
-  ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
+  ChannelMergerNode createChannelMerger([int? numberOfInputs]) native;
 
-  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
+  ChannelSplitterNode createChannelSplitter([int? numberOfOutputs]) native;
 
   ConstantSourceNode createConstantSource() native;
 
   ConvolverNode createConvolver() native;
 
-  DelayNode createDelay([num maxDelayTime]) native;
+  DelayNode createDelay([num? maxDelayTime]) native;
 
   DynamicsCompressorNode createDynamicsCompressor() native;
 
@@ -629,7 +680,7 @@
   PannerNode createPanner() native;
 
   PeriodicWave createPeriodicWave(List<num> real, List<num> imag,
-      [Map options]) {
+      [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return _createPeriodicWave_1(real, imag, options_1);
@@ -644,17 +695,17 @@
   PeriodicWave _createPeriodicWave_2(List<num> real, List<num> imag) native;
 
   ScriptProcessorNode createScriptProcessor(
-      [int bufferSize,
-      int numberOfInputChannels,
-      int numberOfOutputChannels]) native;
+      [int? bufferSize,
+      int? numberOfInputChannels,
+      int? numberOfOutputChannels]) native;
 
   StereoPannerNode createStereoPanner() native;
 
   WaveShaperNode createWaveShaper() native;
 
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
-          [DecodeSuccessCallback successCallback,
-          DecodeErrorCallback errorCallback]) =>
+          [DecodeSuccessCallback? successCallback,
+          DecodeErrorCallback? errorCallback]) =>
       promiseToFuture<AudioBuffer>(JS("", "#.decodeAudioData(#, #, #)", this,
           audioData, successCallback, errorCallback));
 
@@ -671,7 +722,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory BiquadFilterNode(BaseAudioContext context, [Map options]) {
+  factory BiquadFilterNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return BiquadFilterNode._create_1(context, options_1);
@@ -683,15 +734,19 @@
   static BiquadFilterNode _create_2(context) =>
       JS('BiquadFilterNode', 'new BiquadFilterNode(#)', context);
 
-  final AudioParam Q;
+  AudioParam get Q => JS("AudioParam", "#.Q", this);
 
-  final AudioParam detune;
+  AudioParam get detune => JS("AudioParam", "#.detune", this);
 
-  final AudioParam frequency;
+  AudioParam get frequency => JS("AudioParam", "#.frequency", this);
 
-  final AudioParam gain;
+  AudioParam get gain => JS("AudioParam", "#.gain", this);
 
-  String type;
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
   void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse,
       Float32List phaseResponse) native;
@@ -707,7 +762,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ChannelMergerNode(BaseAudioContext context, [Map options]) {
+  factory ChannelMergerNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return ChannelMergerNode._create_1(context, options_1);
@@ -730,7 +785,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ChannelSplitterNode(BaseAudioContext context, [Map options]) {
+  factory ChannelSplitterNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return ChannelSplitterNode._create_1(context, options_1);
@@ -753,7 +808,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ConstantSourceNode(BaseAudioContext context, [Map options]) {
+  factory ConstantSourceNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return ConstantSourceNode._create_1(context, options_1);
@@ -765,7 +820,7 @@
   static ConstantSourceNode _create_2(context) =>
       JS('ConstantSourceNode', 'new ConstantSourceNode(#)', context);
 
-  final AudioParam offset;
+  AudioParam get offset => JS("AudioParam", "#.offset", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -778,7 +833,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ConvolverNode(BaseAudioContext context, [Map options]) {
+  factory ConvolverNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return ConvolverNode._create_1(context, options_1);
@@ -790,9 +845,13 @@
   static ConvolverNode _create_2(context) =>
       JS('ConvolverNode', 'new ConvolverNode(#)', context);
 
-  AudioBuffer buffer;
+  AudioBuffer? buffer;
 
-  bool normalize;
+  bool get normalize => JS("bool", "#.normalize", this);
+
+  set normalize(bool value) {
+    JS("void", "#.normalize = #", this, value);
+  }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -805,7 +864,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DelayNode(BaseAudioContext context, [Map options]) {
+  factory DelayNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return DelayNode._create_1(context, options_1);
@@ -817,7 +876,7 @@
   static DelayNode _create_2(context) =>
       JS('DelayNode', 'new DelayNode(#)', context);
 
-  final AudioParam delayTime;
+  AudioParam get delayTime => JS("AudioParam", "#.delayTime", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -830,7 +889,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory DynamicsCompressorNode(BaseAudioContext context, [Map options]) {
+  factory DynamicsCompressorNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return DynamicsCompressorNode._create_1(context, options_1);
@@ -845,17 +904,17 @@
   static DynamicsCompressorNode _create_2(context) =>
       JS('DynamicsCompressorNode', 'new DynamicsCompressorNode(#)', context);
 
-  final AudioParam attack;
+  AudioParam get attack => JS("AudioParam", "#.attack", this);
 
-  final AudioParam knee;
+  AudioParam get knee => JS("AudioParam", "#.knee", this);
 
-  final AudioParam ratio;
+  AudioParam get ratio => JS("AudioParam", "#.ratio", this);
 
-  final num reduction;
+  num get reduction => JS("num", "#.reduction", this);
 
-  final AudioParam release;
+  AudioParam get release => JS("AudioParam", "#.release", this);
 
-  final AudioParam threshold;
+  AudioParam get threshold => JS("AudioParam", "#.threshold", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -868,7 +927,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory GainNode(BaseAudioContext context, [Map options]) {
+  factory GainNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return GainNode._create_1(context, options_1);
@@ -880,7 +939,7 @@
   static GainNode _create_2(context) =>
       JS('GainNode', 'new GainNode(#)', context);
 
-  final AudioParam gain;
+  AudioParam get gain => JS("AudioParam", "#.gain", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -924,7 +983,7 @@
       context,
       options);
 
-  final MediaElement mediaElement;
+  MediaElement get mediaElement => JS("MediaElement", "#.mediaElement", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -938,7 +997,7 @@
   }
 
   factory MediaStreamAudioDestinationNode(BaseAudioContext context,
-      [Map options]) {
+      [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return MediaStreamAudioDestinationNode._create_1(context, options_1);
@@ -955,7 +1014,7 @@
       'new MediaStreamAudioDestinationNode(#)',
       context);
 
-  final MediaStream stream;
+  MediaStream get stream => JS("MediaStream", "#.stream", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -978,7 +1037,7 @@
       context,
       options);
 
-  final MediaStream mediaStream;
+  MediaStream get mediaStream => JS("MediaStream", "#.mediaStream", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1001,7 +1060,7 @@
       type,
       eventInitDict);
 
-  final AudioBuffer renderedBuffer;
+  AudioBuffer get renderedBuffer => JS("AudioBuffer", "#.renderedBuffer", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1015,7 +1074,7 @@
   }
 
   factory OfflineAudioContext(numberOfChannels_OR_options,
-      [int numberOfFrames, num sampleRate]) {
+      [int? numberOfFrames, num? sampleRate]) {
     if ((sampleRate is num) &&
         (numberOfFrames is int) &&
         (numberOfChannels_OR_options is int)) {
@@ -1040,7 +1099,7 @@
       'new OfflineAudioContext(#)',
       numberOfChannels_OR_options);
 
-  final int length;
+  int get length => JS("int", "#.length", this);
 
   Future<AudioBuffer> startRendering() =>
       promiseToFuture<AudioBuffer>(JS("", "#.startRendering()", this));
@@ -1060,7 +1119,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory OscillatorNode(BaseAudioContext context, [Map options]) {
+  factory OscillatorNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return OscillatorNode._create_1(context, options_1);
@@ -1072,11 +1131,15 @@
   static OscillatorNode _create_2(context) =>
       JS('OscillatorNode', 'new OscillatorNode(#)', context);
 
-  final AudioParam detune;
+  AudioParam get detune => JS("AudioParam", "#.detune", this);
 
-  final AudioParam frequency;
+  AudioParam get frequency => JS("AudioParam", "#.frequency", this);
 
-  String type;
+  String get type => JS("String", "#.type", this);
+
+  set type(String value) {
+    JS("void", "#.type = #", this, value);
+  }
 
   void setPeriodicWave(PeriodicWave periodicWave) native;
 }
@@ -1091,7 +1154,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PannerNode(BaseAudioContext context, [Map options]) {
+  factory PannerNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return PannerNode._create_1(context, options_1);
@@ -1103,33 +1166,65 @@
   static PannerNode _create_2(context) =>
       JS('PannerNode', 'new PannerNode(#)', context);
 
-  num coneInnerAngle;
+  num get coneInnerAngle => JS("num", "#.coneInnerAngle", this);
 
-  num coneOuterAngle;
+  set coneInnerAngle(num value) {
+    JS("void", "#.coneInnerAngle = #", this, value);
+  }
 
-  num coneOuterGain;
+  num get coneOuterAngle => JS("num", "#.coneOuterAngle", this);
 
-  String distanceModel;
+  set coneOuterAngle(num value) {
+    JS("void", "#.coneOuterAngle = #", this, value);
+  }
 
-  num maxDistance;
+  num get coneOuterGain => JS("num", "#.coneOuterGain", this);
 
-  final AudioParam orientationX;
+  set coneOuterGain(num value) {
+    JS("void", "#.coneOuterGain = #", this, value);
+  }
 
-  final AudioParam orientationY;
+  String get distanceModel => JS("String", "#.distanceModel", this);
 
-  final AudioParam orientationZ;
+  set distanceModel(String value) {
+    JS("void", "#.distanceModel = #", this, value);
+  }
 
-  String panningModel;
+  num get maxDistance => JS("num", "#.maxDistance", this);
 
-  final AudioParam positionX;
+  set maxDistance(num value) {
+    JS("void", "#.maxDistance = #", this, value);
+  }
 
-  final AudioParam positionY;
+  AudioParam get orientationX => JS("AudioParam", "#.orientationX", this);
 
-  final AudioParam positionZ;
+  AudioParam get orientationY => JS("AudioParam", "#.orientationY", this);
 
-  num refDistance;
+  AudioParam get orientationZ => JS("AudioParam", "#.orientationZ", this);
 
-  num rolloffFactor;
+  String get panningModel => JS("String", "#.panningModel", this);
+
+  set panningModel(String value) {
+    JS("void", "#.panningModel = #", this, value);
+  }
+
+  AudioParam get positionX => JS("AudioParam", "#.positionX", this);
+
+  AudioParam get positionY => JS("AudioParam", "#.positionY", this);
+
+  AudioParam get positionZ => JS("AudioParam", "#.positionZ", this);
+
+  num get refDistance => JS("num", "#.refDistance", this);
+
+  set refDistance(num value) {
+    JS("void", "#.refDistance = #", this, value);
+  }
+
+  num get rolloffFactor => JS("num", "#.rolloffFactor", this);
+
+  set rolloffFactor(num value) {
+    JS("void", "#.rolloffFactor = #", this, value);
+  }
 
   void setOrientation(num x, num y, num z) native;
 
@@ -1146,7 +1241,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory PeriodicWave(BaseAudioContext context, [Map options]) {
+  factory PeriodicWave(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return PeriodicWave._create_1(context, options_1);
@@ -1178,7 +1273,7 @@
   static const EventStreamProvider<AudioProcessingEvent> audioProcessEvent =
       const EventStreamProvider<AudioProcessingEvent>('audioprocess');
 
-  final int bufferSize;
+  int get bufferSize => JS("int", "#.bufferSize", this);
 
   void setEventListener(EventListener eventListener) native;
 
@@ -1204,7 +1299,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory StereoPannerNode(BaseAudioContext context, [Map options]) {
+  factory StereoPannerNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return StereoPannerNode._create_1(context, options_1);
@@ -1216,7 +1311,7 @@
   static StereoPannerNode _create_2(context) =>
       JS('StereoPannerNode', 'new StereoPannerNode(#)', context);
 
-  final AudioParam pan;
+  AudioParam get pan => JS("AudioParam", "#.pan", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1229,7 +1324,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory WaveShaperNode(BaseAudioContext context, [Map options]) {
+  factory WaveShaperNode(BaseAudioContext context, [Map? options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
       return WaveShaperNode._create_1(context, options_1);
@@ -1241,7 +1336,11 @@
   static WaveShaperNode _create_2(context) =>
       JS('WaveShaperNode', 'new WaveShaperNode(#)', context);
 
-  Float32List curve;
+  Float32List? curve;
 
-  String oversample;
+  String get oversample => JS("String", "#.oversample", this);
+
+  set oversample(String value) {
+    JS("void", "#.oversample = #", this, value);
+  }
 }
diff --git a/sdk_nnbd/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk_nnbd/lib/web_gl/dart2js/web_gl_dart2js.dart
index 77e0a9f..f47047a 100644
--- a/sdk_nnbd/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk_nnbd/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -1,4 +1,3 @@
-// @dart = 2.5
 /**
  * 3D programming in the browser.
  *
@@ -33,11 +32,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final String name;
+  String get name => JS("String", "#.name", this);
 
-  final int size;
+  int get size => JS("int", "#.size", this);
 
-  final int type;
+  int get type => JS("int", "#.type", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -301,7 +300,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  factory ContextEvent(String type, [Map eventInit]) {
+  factory ContextEvent(String type, [Map? eventInit]) {
     if (eventInit != null) {
       var eventInit_1 = convertDartToNative_Dictionary(eventInit);
       return ContextEvent._create_1(type, eventInit_1);
@@ -313,7 +312,7 @@
   static ContextEvent _create_2(type) =>
       JS('ContextEvent', 'new WebGLContextEvent(#)', type);
 
-  final String statusMessage;
+  String get statusMessage => JS("String", "#.statusMessage", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -458,7 +457,7 @@
   TimerQueryExt createQueryExt() native;
 
   @JSName('deleteQueryEXT')
-  void deleteQueryExt(TimerQueryExt query) native;
+  void deleteQueryExt(TimerQueryExt? query) native;
 
   @JSName('endQueryEXT')
   void endQueryExt(int target) native;
@@ -470,7 +469,7 @@
   Object getQueryObjectExt(TimerQueryExt query, int pname) native;
 
   @JSName('isQueryEXT')
-  bool isQueryExt(TimerQueryExt query) native;
+  bool isQueryExt(TimerQueryExt? query) native;
 
   @JSName('queryCounterEXT')
   void queryCounterExt(TimerQueryExt query, int target) native;
@@ -558,7 +557,7 @@
   }
 
   Future getBufferSubDataAsync(int target, int srcByteOffset, TypedData dstData,
-          [int dstOffset, int length]) =>
+          [int? dstOffset, int? length]) =>
       promiseToFuture(JS("", "#.getBufferSubDataAsync(#, #, #, #, #)", this,
           target, srcByteOffset, dstData, dstOffset, length));
 }
@@ -661,16 +660,16 @@
   static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
   @JSName('bindVertexArrayOES')
-  void bindVertexArray(VertexArrayObjectOes arrayObject) native;
+  void bindVertexArray(VertexArrayObjectOes? arrayObject) native;
 
   @JSName('createVertexArrayOES')
   VertexArrayObjectOes createVertexArray() native;
 
   @JSName('deleteVertexArrayOES')
-  void deleteVertexArray(VertexArrayObjectOes arrayObject) native;
+  void deleteVertexArray(VertexArrayObjectOes? arrayObject) native;
 
   @JSName('isVertexArrayOES')
-  bool isVertexArray(VertexArrayObjectOes arrayObject) native;
+  bool isVertexArray(VertexArrayObjectOes? arrayObject) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -724,13 +723,13 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.WebGLRenderingContext)');
 
-  final CanvasElement canvas;
+  CanvasElement get canvas => JS("CanvasElement", "#.canvas", this);
 
   // From WebGLRenderingContextBase
 
-  final int drawingBufferHeight;
+  int get drawingBufferHeight => JS("int", "#.drawingBufferHeight", this);
 
-  final int drawingBufferWidth;
+  int get drawingBufferWidth => JS("int", "#.drawingBufferWidth", this);
 
   void activeTexture(int texture) native;
 
@@ -738,13 +737,13 @@
 
   void bindAttribLocation(Program program, int index, String name) native;
 
-  void bindBuffer(int target, Buffer buffer) native;
+  void bindBuffer(int target, Buffer? buffer) native;
 
-  void bindFramebuffer(int target, Framebuffer framebuffer) native;
+  void bindFramebuffer(int target, Framebuffer? framebuffer) native;
 
-  void bindRenderbuffer(int target, Renderbuffer renderbuffer) native;
+  void bindRenderbuffer(int target, Renderbuffer? renderbuffer) native;
 
-  void bindTexture(int target, Texture texture) native;
+  void bindTexture(int target, Texture? texture) native;
 
   void blendColor(num red, num green, num blue, num alpha) native;
 
@@ -803,17 +802,17 @@
 
   void cullFace(int mode) native;
 
-  void deleteBuffer(Buffer buffer) native;
+  void deleteBuffer(Buffer? buffer) native;
 
-  void deleteFramebuffer(Framebuffer framebuffer) native;
+  void deleteFramebuffer(Framebuffer? framebuffer) native;
 
-  void deleteProgram(Program program) native;
+  void deleteProgram(Program? program) native;
 
-  void deleteRenderbuffer(Renderbuffer renderbuffer) native;
+  void deleteRenderbuffer(Renderbuffer? renderbuffer) native;
 
-  void deleteShader(Shader shader) native;
+  void deleteShader(Shader? shader) native;
 
-  void deleteTexture(Texture texture) native;
+  void deleteTexture(Texture? texture) native;
 
   void depthFunc(int func) native;
 
@@ -840,10 +839,10 @@
   void flush() native;
 
   void framebufferRenderbuffer(int target, int attachment,
-      int renderbuffertarget, Renderbuffer renderbuffer) native;
+      int renderbuffertarget, Renderbuffer? renderbuffer) native;
 
   void framebufferTexture2D(int target, int attachment, int textarget,
-      Texture texture, int level) native;
+      Texture? texture, int level) native;
 
   void frontFace(int mode) native;
 
@@ -928,21 +927,21 @@
 
   void hint(int target, int mode) native;
 
-  bool isBuffer(Buffer buffer) native;
+  bool isBuffer(Buffer? buffer) native;
 
   bool isContextLost() native;
 
   bool isEnabled(int cap) native;
 
-  bool isFramebuffer(Framebuffer framebuffer) native;
+  bool isFramebuffer(Framebuffer? framebuffer) native;
 
-  bool isProgram(Program program) native;
+  bool isProgram(Program? program) native;
 
-  bool isRenderbuffer(Renderbuffer renderbuffer) native;
+  bool isRenderbuffer(Renderbuffer? renderbuffer) native;
 
-  bool isShader(Shader shader) native;
+  bool isShader(Shader? shader) native;
 
-  bool isTexture(Texture texture) native;
+  bool isTexture(Texture? texture) native;
 
   void lineWidth(num width) native;
 
@@ -954,7 +953,7 @@
 
   @JSName('readPixels')
   void _readPixels(int x, int y, int width, int height, int format, int type,
-      TypedData pixels) native;
+      TypedData? pixels) native;
 
   void renderbufferStorage(
       int target, int internalformat, int width, int height) native;
@@ -984,9 +983,9 @@
       int format_OR_width,
       int height_OR_type,
       bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video,
-      [int format,
-      int type,
-      TypedData pixels]) {
+      [int? format,
+      int? type,
+      TypedData? pixels]) {
     if (type != null &&
         format != null &&
         (bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video is int)) {
@@ -1073,7 +1072,7 @@
 
   @JSName('texImage2D')
   void _texImage2D_1(target, level, internalformat, width, height, int border,
-      format, type, TypedData pixels) native;
+      format, type, TypedData? pixels) native;
   @JSName('texImage2D')
   void _texImage2D_2(target, level, internalformat, format, type, pixels)
       native;
@@ -1102,8 +1101,8 @@
       int format_OR_width,
       int height_OR_type,
       bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video,
-      [int type,
-      TypedData pixels]) {
+      [int? type,
+      TypedData? pixels]) {
     if (type != null &&
         (bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video is int)) {
       _texSubImage2D_1(
@@ -1188,7 +1187,7 @@
 
   @JSName('texSubImage2D')
   void _texSubImage2D_1(target, level, xoffset, yoffset, width, height,
-      int format, type, TypedData pixels) native;
+      int format, type, TypedData? pixels) native;
   @JSName('texSubImage2D')
   void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels)
       native;
@@ -1205,45 +1204,48 @@
   void _texSubImage2D_6(
       target, level, xoffset, yoffset, format, type, ImageBitmap bitmap) native;
 
-  void uniform1f(UniformLocation location, num x) native;
+  void uniform1f(UniformLocation? location, num x) native;
 
-  void uniform1fv(UniformLocation location, v) native;
+  void uniform1fv(UniformLocation? location, v) native;
 
-  void uniform1i(UniformLocation location, int x) native;
+  void uniform1i(UniformLocation? location, int x) native;
 
-  void uniform1iv(UniformLocation location, v) native;
+  void uniform1iv(UniformLocation? location, v) native;
 
-  void uniform2f(UniformLocation location, num x, num y) native;
+  void uniform2f(UniformLocation? location, num x, num y) native;
 
-  void uniform2fv(UniformLocation location, v) native;
+  void uniform2fv(UniformLocation? location, v) native;
 
-  void uniform2i(UniformLocation location, int x, int y) native;
+  void uniform2i(UniformLocation? location, int x, int y) native;
 
-  void uniform2iv(UniformLocation location, v) native;
+  void uniform2iv(UniformLocation? location, v) native;
 
-  void uniform3f(UniformLocation location, num x, num y, num z) native;
+  void uniform3f(UniformLocation? location, num x, num y, num z) native;
 
-  void uniform3fv(UniformLocation location, v) native;
+  void uniform3fv(UniformLocation? location, v) native;
 
-  void uniform3i(UniformLocation location, int x, int y, int z) native;
+  void uniform3i(UniformLocation? location, int x, int y, int z) native;
 
-  void uniform3iv(UniformLocation location, v) native;
+  void uniform3iv(UniformLocation? location, v) native;
 
-  void uniform4f(UniformLocation location, num x, num y, num z, num w) native;
+  void uniform4f(UniformLocation? location, num x, num y, num z, num w) native;
 
-  void uniform4fv(UniformLocation location, v) native;
+  void uniform4fv(UniformLocation? location, v) native;
 
-  void uniform4i(UniformLocation location, int x, int y, int z, int w) native;
+  void uniform4i(UniformLocation? location, int x, int y, int z, int w) native;
 
-  void uniform4iv(UniformLocation location, v) native;
+  void uniform4iv(UniformLocation? location, v) native;
 
-  void uniformMatrix2fv(UniformLocation location, bool transpose, array) native;
+  void uniformMatrix2fv(UniformLocation? location, bool transpose, array)
+      native;
 
-  void uniformMatrix3fv(UniformLocation location, bool transpose, array) native;
+  void uniformMatrix3fv(UniformLocation? location, bool transpose, array)
+      native;
 
-  void uniformMatrix4fv(UniformLocation location, bool transpose, array) native;
+  void uniformMatrix4fv(UniformLocation? location, bool transpose, array)
+      native;
 
-  void useProgram(Program program) native;
+  void useProgram(Program? program) native;
 
   void validateProgram(Program program) native;
 
@@ -1361,7 +1363,7 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final Canvas canvas;
+  Canvas get canvas => JS("Canvas", "#.canvas", this);
 
   // From WebGL2RenderingContextBase
 
@@ -1369,36 +1371,38 @@
 
   void beginTransformFeedback(int primitiveMode) native;
 
-  void bindBufferBase(int target, int index, Buffer buffer) native;
+  void bindBufferBase(int target, int index, Buffer? buffer) native;
 
   void bindBufferRange(
-      int target, int index, Buffer buffer, int offset, int size) native;
+      int target, int index, Buffer? buffer, int offset, int size) native;
 
-  void bindSampler(int unit, Sampler sampler) native;
+  void bindSampler(int unit, Sampler? sampler) native;
 
-  void bindTransformFeedback(int target, TransformFeedback feedback) native;
+  void bindTransformFeedback(int target, TransformFeedback? feedback) native;
 
-  void bindVertexArray(VertexArrayObject vertexArray) native;
+  void bindVertexArray(VertexArrayObject? vertexArray) native;
 
   void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0,
       int dstY0, int dstX1, int dstY1, int mask, int filter) native;
 
   @JSName('bufferData')
   void bufferData2(int target, TypedData srcData, int usage, int srcOffset,
-      [int length]) native;
+      [int? length]) native;
 
   @JSName('bufferSubData')
   void bufferSubData2(
       int target, int dstByteOffset, TypedData srcData, int srcOffset,
-      [int length]) native;
+      [int? length]) native;
 
   void clearBufferfi(int buffer, int drawbuffer, num depth, int stencil) native;
 
-  void clearBufferfv(int buffer, int drawbuffer, value, [int srcOffset]) native;
+  void clearBufferfv(int buffer, int drawbuffer, value, [int? srcOffset])
+      native;
 
-  void clearBufferiv(int buffer, int drawbuffer, value, [int srcOffset]) native;
+  void clearBufferiv(int buffer, int drawbuffer, value, [int? srcOffset])
+      native;
 
-  void clearBufferuiv(int buffer, int drawbuffer, value, [int srcOffset])
+  void clearBufferuiv(int buffer, int drawbuffer, value, [int? srcOffset])
       native;
 
   int clientWaitSync(Sync sync, int flags, int timeout) native;
@@ -1406,7 +1410,7 @@
   @JSName('compressedTexImage2D')
   void compressedTexImage2D2(int target, int level, int internalformat,
       int width, int height, int border, TypedData data, int srcOffset,
-      [int srcLengthOverride]) native;
+      [int? srcLengthOverride]) native;
 
   @JSName('compressedTexImage2D')
   void compressedTexImage2D3(int target, int level, int internalformat,
@@ -1414,7 +1418,7 @@
 
   void compressedTexImage3D(int target, int level, int internalformat,
       int width, int height, int depth, int border, TypedData data,
-      [int srcOffset, int srcLengthOverride]) native;
+      [int? srcOffset, int? srcLengthOverride]) native;
 
   @JSName('compressedTexImage3D')
   void compressedTexImage3D2(
@@ -1431,7 +1435,7 @@
   @JSName('compressedTexSubImage2D')
   void compressedTexSubImage2D2(int target, int level, int xoffset, int yoffset,
       int width, int height, int format, TypedData data, int srcOffset,
-      [int srcLengthOverride]) native;
+      [int? srcLengthOverride]) native;
 
   @JSName('compressedTexSubImage2D')
   void compressedTexSubImage2D3(int target, int level, int xoffset, int yoffset,
@@ -1439,7 +1443,7 @@
 
   void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset,
       int zoffset, int width, int height, int depth, int format, TypedData data,
-      [int srcOffset, int srcLengthOverride]) native;
+      [int? srcOffset, int? srcLengthOverride]) native;
 
   @JSName('compressedTexSubImage3D')
   void compressedTexSubImage3D2(
@@ -1469,15 +1473,15 @@
 
   VertexArrayObject createVertexArray() native;
 
-  void deleteQuery(Query query) native;
+  void deleteQuery(Query? query) native;
 
-  void deleteSampler(Sampler sampler) native;
+  void deleteSampler(Sampler? sampler) native;
 
-  void deleteSync(Sync sync) native;
+  void deleteSync(Sync? sync) native;
 
-  void deleteTransformFeedback(TransformFeedback feedback) native;
+  void deleteTransformFeedback(TransformFeedback? feedback) native;
 
-  void deleteVertexArray(VertexArrayObject vertexArray) native;
+  void deleteVertexArray(VertexArrayObject? vertexArray) native;
 
   void drawArraysInstanced(int mode, int first, int count, int instanceCount)
       native;
@@ -1496,8 +1500,8 @@
 
   Sync fenceSync(int condition, int flags) native;
 
-  void framebufferTextureLayer(
-      int target, int attachment, Texture texture, int level, int layer) native;
+  void framebufferTextureLayer(int target, int attachment, Texture? texture,
+      int level, int layer) native;
 
   String getActiveUniformBlockName(Program program, int uniformBlockIndex)
       native;
@@ -1509,7 +1513,7 @@
       native;
 
   void getBufferSubData(int target, int srcByteOffset, TypedData dstData,
-      [int dstOffset, int length]) native;
+      [int? dstOffset, int? length]) native;
 
   int getFragDataLocation(Program program, String name) native;
 
@@ -1543,15 +1547,15 @@
   void invalidateSubFramebuffer(int target, List<int> attachments, int x, int y,
       int width, int height) native;
 
-  bool isQuery(Query query) native;
+  bool isQuery(Query? query) native;
 
-  bool isSampler(Sampler sampler) native;
+  bool isSampler(Sampler? sampler) native;
 
-  bool isSync(Sync sync) native;
+  bool isSync(Sync? sync) native;
 
-  bool isTransformFeedback(TransformFeedback feedback) native;
+  bool isTransformFeedback(TransformFeedback? feedback) native;
 
-  bool isVertexArray(VertexArrayObject vertexArray) native;
+  bool isVertexArray(VertexArrayObject? vertexArray) native;
 
   void pauseTransformFeedback() native;
 
@@ -1560,7 +1564,7 @@
   @JSName('readPixels')
   void readPixels2(int x, int y, int width, int height, int format, int type,
       dstData_OR_offset,
-      [int offset]) native;
+      [int? offset]) native;
 
   void renderbufferStorageMultisample(int target, int samples,
       int internalformat, int width, int height) native;
@@ -1581,7 +1585,7 @@
       int format,
       int type,
       bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video,
-      [int srcOffset]) {
+      [int? srcOffset]) {
     if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
             is int) &&
         srcOffset == null) {
@@ -1718,7 +1722,7 @@
       int format,
       int type,
       bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video,
-      [int srcOffset]) {
+      [int? srcOffset]) {
     if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
             is int) &&
         srcOffset == null) {
@@ -1866,7 +1870,7 @@
       border, format, type, ImageBitmap bitmap) native;
   @JSName('texImage3D')
   void _texImage3D_7(target, level, internalformat, width, height, depth,
-      border, format, type, TypedData pixels) native;
+      border, format, type, TypedData? pixels) native;
   @JSName('texImage3D')
   void _texImage3D_8(target, level, internalformat, width, height, depth,
       border, format, type, TypedData pixels, srcOffset) native;
@@ -1887,7 +1891,7 @@
       int format,
       int type,
       bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video,
-      [int srcOffset]) {
+      [int? srcOffset]) {
     if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
             is int) &&
         srcOffset == null) {
@@ -2025,7 +2029,7 @@
       int format,
       int type,
       bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video,
-      [int srcOffset]) {
+      [int? srcOffset]) {
     if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
             is int) &&
         srcOffset == null) {
@@ -2195,93 +2199,93 @@
       native;
 
   @JSName('uniform1fv')
-  void uniform1fv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform1fv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
   @JSName('uniform1iv')
-  void uniform1iv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform1iv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
-  void uniform1ui(UniformLocation location, int v0) native;
+  void uniform1ui(UniformLocation? location, int v0) native;
 
-  void uniform1uiv(UniformLocation location, v, [int srcOffset, int srcLength])
-      native;
+  void uniform1uiv(UniformLocation? location, v,
+      [int? srcOffset, int? srcLength]) native;
 
   @JSName('uniform2fv')
-  void uniform2fv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform2fv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
   @JSName('uniform2iv')
-  void uniform2iv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform2iv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
-  void uniform2ui(UniformLocation location, int v0, int v1) native;
+  void uniform2ui(UniformLocation? location, int v0, int v1) native;
 
-  void uniform2uiv(UniformLocation location, v, [int srcOffset, int srcLength])
-      native;
+  void uniform2uiv(UniformLocation? location, v,
+      [int? srcOffset, int? srcLength]) native;
 
   @JSName('uniform3fv')
-  void uniform3fv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform3fv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
   @JSName('uniform3iv')
-  void uniform3iv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform3iv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
-  void uniform3ui(UniformLocation location, int v0, int v1, int v2) native;
+  void uniform3ui(UniformLocation? location, int v0, int v1, int v2) native;
 
-  void uniform3uiv(UniformLocation location, v, [int srcOffset, int srcLength])
-      native;
+  void uniform3uiv(UniformLocation? location, v,
+      [int? srcOffset, int? srcLength]) native;
 
   @JSName('uniform4fv')
-  void uniform4fv2(UniformLocation location, v, int srcOffset, [int srcLength])
-      native;
+  void uniform4fv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
 
   @JSName('uniform4iv')
-  void uniform4iv2(UniformLocation location, v, int srcOffset, [int srcLength])
+  void uniform4iv2(UniformLocation? location, v, int srcOffset,
+      [int? srcLength]) native;
+
+  void uniform4ui(UniformLocation? location, int v0, int v1, int v2, int v3)
       native;
 
-  void uniform4ui(UniformLocation location, int v0, int v1, int v2, int v3)
-      native;
-
-  void uniform4uiv(UniformLocation location, v, [int srcOffset, int srcLength])
-      native;
+  void uniform4uiv(UniformLocation? location, v,
+      [int? srcOffset, int? srcLength]) native;
 
   void uniformBlockBinding(
       Program program, int uniformBlockIndex, int uniformBlockBinding) native;
 
   @JSName('uniformMatrix2fv')
   void uniformMatrix2fv2(
-      UniformLocation location, bool transpose, array, int srcOffset,
-      [int srcLength]) native;
+      UniformLocation? location, bool transpose, array, int srcOffset,
+      [int? srcLength]) native;
 
-  void uniformMatrix2x3fv(UniformLocation location, bool transpose, value,
-      [int srcOffset, int srcLength]) native;
+  void uniformMatrix2x3fv(UniformLocation? location, bool transpose, value,
+      [int? srcOffset, int? srcLength]) native;
 
-  void uniformMatrix2x4fv(UniformLocation location, bool transpose, value,
-      [int srcOffset, int srcLength]) native;
+  void uniformMatrix2x4fv(UniformLocation? location, bool transpose, value,
+      [int? srcOffset, int? srcLength]) native;
 
   @JSName('uniformMatrix3fv')
   void uniformMatrix3fv2(
-      UniformLocation location, bool transpose, array, int srcOffset,
-      [int srcLength]) native;
+      UniformLocation? location, bool transpose, array, int srcOffset,
+      [int? srcLength]) native;
 
-  void uniformMatrix3x2fv(UniformLocation location, bool transpose, value,
-      [int srcOffset, int srcLength]) native;
+  void uniformMatrix3x2fv(UniformLocation? location, bool transpose, value,
+      [int? srcOffset, int? srcLength]) native;
 
-  void uniformMatrix3x4fv(UniformLocation location, bool transpose, value,
-      [int srcOffset, int srcLength]) native;
+  void uniformMatrix3x4fv(UniformLocation? location, bool transpose, value,
+      [int? srcOffset, int? srcLength]) native;
 
   @JSName('uniformMatrix4fv')
   void uniformMatrix4fv2(
-      UniformLocation location, bool transpose, array, int srcOffset,
-      [int srcLength]) native;
+      UniformLocation? location, bool transpose, array, int srcOffset,
+      [int? srcLength]) native;
 
-  void uniformMatrix4x2fv(UniformLocation location, bool transpose, value,
-      [int srcOffset, int srcLength]) native;
+  void uniformMatrix4x2fv(UniformLocation? location, bool transpose, value,
+      [int? srcOffset, int? srcLength]) native;
 
-  void uniformMatrix4x3fv(UniformLocation location, bool transpose, value,
-      [int srcOffset, int srcLength]) native;
+  void uniformMatrix4x3fv(UniformLocation? location, bool transpose, value,
+      [int? srcOffset, int? srcLength]) native;
 
   void vertexAttribDivisor(int index, int divisor) native;
 
@@ -2300,9 +2304,9 @@
 
   // From WebGLRenderingContextBase
 
-  final int drawingBufferHeight;
+  int get drawingBufferHeight => JS("int", "#.drawingBufferHeight", this);
 
-  final int drawingBufferWidth;
+  int get drawingBufferWidth => JS("int", "#.drawingBufferWidth", this);
 
   void activeTexture(int texture) native;
 
@@ -2310,13 +2314,13 @@
 
   void bindAttribLocation(Program program, int index, String name) native;
 
-  void bindBuffer(int target, Buffer buffer) native;
+  void bindBuffer(int target, Buffer? buffer) native;
 
-  void bindFramebuffer(int target, Framebuffer framebuffer) native;
+  void bindFramebuffer(int target, Framebuffer? framebuffer) native;
 
-  void bindRenderbuffer(int target, Renderbuffer renderbuffer) native;
+  void bindRenderbuffer(int target, Renderbuffer? renderbuffer) native;
 
-  void bindTexture(int target, Texture texture) native;
+  void bindTexture(int target, Texture? texture) native;
 
   void blendColor(num red, num green, num blue, num alpha) native;
 
@@ -2375,17 +2379,17 @@
 
   void cullFace(int mode) native;
 
-  void deleteBuffer(Buffer buffer) native;
+  void deleteBuffer(Buffer? buffer) native;
 
-  void deleteFramebuffer(Framebuffer framebuffer) native;
+  void deleteFramebuffer(Framebuffer? framebuffer) native;
 
-  void deleteProgram(Program program) native;
+  void deleteProgram(Program? program) native;
 
-  void deleteRenderbuffer(Renderbuffer renderbuffer) native;
+  void deleteRenderbuffer(Renderbuffer? renderbuffer) native;
 
-  void deleteShader(Shader shader) native;
+  void deleteShader(Shader? shader) native;
 
-  void deleteTexture(Texture texture) native;
+  void deleteTexture(Texture? texture) native;
 
   void depthFunc(int func) native;
 
@@ -2412,10 +2416,10 @@
   void flush() native;
 
   void framebufferRenderbuffer(int target, int attachment,
-      int renderbuffertarget, Renderbuffer renderbuffer) native;
+      int renderbuffertarget, Renderbuffer? renderbuffer) native;
 
   void framebufferTexture2D(int target, int attachment, int textarget,
-      Texture texture, int level) native;
+      Texture? texture, int level) native;
 
   void frontFace(int mode) native;
 
@@ -2476,21 +2480,21 @@
 
   void hint(int target, int mode) native;
 
-  bool isBuffer(Buffer buffer) native;
+  bool isBuffer(Buffer? buffer) native;
 
   bool isContextLost() native;
 
   bool isEnabled(int cap) native;
 
-  bool isFramebuffer(Framebuffer framebuffer) native;
+  bool isFramebuffer(Framebuffer? framebuffer) native;
 
-  bool isProgram(Program program) native;
+  bool isProgram(Program? program) native;
 
-  bool isRenderbuffer(Renderbuffer renderbuffer) native;
+  bool isRenderbuffer(Renderbuffer? renderbuffer) native;
 
-  bool isShader(Shader shader) native;
+  bool isShader(Shader? shader) native;
 
-  bool isTexture(Texture texture) native;
+  bool isTexture(Texture? texture) native;
 
   void lineWidth(num width) native;
 
@@ -2502,7 +2506,7 @@
 
   @JSName('readPixels')
   void _readPixels(int x, int y, int width, int height, int format, int type,
-      TypedData pixels) native;
+      TypedData? pixels) native;
 
   void renderbufferStorage(
       int target, int internalformat, int width, int height) native;
@@ -2532,9 +2536,9 @@
       int format_OR_width,
       int height_OR_type,
       bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video,
-      [int format,
-      int type,
-      TypedData pixels]) {
+      [int? format,
+      int? type,
+      TypedData? pixels]) {
     if (type != null &&
         format != null &&
         (bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video is int)) {
@@ -2621,7 +2625,7 @@
 
   @JSName('texImage2D')
   void _texImage2D_1(target, level, internalformat, width, height, int border,
-      format, type, TypedData pixels) native;
+      format, type, TypedData? pixels) native;
   @JSName('texImage2D')
   void _texImage2D_2(target, level, internalformat, format, type, pixels)
       native;
@@ -2650,8 +2654,8 @@
       int format_OR_width,
       int height_OR_type,
       bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video,
-      [int type,
-      TypedData pixels]) {
+      [int? type,
+      TypedData? pixels]) {
     if (type != null &&
         (bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video is int)) {
       _texSubImage2D_1(
@@ -2736,7 +2740,7 @@
 
   @JSName('texSubImage2D')
   void _texSubImage2D_1(target, level, xoffset, yoffset, width, height,
-      int format, type, TypedData pixels) native;
+      int format, type, TypedData? pixels) native;
   @JSName('texSubImage2D')
   void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels)
       native;
@@ -2753,45 +2757,48 @@
   void _texSubImage2D_6(
       target, level, xoffset, yoffset, format, type, ImageBitmap bitmap) native;
 
-  void uniform1f(UniformLocation location, num x) native;
+  void uniform1f(UniformLocation? location, num x) native;
 
-  void uniform1fv(UniformLocation location, v) native;
+  void uniform1fv(UniformLocation? location, v) native;
 
-  void uniform1i(UniformLocation location, int x) native;
+  void uniform1i(UniformLocation? location, int x) native;
 
-  void uniform1iv(UniformLocation location, v) native;
+  void uniform1iv(UniformLocation? location, v) native;
 
-  void uniform2f(UniformLocation location, num x, num y) native;
+  void uniform2f(UniformLocation? location, num x, num y) native;
 
-  void uniform2fv(UniformLocation location, v) native;
+  void uniform2fv(UniformLocation? location, v) native;
 
-  void uniform2i(UniformLocation location, int x, int y) native;
+  void uniform2i(UniformLocation? location, int x, int y) native;
 
-  void uniform2iv(UniformLocation location, v) native;
+  void uniform2iv(UniformLocation? location, v) native;
 
-  void uniform3f(UniformLocation location, num x, num y, num z) native;
+  void uniform3f(UniformLocation? location, num x, num y, num z) native;
 
-  void uniform3fv(UniformLocation location, v) native;
+  void uniform3fv(UniformLocation? location, v) native;
 
-  void uniform3i(UniformLocation location, int x, int y, int z) native;
+  void uniform3i(UniformLocation? location, int x, int y, int z) native;
 
-  void uniform3iv(UniformLocation location, v) native;
+  void uniform3iv(UniformLocation? location, v) native;
 
-  void uniform4f(UniformLocation location, num x, num y, num z, num w) native;
+  void uniform4f(UniformLocation? location, num x, num y, num z, num w) native;
 
-  void uniform4fv(UniformLocation location, v) native;
+  void uniform4fv(UniformLocation? location, v) native;
 
-  void uniform4i(UniformLocation location, int x, int y, int z, int w) native;
+  void uniform4i(UniformLocation? location, int x, int y, int z, int w) native;
 
-  void uniform4iv(UniformLocation location, v) native;
+  void uniform4iv(UniformLocation? location, v) native;
 
-  void uniformMatrix2fv(UniformLocation location, bool transpose, array) native;
+  void uniformMatrix2fv(UniformLocation? location, bool transpose, array)
+      native;
 
-  void uniformMatrix3fv(UniformLocation location, bool transpose, array) native;
+  void uniformMatrix3fv(UniformLocation? location, bool transpose, array)
+      native;
 
-  void uniformMatrix4fv(UniformLocation location, bool transpose, array) native;
+  void uniformMatrix4fv(UniformLocation? location, bool transpose, array)
+      native;
 
-  void useProgram(Program program) native;
+  void useProgram(Program? program) native;
 
   void validateProgram(Program program) native;
 
@@ -2855,11 +2862,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int precision;
+  int get precision => JS("int", "#.precision", this);
 
-  final int rangeMax;
+  int get rangeMax => JS("int", "#.rangeMax", this);
 
-  final int rangeMin;
+  int get rangeMin => JS("int", "#.rangeMin", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2883,13 +2890,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final bool lastUploadedVideoFrameWasSkipped;
+  bool get lastUploadedVideoFrameWasSkipped =>
+      JS("bool", "#.lastUploadedVideoFrameWasSkipped", this);
 
-  final int lastUploadedVideoHeight;
+  int get lastUploadedVideoHeight =>
+      JS("int", "#.lastUploadedVideoHeight", this);
 
-  final num lastUploadedVideoTimestamp;
+  num get lastUploadedVideoTimestamp =>
+      JS("num", "#.lastUploadedVideoTimestamp", this);
 
-  final int lastUploadedVideoWidth;
+  int get lastUploadedVideoWidth => JS("int", "#.lastUploadedVideoWidth", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
diff --git a/sdk_nnbd/lib/web_sql/dart2js/web_sql_dart2js.dart b/sdk_nnbd/lib/web_sql/dart2js/web_sql_dart2js.dart
index 106ae4d..53f192b 100644
--- a/sdk_nnbd/lib/web_sql/dart2js/web_sql_dart2js.dart
+++ b/sdk_nnbd/lib/web_sql/dart2js/web_sql_dart2js.dart
@@ -1,4 +1,3 @@
-// @dart = 2.5
 /**
  * An API for storing data in the browser that can be queried with SQL.
  *
@@ -79,7 +78,7 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.openDatabase)');
 
-  final String version;
+  String get version => JS("String", "#.version", this);
 
   @JSName('changeVersion')
   /**
@@ -97,9 +96,9 @@
    * * [Database.changeVersion](http://www.w3.org/TR/webdatabase/#dom-database-changeversion) from W3C.
    */
   void _changeVersion(String oldVersion, String newVersion,
-      [SqlTransactionCallback callback,
-      SqlTransactionErrorCallback errorCallback,
-      VoidCallback successCallback]) native;
+      [SqlTransactionCallback? callback,
+      SqlTransactionErrorCallback? errorCallback,
+      VoidCallback? successCallback]) native;
 
   @JSName('changeVersion')
   /**
@@ -128,8 +127,8 @@
 
   @JSName('readTransaction')
   void _readTransaction(SqlTransactionCallback callback,
-      [SqlTransactionErrorCallback errorCallback,
-      VoidCallback successCallback]) native;
+      [SqlTransactionErrorCallback? errorCallback,
+      VoidCallback? successCallback]) native;
 
   @JSName('readTransaction')
   Future<SqlTransaction> readTransaction() {
@@ -143,8 +142,8 @@
   }
 
   void transaction(SqlTransactionCallback callback,
-      [SqlTransactionErrorCallback errorCallback,
-      VoidCallback successCallback]) native;
+      [SqlTransactionErrorCallback? errorCallback,
+      VoidCallback? successCallback]) native;
 
   @JSName('transaction')
   Future<SqlTransaction> transaction_future() {
@@ -185,9 +184,9 @@
 
   static const int VERSION_ERR = 2;
 
-  final int code;
+  int get code => JS("int", "#.code", this);
 
-  final String message;
+  String get message => JS("String", "#.message", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -200,11 +199,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  final int insertId;
+  int get insertId => JS("int", "#.insertId", this);
 
-  final SqlResultSetRowList rows;
+  SqlResultSetRowList get rows => JS("SqlResultSetRowList", "#.rows", this);
 
-  final int rowsAffected;
+  int get rowsAffected => JS("int", "#.rowsAffected", this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -288,12 +287,12 @@
 
   @JSName('executeSql')
   void _executeSql(String sqlStatement,
-      [List arguments,
-      SqlStatementCallback callback,
-      SqlStatementErrorCallback errorCallback]) native;
+      [List? arguments,
+      SqlStatementCallback? callback,
+      SqlStatementErrorCallback? errorCallback]) native;
 
   @JSName('executeSql')
-  Future<SqlResultSet> executeSql(String sqlStatement, [List arguments]) {
+  Future<SqlResultSet> executeSql(String sqlStatement, [List? arguments]) {
     var completer = new Completer<SqlResultSet>();
     _executeSql(sqlStatement, arguments, (transaction, resultSet) {
       applyExtension('SQLResultSet', resultSet);
diff --git a/tests/co19_2/co19_2-dart2js.status b/tests/co19_2/co19_2-dart2js.status
index 4434d09..df64c4a 100644
--- a/tests/co19_2/co19_2-dart2js.status
+++ b/tests/co19_2/co19_2-dart2js.status
@@ -8,14 +8,14 @@
 WebPlatformTest/*: SkipByDesign # d8 is not a browser
 
 [ $compiler == dart2js && $runtime == d8 && $host_checked ]
-LibTest/collection/ListBase/ListBase_class_A01_t04: Slow
-LibTest/collection/ListBase/ListBase_class_A01_t05: Slow
-LibTest/collection/ListBase/ListBase_class_A01_t06: Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t04: Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t05: Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t06: Slow
-LibTest/core/List/List_class_A01_t05: Slow
-LibTest/core/List/List_class_A01_t06: Slow
+LibTest/collection/ListBase/ListBase_class_A01_t04: Slow, Pass
+LibTest/collection/ListBase/ListBase_class_A01_t05: Slow, Pass
+LibTest/collection/ListBase/ListBase_class_A01_t06: Slow, Pass
+LibTest/collection/ListMixin/ListMixin_class_A01_t04: Slow, Pass
+LibTest/collection/ListMixin/ListMixin_class_A01_t05: Slow, Pass
+LibTest/collection/ListMixin/ListMixin_class_A01_t06: Slow, Pass
+LibTest/core/List/List_class_A01_t05: Slow, Pass
+LibTest/core/List/List_class_A01_t06: Slow, Pass
 
 [ $compiler == dart2js && $runtime == ie11 ]
 LibTest/collection/ListBase/ListBase_class_A01_t04: SkipSlow # slow babeljs transformation
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index 2511212..8aa80ab 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -3,9 +3,9 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $builder_tag == bytecode_interpreter ]
-LibTest/collection/ListBase/ListBase_class_A01_t04: Slow
-LibTest/collection/ListBase/ListBase_class_A01_t05: Slow
-LibTest/collection/ListBase/ListBase_class_A01_t06: Slow
+LibTest/collection/ListBase/ListBase_class_A01_t04: Slow, Pass
+LibTest/collection/ListBase/ListBase_class_A01_t05: Slow, Pass
+LibTest/collection/ListBase/ListBase_class_A01_t06: Slow, Pass
 
 [ $compiler == dartkb ]
 LibTest/isolate/Isolate/kill_A01_t01: Skip # Issue 37699
@@ -18,9 +18,9 @@
 LanguageFeatures/Constant-update-2018/NewOperators_A01_t06/none: Crash
 
 [ $runtime == vm ]
-LibTest/collection/ListBase/ListBase_class_A01_t02: Slow # Does many calls
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Slow # Does many calls
-LibTest/core/List/List_class_A01_t02: Slow # Does many calls
+LibTest/collection/ListBase/ListBase_class_A01_t02: Slow, Pass # Does many calls
+LibTest/collection/ListMixin/ListMixin_class_A01_t02: Slow, Pass # Does many calls
+LibTest/core/List/List_class_A01_t02: Slow, Pass # Does many calls
 LibTest/io/RawDatagramSocket/*: Skip # RawDatagramSocket are flacky. Skip them all until rewritten
 
 [ $fasta ]
@@ -182,12 +182,12 @@
 LibTest/isolate/Isolate/spawn_A06_t03: Crash
 
 [ $runtime == vm && $system == macos && ($compiler == dartk || $compiler == dartkb) ]
-LibTest/collection/ListBase/ListBase_class_A01_t02: Slow
-LibTest/collection/ListBase/ListBase_class_A01_t03: Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Slow
-LibTest/collection/ListMixin/ListMixin_class_A01_t03: Slow
-LibTest/core/List/List_class_A01_t02: Slow
-LibTest/core/List/List_class_A01_t03: Slow
+LibTest/collection/ListBase/ListBase_class_A01_t02: Slow, Pass
+LibTest/collection/ListBase/ListBase_class_A01_t03: Slow, Pass
+LibTest/collection/ListMixin/ListMixin_class_A01_t02: Slow, Pass
+LibTest/collection/ListMixin/ListMixin_class_A01_t03: Slow, Pass
+LibTest/core/List/List_class_A01_t02: Slow, Pass
+LibTest/core/List/List_class_A01_t03: Slow, Pass
 
 [ $runtime != vm && ($compiler == dartk || $compiler == dartkb) ]
 Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: Crash
diff --git a/tests/compiler/dart2js/analyses/api_allowed.json b/tests/compiler/dart2js/analyses/api_allowed.json
index 062db80..4a05aa5 100644
--- a/tests/compiler/dart2js/analyses/api_allowed.json
+++ b/tests/compiler/dart2js/analyses/api_allowed.json
@@ -87,7 +87,7 @@
     "Dynamic access of 'firstChild'.": 2,
     "Dynamic invocation of 'append'.": 1,
     "Dynamic access of 'tagName'.": 2,
-    "Dynamic invocation of 'call'.": 1,
+    "Dynamic invocation of 'call'.": 2,
     "Dynamic invocation of 'dart.dom.html::_initKeyboardEvent'.": 1,
     "Dynamic access of 'attributes'.": 1,
     "Dynamic invocation of '[]'.": 1,
@@ -225,4 +225,4 @@
     "Dynamic access of 'port'.": 1,
     "Dynamic invocation of 'dart._http::_toJSON'.": 1
   }
-}
\ No newline at end of file
+}
diff --git a/tests/compiler/dart2js/analyses/dart2js_allowed.json b/tests/compiler/dart2js/analyses/dart2js_allowed.json
index 8881b99..7f57a19 100644
--- a/tests/compiler/dart2js/analyses/dart2js_allowed.json
+++ b/tests/compiler/dart2js/analyses/dart2js_allowed.json
@@ -187,14 +187,11 @@
     "Dynamic access of 'universe.side_effects::_flags'.": 1
   },
   "pkg/compiler/lib/src/ssa/builder_kernel.dart": {
-    "Dynamic update to 'instantiatedTypes'.": 1,
-    "Dynamic update to 'sideEffects'.": 1,
     "Dynamic access of 'name'.": 1,
     "Dynamic access of 'id'.": 1,
     "Dynamic invocation of 'addSuccessor'.": 1
   },
   "pkg/compiler/lib/src/ssa/types.dart": {
-    "Dynamic access of 'isTop'.": 1,
     "Dynamic access of 'element'.": 1
   },
   "pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart": {
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 28c1f67..c5b7400 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -2,59 +2,59 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-analyses/analyze_test: Slow
-analyses/api_dynamic_test: Slow
-analyses/dart2js_dynamic_test: Slow
-closure/closure_test: Slow
-codegen/load_elimination_test: Slow
-codegen/model_test: Slow
-deferred_loading/deferred_loading_test: Slow
-end_to_end/dump_info_test: Slow
-equivalence/id_equivalence1_test: Slow
-equivalence/id_equivalence2_test: Slow
-impact/impact_test: Slow
-inference/inference0_test: Slow
-inference/inference1_test: Slow
-inference/inference2_test: Slow
-inference/inference3_test: Slow
-inference/swarm_test: Slow #
-inlining/inlining_test: Slow
-model/native_test: Slow
-model/no_such_method_enabled_test: Slow
-model/subtype_test: Slow
-modular/*: Slow
+analyses/analyze_test: Slow, Pass
+analyses/api_dynamic_test: Slow, Pass
+analyses/dart2js_dynamic_test: Slow, Pass
+closure/closure_test: Slow, Pass
+codegen/load_elimination_test: Slow, Pass
+codegen/model_test: Slow, Pass
+deferred_loading/deferred_loading_test: Slow, Pass
+end_to_end/dump_info_test: Slow, Pass
+equivalence/id_equivalence1_test: Slow, Pass
+equivalence/id_equivalence2_test: Slow, Pass
+impact/impact_test: Slow, Pass
+inference/inference0_test: Slow, Pass
+inference/inference1_test: Slow, Pass
+inference/inference2_test: Slow, Pass
+inference/inference3_test: Slow, Pass
+inference/swarm_test: Slow, Pass #
+inlining/inlining_test: Slow, Pass
+model/native_test: Slow, Pass
+model/no_such_method_enabled_test: Slow, Pass
+model/subtype_test: Slow, Pass
+modular/*: Slow, Pass
 packages/*: Skip # Skip packages folder
-rti/rti_emission_test: Slow
-rti/rti_need0_test: Slow
-rti/rti_need1_test: Slow
-serialization/serialization_test: Slow
-sourcemaps/source_mapping_invokes_test: Slow
-sourcemaps/source_mapping_operators_test: Slow
-sourcemaps/source_mapping_test: Slow
-sourcemaps/stacktrace_test: Slow
+rti/rti_emission_test: Slow, Pass
+rti/rti_need0_test: Slow, Pass
+rti/rti_need1_test: Slow, Pass
+serialization/serialization_test: Slow, Pass
+sourcemaps/source_mapping_invokes_test: Slow, Pass
+sourcemaps/source_mapping_operators_test: Slow, Pass
+sourcemaps/source_mapping_test: Slow, Pass
+sourcemaps/stacktrace_test: Slow, Pass
 
 [ $mode == debug ]
-deferred/load_graph_segmentation_test: Slow
-deferred/load_mapping_test: Slow
-end_to_end/dart2js_batch_test: Slow
-end_to_end/exit_code_test: Slow
-end_to_end/in_user_code_test: Slow
-end_to_end/show_package_warnings_test: Slow
+deferred/load_graph_segmentation_test: Slow, Pass
+deferred/load_mapping_test: Slow, Pass
+end_to_end/dart2js_batch_test: Slow, Pass
+end_to_end/exit_code_test: Slow, Pass
+end_to_end/in_user_code_test: Slow, Pass
+end_to_end/show_package_warnings_test: Slow, Pass
 
 [ $checked ]
-codegen/value_range_kernel_test: Slow
-codegen/value_range_test: Slow
-end_to_end/exit_code_test: Slow
-end_to_end/output_type_test: Slow
-end_to_end/uri_retention_test: Slow
-jsinterop/declaration_test: Slow
-jsinterop/interop_anonymous_unreachable_test: Slow
-jsinterop/world_test: Slow
-sourcemaps/stacktrace_test: Slow
+codegen/value_range_kernel_test: Slow, Pass
+codegen/value_range_test: Slow, Pass
+end_to_end/exit_code_test: Slow, Pass
+end_to_end/output_type_test: Slow, Pass
+end_to_end/uri_retention_test: Slow, Pass
+jsinterop/declaration_test: Slow, Pass
+jsinterop/interop_anonymous_unreachable_test: Slow, Pass
+jsinterop/world_test: Slow, Pass
+sourcemaps/stacktrace_test: Slow, Pass
 
 [ !$checked ]
 end_to_end/exit_code_test: Skip # This tests requires checked mode.
-jsinterop/declaration_test: Slow
+jsinterop/declaration_test: Slow, Pass
 
 [ $runtime == chrome || $runtime == ff || $runtime == firefox || $runtime == safari || $jscl ]
 *: Skip # dart2js uses #import('dart:io'); and it is not self-hosted (yet).
diff --git a/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart b/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart
index 1d4fd35..7f8b97e 100644
--- a/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart
+++ b/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart
@@ -10,6 +10,7 @@
 import 'package:compiler/src/constants/values.dart';
 import 'package:compiler/src/deferred_load.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/js_emitter/model.dart';
 import 'package:compiler/src/util/util.dart';
 import 'package:expect/expect.dart';
@@ -31,6 +32,7 @@
   CompilationResult result = await runCompiler(
       memorySourceFiles: sourceFiles, outputProvider: collector);
   Compiler compiler = result.compiler;
+  DartTypes dartTypes = compiler.frontendStrategy.commonElements.dartTypes;
   ProgramLookup lookup = new ProgramLookup(compiler.backendStrategy);
   var closedWorld = compiler.backendClosedWorldForTesting;
   var elementEnvironment = closedWorld.elementEnvironment;
@@ -59,7 +61,7 @@
 
   void processFragment(String fragmentName, Fragment fragment) {
     for (Constant constant in fragment.constants) {
-      String text = constant.value.toStructuredText();
+      String text = constant.value.toStructuredText(dartTypes);
       Set<String> expectedConstantUnit = expectedOutputUnits[text];
       if (expectedConstantUnit == null) {
         if (constant.value is DeferredGlobalConstantValue) {
diff --git a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
index 971c524..e4b5593 100644
--- a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
+++ b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
@@ -7,6 +7,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/constants/values.dart';
+import 'package:compiler/src/elements/types.dart';
 import 'package:expect/expect.dart';
 import '../helpers/memory_compiler.dart';
 
@@ -16,6 +17,7 @@
         await runCompiler(memorySourceFiles: MEMORY_SOURCE_FILES);
 
     Compiler compiler = result.compiler;
+    DartTypes dartTypes = compiler.frontendStrategy.commonElements.dartTypes;
     var closedWorld = compiler.backendClosedWorldForTesting;
     var outputUnitForConstant =
         closedWorld.outputUnitData.outputUnitForConstant;
@@ -35,12 +37,15 @@
           allConstants.firstWhere((dynamic constant) {
         return constant.isString && constant.stringValue == stringValue;
       });
-      Expect.notEquals(null, outputUnitForConstant(constant),
-          "Constant value ${constant.toStructuredText()} has no output unit.");
+      Expect.notEquals(
+          null,
+          outputUnitForConstant(constant),
+          "Constant value ${constant.toStructuredText(dartTypes)} has no "
+          "output unit.");
       Expect.notEquals(
           mainOutputUnit,
           outputUnitForConstant(constant),
-          "Constant value ${constant.toStructuredText()} "
+          "Constant value ${constant.toStructuredText(dartTypes)} "
           "is in the main output unit.");
     }
   }
diff --git a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
index 78462c7..fc041f3 100644
--- a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
+++ b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
@@ -175,7 +175,7 @@
   visitConstantExpression(ir.ConstantExpression node) {
     ConstantValue constant = _elementMap.getConstantValue(null, node);
     if (!constant.isPrimitive) {
-      _constants.add('${constant.toStructuredText()}='
+      _constants.add('${constant.toStructuredText(_elementMap.types)}='
           '${outputUnitString(_data.outputUnitForConstant(constant))}');
     }
     return super.visitConstantExpression(node);
diff --git a/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart b/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart
index 159134e..55f3014 100644
--- a/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart
+++ b/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart
@@ -7,6 +7,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/js_backend/field_analysis.dart';
 import 'package:compiler/src/js_model/js_world.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -40,6 +41,7 @@
       Map<Id, ActualData<Features>> actualMap,
       {bool verbose: false}) {
     if (member.isField) {
+      DartTypes dartTypes = compiler.frontendStrategy.commonElements.dartTypes;
       JsClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
       JFieldAnalysis fieldAnalysis = closedWorld.fieldAnalysis;
       ir.Member node = closedWorld.elementMap.getMemberDefinition(member).node;
@@ -53,9 +55,10 @@
       }
       if (fieldData.isEffectivelyConstant) {
         features[Tags.constantValue] =
-            fieldData.constantValue.toStructuredText();
+            fieldData.constantValue.toStructuredText(dartTypes);
       } else if (fieldData.initialValue != null) {
-        features[Tags.initialValue] = fieldData.initialValue.toStructuredText();
+        features[Tags.initialValue] =
+            fieldData.initialValue.toStructuredText(dartTypes);
       } else if (fieldData.isEager) {
         if (fieldData.eagerCreationIndex != null) {
           features[Tags.eagerCreationIndex] =
diff --git a/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart b/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart
index 4d53430..7e3d8de 100644
--- a/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart
+++ b/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart
@@ -7,6 +7,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/js_backend/field_analysis.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -35,6 +36,7 @@
       {bool verbose: false}) {
     if (member.isField) {
       KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
+      DartTypes dartTypes = frontendStrategy.commonElements.dartTypes;
       KFieldAnalysis allocatorAnalysis =
           frontendStrategy.fieldAnalysisForTesting;
       ir.Member node = frontendStrategy.elementMap.getMemberNode(member);
@@ -44,11 +46,12 @@
             allocatorAnalysis.getAllocatorDataForTesting(member);
         if (data != null) {
           if (data.initialValue != null) {
-            features[Tags.initialValue] = data.initialValue.toStructuredText();
+            features[Tags.initialValue] =
+                data.initialValue.toStructuredText(dartTypes);
           }
           data.initializers.forEach((constructor, value) {
             features['${constructor.enclosingClass.name}.${constructor.name}'] =
-                value?.shortText;
+                value?.shortText(dartTypes);
           });
         }
       } else {
@@ -56,7 +59,7 @@
             allocatorAnalysis.getStaticFieldDataForTesting(member);
         if (staticFieldData.initialValue != null) {
           features[Tags.initialValue] =
-              staticFieldData.initialValue.toStructuredText();
+              staticFieldData.initialValue.toStructuredText(dartTypes);
         }
         features[Tags.complexity] = staticFieldData.complexity.shortText;
       }
diff --git a/tests/compiler/dart2js/helpers/shared_helper.dart b/tests/compiler/dart2js/helpers/shared_helper.dart
index ec3cc15..34b897b 100644
--- a/tests/compiler/dart2js/helpers/shared_helper.dart
+++ b/tests/compiler/dart2js/helpers/shared_helper.dart
@@ -6,9 +6,9 @@
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 
-String constantToText(ConstantValue constant) {
+String constantToText(DartTypes dartTypes, ConstantValue constant) {
   StringBuffer sb = new StringBuffer();
-  new ConstantToTextVisitor().visit(constant, sb);
+  new ConstantToTextVisitor(dartTypes).visit(constant, sb);
   return sb.toString();
 }
 
@@ -118,8 +118,11 @@
 
 class ConstantToTextVisitor
     implements ConstantValueVisitor<void, StringBuffer> {
+  final DartTypes _dartTypes;
   final DartTypeToTextVisitor typeToText = new DartTypeToTextVisitor();
 
+  ConstantToTextVisitor(this._dartTypes);
+
   void visit(ConstantValue constant, StringBuffer sb) =>
       constant.accept(this, sb);
 
@@ -224,33 +227,33 @@
   @override
   void visitInterceptor(InterceptorConstantValue constant, StringBuffer sb) {
     throw new UnsupportedError(
-        'Unsupported constant value: ${constant.toStructuredText()}');
+        'Unsupported constant value: ${constant.toStructuredText(_dartTypes)}');
   }
 
   @override
   void visitDummyInterceptor(
       DummyInterceptorConstantValue constant, StringBuffer sb) {
     throw new UnsupportedError(
-        'Unsupported constant value: ${constant.toStructuredText()}');
+        'Unsupported constant value: ${constant.toStructuredText(_dartTypes)}');
   }
 
   @override
   void visitUnreachable(UnreachableConstantValue constant, StringBuffer sb) {
     throw new UnsupportedError(
-        'Unsupported constant value: ${constant.toStructuredText()}');
+        'Unsupported constant value: ${constant.toStructuredText(_dartTypes)}');
   }
 
   @override
   void visitJsName(JsNameConstantValue constant, StringBuffer sb) {
     throw new UnsupportedError(
-        'Unsupported constant value: ${constant.toStructuredText()}');
+        'Unsupported constant value: ${constant.toStructuredText(_dartTypes)}');
   }
 
   @override
   void visitDeferredGlobal(
       DeferredGlobalConstantValue constant, StringBuffer sb) {
     throw new UnsupportedError(
-        'Unsupported constant value: ${constant.toStructuredText()}');
+        'Unsupported constant value: ${constant.toStructuredText(_dartTypes)}');
   }
 
   @override
diff --git a/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart b/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart
index 5a5e639..eddb490 100644
--- a/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart
+++ b/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart
@@ -13,6 +13,7 @@
 import 'package:compiler/src/constants/values.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/indexed.dart';
+import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/ir/constants.dart';
 import 'package:compiler/src/ir/visitors.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
@@ -576,6 +577,7 @@
     Compiler compiler = result.compiler;
     KernelFrontendStrategy frontEndStrategy = compiler.frontendStrategy;
     KernelToElementMapImpl elementMap = frontEndStrategy.elementMap;
+    DartTypes dartTypes = elementMap.types;
     ir.TypeEnvironment typeEnvironment = elementMap.typeEnvironment;
     KElementEnvironment elementEnvironment =
         compiler.frontendStrategy.elementEnvironment;
@@ -619,7 +621,7 @@
               "Expected non-null value from evaluation of "
               "`${data.code}`.");
 
-          String valueText = value.toStructuredText();
+          String valueText = value.toStructuredText(dartTypes);
           Expect.equals(
               expectedText,
               valueText,
diff --git a/tests/compiler/dart2js/model/cfe_constant_test.dart b/tests/compiler/dart2js/model/cfe_constant_test.dart
index d00a766..3f522df 100644
--- a/tests/compiler/dart2js/model/cfe_constant_test.dart
+++ b/tests/compiler/dart2js/model/cfe_constant_test.dart
@@ -85,8 +85,10 @@
   @override
   String computeNodeValue(Id id, ir.TreeNode node) {
     if (node is ir.ConstantExpression) {
-      return constantToText(elementMap.getConstantValue(
-          elementMap.getStaticTypeContext(member), node));
+      return constantToText(
+          elementMap.types,
+          elementMap.getConstantValue(
+              elementMap.getStaticTypeContext(member), node));
     }
     return null;
   }
diff --git a/tests/compiler/dart2js/rti/type_representation_test.dart b/tests/compiler/dart2js/rti/type_representation_test.dart
index e1c2e07..7cae429 100644
--- a/tests/compiler/dart2js/rti/type_representation_test.dart
+++ b/tests/compiler/dart2js/rti/type_representation_test.dart
@@ -70,7 +70,9 @@
   RuntimeTypeTags rtiTags = const RuntimeTypeTags();
   TypeRepresentationGenerator typeRepresentation =
       new TypeRepresentationGenerator(
-          rtiTags, compiler.backendClosedWorldForTesting.nativeData);
+          compiler.frontendStrategy.commonElements.dartTypes,
+          rtiTags,
+          compiler.backendClosedWorldForTesting.nativeData);
 
   Expression onVariable(TypeVariableType _variable) {
     TypeVariableType variable = _variable;
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 29be72f..9faa92a 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -13,26 +13,26 @@
 string_interpolation_test: Skip
 
 [ $compiler == dart2js && $runtime == chrome && $system == windows ]
-class_test: Slow # Issue 25940
-closure_capture3_test: Slow # Issue 25940
-closure_capture5_test: Slow # Issue 25940
-conditional_test: Slow # Issue 25940
-consistent_codeUnitAt_error_test: Slow # Issue 25940
-constant_javascript_semantics2_test: Slow # Issue 25940
-deferred_split_test: Slow # Issue 25940
+class_test: Slow, Pass # Issue 25940
+closure_capture3_test: Slow, Pass # Issue 25940
+closure_capture5_test: Slow, Pass # Issue 25940
+conditional_test: Slow, Pass # Issue 25940
+consistent_codeUnitAt_error_test: Slow, Pass # Issue 25940
+constant_javascript_semantics2_test: Slow, Pass # Issue 25940
+deferred_split_test: Slow, Pass # Issue 25940
 
 [ $compiler == dart2js && $runtime == chrome && $csp ]
 deferred/load_in_correct_order_test: SkipByDesign # Purposely uses `eval`
 
 [ $compiler == dart2js && $runtime == ff && $system == windows ]
-consistent_index_error_string_test: Slow # Issue 25940
+consistent_index_error_string_test: Slow, Pass # Issue 25940
 
 [ $compiler == dart2js && $csp ]
 deferred_custom_loader_test: SkipByDesign # Issue 25683
 deferred_fail_and_retry_test: SkipByDesign # Uses eval to simulate failed loading.
 
 [ $compiler == dart2js && !$host_checked ]
-dummy_compiler_test: Slow # Issue 32439. self-hosting doesn't work with CFE yet.
+dummy_compiler_test: Slow, Pass # Issue 32439. self-hosting doesn't work with CFE yet.
 
 [ $compiler == dart2js && $minified ]
 code_motion_exception_test: Skip # Requires unminified operator names.
diff --git a/tests/compiler/dart2js_extra/regress_40349_test.dart b/tests/compiler/dart2js_extra/regress_40349_test.dart
new file mode 100644
index 0000000..796688d
--- /dev/null
+++ b/tests/compiler/dart2js_extra/regress_40349_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Regression test for Issue #40349:
+///
+/// Before the fix, this code was accidentally generating a type check twice.
+/// In between the two checks, code to update `_foo` was overriding a temporary
+/// variable used by the check subexpression, which made the code for the
+/// second check invalid.
+///
+/// The second check should not have been generated, but it was emitted due to
+/// a broken invariant of the SSA generate-at-use logic.
+
+void main() {
+  // `x` which is used multiple times after inilining, so a temporary is used.
+  x.method(40);
+}
+
+dynamic x = Wrapper<int>();
+
+class A<E> {
+  int _foo = 0;
+  List<E> list = [null];
+
+  @pragma('dart2js:tryInline')
+  void internalMethod(E value) {
+    // The update and use of `_foo` requires a separate temporary which reuses
+    // the same variable given to `x` (technically `x` is no longer live).
+    _foo = (_foo + 1) & 0;
+
+    // This use of `value` accidentally contains the second check, which
+    // still refers to the temporary assuming it was `x` and not `_foo`.
+    list[_foo] = value;
+  }
+}
+
+class Wrapper<T> {
+  A<T> a = A<T>();
+
+  @pragma('dart2js:tryInline')
+  method(T t) => a.internalMethod(t);
+}
diff --git a/tests/compiler/dart2js_extra/rti/subtype_utils.dart b/tests/compiler/dart2js_extra/rti/subtype_utils.dart
index f147dc7..dc4f608 100644
--- a/tests/compiler/dart2js_extra/rti/subtype_utils.dart
+++ b/tests/compiler/dart2js_extra/rti/subtype_utils.dart
@@ -12,23 +12,20 @@
 void strictSubtype(String s, String t) {
   var sRti = rti.testingUniverseEval(universe, s);
   var tRti = rti.testingUniverseEval(universe, t);
-  Expect.isTrue(rti.testingIsLegacySubtype(universe, sRti, tRti), reason(s, t));
-  Expect.isFalse(
-      rti.testingIsLegacySubtype(universe, tRti, sRti), reason(t, s));
+  Expect.isTrue(rti.testingIsSubtype(universe, sRti, tRti), reason(s, t));
+  Expect.isFalse(rti.testingIsSubtype(universe, tRti, sRti), reason(t, s));
 }
 
 void unrelated(String s, String t) {
   var sRti = rti.testingUniverseEval(universe, s);
   var tRti = rti.testingUniverseEval(universe, t);
-  Expect.isFalse(
-      rti.testingIsLegacySubtype(universe, sRti, tRti), reason(s, t));
-  Expect.isFalse(
-      rti.testingIsLegacySubtype(universe, tRti, sRti), reason(t, s));
+  Expect.isFalse(rti.testingIsSubtype(universe, sRti, tRti), reason(s, t));
+  Expect.isFalse(rti.testingIsSubtype(universe, tRti, sRti), reason(t, s));
 }
 
 void equivalent(String s, String t) {
   var sRti = rti.testingUniverseEval(universe, s);
   var tRti = rti.testingUniverseEval(universe, t);
-  Expect.isTrue(rti.testingIsLegacySubtype(universe, sRti, tRti), reason(s, t));
-  Expect.isTrue(rti.testingIsLegacySubtype(universe, tRti, sRti), reason(t, s));
+  Expect.isTrue(rti.testingIsSubtype(universe, sRti, tRti), reason(s, t));
+  Expect.isTrue(rti.testingIsSubtype(universe, tRti, sRti), reason(t, s));
 }
diff --git a/tests/compiler/dartdevc_native/js_interop_test.dart b/tests/compiler/dartdevc_native/js_interop_test.dart
index f80896d..4303dfc 100644
--- a/tests/compiler/dartdevc_native/js_interop_test.dart
+++ b/tests/compiler/dartdevc_native/js_interop_test.dart
@@ -5,10 +5,12 @@
 @JS()
 library js_interop_test;
 
-import 'package:expect/expect.dart';
-import 'package:js/js.dart';
 import 'dart:_foreign_helper' as helper show JS;
 import 'dart:_runtime' as dart;
+import 'dart:js' show context;
+
+import 'package:expect/expect.dart';
+import 'package:js/js.dart';
 
 @JS()
 class Console {
@@ -38,6 +40,7 @@
 
 @JS()
 class SomeClass {
+  external factory SomeClass(String Function() f);
   external set jsFunctionFieldSetter(String Function() f);
   external void Function(String Function() f) get jsFunctionFieldGetter;
   external String jsInstanceMethod(String Function() f);
@@ -46,7 +49,9 @@
 }
 
 @JS()
+@anonymous
 class NestedJs {
+  external factory NestedJs({String Function() constructorArg});
   external String get stringField;
 }
 
@@ -72,8 +77,6 @@
 
   final Function localNonNullLegacy = () => 'hello';
   final String Function() localNonNull = () => 'hello';
-  //final Function? localNullableLegacy = () => 'hello';
-  //final String Function()? localNullable = () => 'hello';
 
   // Assigment to JS static field.
   Expect.throws(() {
@@ -88,12 +91,6 @@
   Expect.throws(() {
     _jsStaticVariable = localNonNull;
   });
-  //Expect.throws(() {
-  //  _jsStaticVariable = localNullableLegacy;
-  //});
-  //Expect.throws(() {
-  //  _jsStaticVariable = localNullable;
-  //});
   _jsStaticVariable = allowInterop(dartStaticMethod);
   _jsStaticVariable = wrappedDartStaticMethod;
 
@@ -112,12 +109,6 @@
   Expect.throws(() {
     jsStaticFunction(localNonNull);
   });
-  //Expect.throws(() {
-  //  jsStaticFunction(localNullableLegacy);
-  //});
-  //Expect.throws(() {
-  //  jsStaticFunction(localNullable);
-  //});
   jsStaticFunction(allowInterop(() => 'hello'));
   jsStaticFunction(wrappedDartStaticMethod);
 
@@ -135,12 +126,6 @@
   Expect.throws(() {
     method(localNonNull);
   });
-  //Expect.throws(() {
-  //  method(localNullableLegacy);
-  //});
-  //Expect.throws(() {
-  //  method(localNullable);
-  //});
   method(allowInterop(() => 'hello'));
   method(wrappedDartStaticMethod);
 
@@ -162,12 +147,6 @@
   Expect.throws((() {
     someClass.jsFunctionFieldSetter = localNonNull;
   }));
-  //Expect.throws((() {
-  //  someClass.jsFunctionFieldSetter = localNullableLegacy;
-  //}));
-  //Expect.throws((() {
-  //  someClass.jsFunctionFieldSetter = localNullable;
-  //}));
   someClass.jsFunctionFieldSetter = allowInterop(() => 'hello');
   someClass.jsFunctionFieldSetter = wrappedDartStaticMethod;
 
@@ -184,15 +163,42 @@
   Expect.throws(() {
     someClass.jsInstanceMethod(localNonNull);
   });
-  //Expect.throws(() {
-  //  someClass.jsInstanceMethod(localNullableLegacy);
-  //});
-  //Expect.throws(() {
-  //  someClass.jsInstanceMethod(localNullable);
-  //});
   someClass.jsInstanceMethod(allowInterop(() => 'hello'));
   someClass.jsInstanceMethod(wrappedDartStaticMethod);
 
+  // Argument to  constructor.
+  context.callMethod('eval', ['function SomeClass(a) { a(); }']);
+  Expect.throws(() {
+    SomeClass(() => 'hello');
+  });
+  Expect.throws(() {
+    SomeClass(dartStaticMethod);
+  });
+  Expect.throws(() {
+    SomeClass(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    SomeClass(localNonNull);
+  });
+  SomeClass(allowInterop(() => 'hello'));
+  SomeClass(wrappedDartStaticMethod);
+
+  // Argument to anonymous constructor.
+  Expect.throws(() {
+    NestedJs(constructorArg: () => 'hello');
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: dartStaticMethod);
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: localNonNullLegacy);
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: localNonNull);
+  });
+  NestedJs(constructorArg: allowInterop(() => 'hello'));
+  NestedJs(constructorArg: wrappedDartStaticMethod);
+
   // Argument to torn off instance method.
   method = someClass.jsInstanceMethod;
   Expect.throws(() {
@@ -207,12 +213,6 @@
   Expect.throws(() {
     method(localNonNull);
   });
-  //Expect.throws(() {
-  //  method(localNullableLegacy);
-  //});
-  //Expect.throws(() {
-  //  method(localNullable);
-  //});
   method(allowInterop(() => 'hello'));
   method(wrappedDartStaticMethod);
 
@@ -229,12 +229,6 @@
   Expect.throws(() {
     someClass.jsFunctionFieldGetter(localNonNull);
   });
-  //Expect.throws(() {
-  //  someClass.jsFunctionFieldGetter(localNullableLegacy);
-  //});
-  //Expect.throws(() {
-  //  someClass.jsFunctionFieldGetter(localNullable);
-  //});
   someClass.jsFunctionFieldGetter(allowInterop(() => 'hello'));
   someClass.jsFunctionFieldGetter(wrappedDartStaticMethod);
 
@@ -256,12 +250,6 @@
   //Expect.throws(() {
   //  method(localNonNull);
   //});
-  //Expect.throws(() {
-  //  method(localNullableLegacy);
-  //});
-  //Expect.throws(() {
-  //  method(localNullable);
-  //});
   method(allowInterop(() => 'hello'));
   method(wrappedDartStaticMethod);
 
diff --git a/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart b/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart
new file mode 100644
index 0000000..56ce33f
--- /dev/null
+++ b/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart
@@ -0,0 +1,323 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+@JS()
+library js_interop_test;
+
+import 'dart:_foreign_helper' as helper show JS;
+import 'dart:_runtime' as dart;
+import 'dart:js' show context;
+
+import 'package:expect/expect.dart';
+import 'package:js/js.dart';
+
+// Requirements=nnbd
+
+@JS()
+class Console {
+  @JS()
+  external void log(arg);
+}
+
+@JS('console')
+external Console get console;
+
+@JS('console.log')
+external void log(String s);
+
+String dartStaticMethod() => 'hello';
+
+@JS('jsStaticVariable')
+external set _jsStaticVariable(Function f);
+
+@JS('jsStaticVariable')
+external void jsStaticVariable(String s);
+
+@JS('jsStaticFunction')
+external set _jsStaticFunction(Function f);
+
+@JS('jsStaticFunction')
+external void jsStaticFunction(String Function() f);
+
+@JS()
+class SomeClass {
+  external factory SomeClass(String Function() f);
+  external set jsFunctionFieldSetter(String Function() f);
+  external void Function(String Function() f) get jsFunctionFieldGetter;
+  external String jsInstanceMethod(String Function() f);
+
+  external NestedJs get jsNonFunctionField;
+}
+
+@JS()
+@anonymous
+class NestedJs {
+  external factory NestedJs({String Function() constructorArg});
+  external String get stringField;
+}
+
+@JS('someClass')
+external set _someClass(dynamic s);
+@JS('someClass')
+external SomeClass get someClass;
+
+void main() {
+  Function(String) jsFunc = helper.JS('', '(x) => {}');
+  Expect.equals(dart.assertInterop(jsFunc), jsFunc);
+
+  Expect.equals(dart.assertInterop(log), log);
+  Expect.equals(dart.assertInterop(console.log), console.log);
+  Expect.throws(() => dart.assertInterop(dartStaticMethod));
+
+  Expect.isNull(jsStaticVariable);
+  _jsStaticVariable = jsFunc;
+  Expect.isNotNull(jsStaticVariable);
+  Expect.equals(dart.assertInterop(jsStaticVariable), jsStaticVariable);
+
+  final dynamic wrappedDartStaticMethod = allowInterop(dartStaticMethod);
+
+  final Function localNonNullLegacy = () => 'hello';
+  final String Function() localNonNull = () => 'hello';
+  final Function? localNullableLegacy = () => 'hello';
+  final String Function()? localNullable = () => 'hello';
+
+  // Assigment to JS static field.
+  Expect.throws(() {
+    _jsStaticVariable = () => 'hello';
+  });
+  Expect.throws(() {
+    _jsStaticVariable = dartStaticMethod;
+  });
+  Expect.throws(() {
+    _jsStaticVariable = localNonNullLegacy;
+  });
+  Expect.throws(() {
+    _jsStaticVariable = localNonNull;
+  });
+  Expect.throws(() {
+    _jsStaticVariable = localNullableLegacy;
+  });
+  Expect.throws(() {
+    _jsStaticVariable = localNullable;
+  });
+  _jsStaticVariable = allowInterop(dartStaticMethod);
+  _jsStaticVariable = wrappedDartStaticMethod;
+
+  // Argument to static JS function.
+  Function(Function(String), String) jsFunc2 = helper.JS('', '(f) => f()');
+  _jsStaticFunction = jsFunc2;
+  Expect.throws(() {
+    jsStaticFunction(() => 'hello');
+  });
+  Expect.throws(() {
+    jsStaticFunction(dartStaticMethod);
+  });
+  Expect.throws(() {
+    jsStaticFunction(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    jsStaticFunction(localNonNull);
+  });
+  Expect.throws(() {
+    jsStaticFunction(localNullableLegacy);
+  });
+  Expect.throws(() {
+    jsStaticFunction(localNullable);
+  });
+  jsStaticFunction(allowInterop(() => 'hello'));
+  jsStaticFunction(wrappedDartStaticMethod);
+
+  // Argument to torn off static JS function
+  dynamic method = jsStaticFunction;
+  Expect.throws(() {
+    method(() => 'hello');
+  });
+  Expect.throws(() {
+    method(dartStaticMethod);
+  });
+  Expect.throws(() {
+    method(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    method(localNonNull);
+  });
+  Expect.throws(() {
+    method(localNullableLegacy);
+  });
+  Expect.throws(() {
+    method(localNullable);
+  });
+  method(allowInterop(() => 'hello'));
+  method(wrappedDartStaticMethod);
+
+  // Assignment to instance field.
+  _someClass = helper.JS(
+      '',
+      '{"jsInstanceMethod": function(f) {return f();}, '
+          '"jsNonFunctionField": {"stringField":"hello js"}, '
+          '"jsFunctionFieldGetter": function(f) {return f();}}');
+  Expect.throws((() {
+    someClass.jsFunctionFieldSetter = () => 'hello';
+  }));
+  Expect.throws((() {
+    someClass.jsFunctionFieldSetter = dartStaticMethod;
+  }));
+  Expect.throws((() {
+    someClass.jsFunctionFieldSetter = localNonNullLegacy;
+  }));
+  Expect.throws((() {
+    someClass.jsFunctionFieldSetter = localNonNull;
+  }));
+  Expect.throws((() {
+    someClass.jsFunctionFieldSetter = localNullableLegacy;
+  }));
+  Expect.throws((() {
+    someClass.jsFunctionFieldSetter = localNullable;
+  }));
+  someClass.jsFunctionFieldSetter = allowInterop(() => 'hello');
+  someClass.jsFunctionFieldSetter = wrappedDartStaticMethod;
+
+  // Argument to instance method.
+  Expect.throws(() {
+    someClass.jsInstanceMethod(() => 'hello');
+  });
+  Expect.throws(() {
+    someClass.jsInstanceMethod(dartStaticMethod);
+  });
+  Expect.throws(() {
+    someClass.jsInstanceMethod(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    someClass.jsInstanceMethod(localNonNull);
+  });
+  Expect.throws(() {
+    someClass.jsInstanceMethod(localNullableLegacy);
+  });
+  Expect.throws(() {
+    someClass.jsInstanceMethod(localNullable);
+  });
+  someClass.jsInstanceMethod(allowInterop(() => 'hello'));
+  someClass.jsInstanceMethod(wrappedDartStaticMethod);
+
+  // Argument to  constructor.
+  context.callMethod('eval', ['function SomeClass(a) { a(); }']);
+  Expect.throws(() {
+    SomeClass(() => 'hello');
+  });
+  Expect.throws(() {
+    SomeClass(dartStaticMethod);
+  });
+  Expect.throws(() {
+    SomeClass(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    SomeClass(localNonNull);
+  });
+  Expect.throws(() {
+    SomeClass(localNullableLegacy);
+  });
+  Expect.throws(() {
+    SomeClass(localNullable);
+  });
+  SomeClass(allowInterop(() => 'hello'));
+  SomeClass(wrappedDartStaticMethod);
+
+  // Argument to anonymous constructor.
+  Expect.throws(() {
+    NestedJs(constructorArg: () => 'hello');
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: dartStaticMethod);
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: localNonNullLegacy);
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: localNonNull);
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: localNullableLegacy);
+  });
+  Expect.throws(() {
+    NestedJs(constructorArg: localNullable);
+  });
+  NestedJs(constructorArg: allowInterop(() => 'hello'));
+  NestedJs(constructorArg: wrappedDartStaticMethod);
+
+  // Argument to torn off instance method.
+  method = someClass.jsInstanceMethod;
+  Expect.throws(() {
+    method(() => 'hello');
+  });
+  Expect.throws(() {
+    method(dartStaticMethod);
+  });
+  Expect.throws(() {
+    method(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    method(localNonNull);
+  });
+  Expect.throws(() {
+    method(localNullableLegacy);
+  });
+  Expect.throws(() {
+    method(localNullable);
+  });
+  method(allowInterop(() => 'hello'));
+  method(wrappedDartStaticMethod);
+
+  // Function typed getter
+  Expect.throws(() {
+    someClass.jsFunctionFieldGetter(() => 'hello');
+  });
+  Expect.throws(() {
+    someClass.jsFunctionFieldGetter(dartStaticMethod);
+  });
+  Expect.throws(() {
+    someClass.jsFunctionFieldGetter(localNonNullLegacy);
+  });
+  Expect.throws(() {
+    someClass.jsFunctionFieldGetter(localNonNull);
+  });
+  Expect.throws(() {
+    someClass.jsFunctionFieldGetter(localNullableLegacy);
+  });
+  Expect.throws(() {
+    someClass.jsFunctionFieldGetter(localNullable);
+  });
+  someClass.jsFunctionFieldGetter(allowInterop(() => 'hello'));
+  someClass.jsFunctionFieldGetter(wrappedDartStaticMethod);
+
+  // Stored Function typed getter
+  method = someClass.jsFunctionFieldGetter;
+  // We lose safety after calling a getter that returns a function, which takes
+  // a function as an argument. Since this can be modeled with a method, isntead
+  // of a getter returning a function, we don't expect this is a pattern likely
+  // to show up in real code.
+  //Expect.throws(() {
+  //  method(() => 'hello');
+  //});
+  //Expect.throws(() {
+  //  method(dartStaticMethod);
+  //});
+  //Expect.throws(() {
+  //  method(localNonNullLegacy);
+  //});
+  //Expect.throws(() {
+  //  method(localNonNull);
+  //});
+  //Expect.throws(() {
+  //  method(localNullableLegacy);
+  //});
+  //Expect.throws(() {
+  //  method(localNullable);
+  //});
+  method(allowInterop(() => 'hello'));
+  method(wrappedDartStaticMethod);
+
+  // Non-function fields
+  Expect.equals('hello js', someClass.jsNonFunctionField.stringField,
+      'Does not wrap access to a field');
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 834728b..e13f379 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -6,7 +6,7 @@
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
 
 [ $mode == debug ]
-regexp/pcre_test: Slow # Issue 22008
+regexp/pcre_test: Slow, Pass # Issue 22008
 
 [ $arch == x64 && $system == windows ]
 stopwatch_test: Skip # Flaky test due to expected performance behaviour.
@@ -22,7 +22,7 @@
 bigint_js_test: SkipByDesign # JavaScript-specific test
 
 [ $compiler == dart2js && $runtime != none ]
-regexp/pcre_test: Slow # Issue 21593
+regexp/pcre_test: Slow, Pass # Issue 21593
 
 # We no longer expect Dart2 tests to run with the standalone VM without the new
 # common front end, but for now we get better coverage by still running them in
@@ -43,19 +43,19 @@
 bigint_test/15: SkipSlow # modPow is very slow
 int_parse_with_limited_ints_test: Skip # Requires fixed-size int64 support.
 typed_data_with_limited_ints_test: Skip # Requires fixed-size int64 support.
-uri_parse_test: Slow
-uri_test: Slow
+uri_parse_test: Slow, Pass
+uri_test: Slow, Pass
 
 [ $compiler == dartkb || $compiler == dartkp ]
-bigint_parse_radix_test: Slow # --no_intrinsify
+bigint_parse_radix_test: Slow, Pass # --no_intrinsify
 bigint_test/03: SkipSlow # --no_intrinsify
 bigint_test/15: SkipSlow # --no_intrinsify
 
 [ $runtime == dart_precompiled || $runtime == vm ]
 regexp/global_test: Skip # Issue 21709
-regexp/pcre_test: Slow
+regexp/pcre_test: Slow, Pass
 
 [ $hot_reload || $hot_reload_rollback ]
 bigint_parse_radix_test: Skip # Issue 31659. Issue 34361.
 bigint_test: Skip # Issue 31659
-integer_parsed_mul_div_vm_test: Slow # Slow
+integer_parsed_mul_div_vm_test: Slow, Pass # Slow
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 834728b..e13f379 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -6,7 +6,7 @@
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
 
 [ $mode == debug ]
-regexp/pcre_test: Slow # Issue 22008
+regexp/pcre_test: Slow, Pass # Issue 22008
 
 [ $arch == x64 && $system == windows ]
 stopwatch_test: Skip # Flaky test due to expected performance behaviour.
@@ -22,7 +22,7 @@
 bigint_js_test: SkipByDesign # JavaScript-specific test
 
 [ $compiler == dart2js && $runtime != none ]
-regexp/pcre_test: Slow # Issue 21593
+regexp/pcre_test: Slow, Pass # Issue 21593
 
 # We no longer expect Dart2 tests to run with the standalone VM without the new
 # common front end, but for now we get better coverage by still running them in
@@ -43,19 +43,19 @@
 bigint_test/15: SkipSlow # modPow is very slow
 int_parse_with_limited_ints_test: Skip # Requires fixed-size int64 support.
 typed_data_with_limited_ints_test: Skip # Requires fixed-size int64 support.
-uri_parse_test: Slow
-uri_test: Slow
+uri_parse_test: Slow, Pass
+uri_test: Slow, Pass
 
 [ $compiler == dartkb || $compiler == dartkp ]
-bigint_parse_radix_test: Slow # --no_intrinsify
+bigint_parse_radix_test: Slow, Pass # --no_intrinsify
 bigint_test/03: SkipSlow # --no_intrinsify
 bigint_test/15: SkipSlow # --no_intrinsify
 
 [ $runtime == dart_precompiled || $runtime == vm ]
 regexp/global_test: Skip # Issue 21709
-regexp/pcre_test: Slow
+regexp/pcre_test: Slow, Pass
 
 [ $hot_reload || $hot_reload_rollback ]
 bigint_parse_radix_test: Skip # Issue 31659. Issue 34361.
 bigint_test: Skip # Issue 31659
-integer_parsed_mul_div_vm_test: Slow # Slow
+integer_parsed_mul_div_vm_test: Slow, Pass # Slow
diff --git a/tests/ffi/data_test.dart b/tests/ffi/data_test.dart
index a533ced..b2d304d 100644
--- a/tests/ffi/data_test.dart
+++ b/tests/ffi/data_test.dart
@@ -103,7 +103,7 @@
   //
   // Null pointer throws a Dart exception.
   bool returnedNullPointer = false;
-  Pointer<Int8> p;
+  Pointer<Int8> p = nullptr;
   try {
     p = allocate<Int8>(count: 0);
   } on Exception {
diff --git a/tests/ffi/dylib_utils.dart b/tests/ffi/dylib_utils.dart
index fb8153a..2b7ac27 100644
--- a/tests/ffi/dylib_utils.dart
+++ b/tests/ffi/dylib_utils.dart
@@ -5,7 +5,7 @@
 import 'dart:ffi' as ffi;
 import 'dart:io' show Platform;
 
-String _platformPath(String name, {String path}) {
+String _platformPath(String name, {String? path}) {
   if (path == null) path = "";
   if (Platform.isLinux || Platform.isAndroid)
     return path + "lib" + name + ".so";
@@ -14,7 +14,7 @@
   throw Exception("Platform not implemented");
 }
 
-ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String? path}) {
   String fullPath = _platformPath(name, path: path);
   return ffi.DynamicLibrary.open(fullPath);
 }
diff --git a/tests/ffi/external_typed_data_test.dart b/tests/ffi/external_typed_data_test.dart
index 8d19f79..2b584b4 100644
--- a/tests/ffi/external_typed_data_test.dart
+++ b/tests/ffi/external_typed_data_test.dart
@@ -199,8 +199,8 @@
   free(ptr);
 }
 
-double maxFloat = (2 - pow(2, -23)) * pow(2, 127);
-double maxDouble = (2 - pow(2, -52)) * pow(2, pow(2, 10) - 1);
+double maxFloat = (2 - pow(2, -23)) * pow(2, 127) as double;
+double maxDouble = (2 - pow(2, -52)) * pow(2, pow(2, 10) - 1) as double;
 
 void testFloatLoad() {
   // Load
diff --git a/tests/ffi/regress_37254_test.dart b/tests/ffi/regress_37254_test.dart
index dcd42b9..b4fce7c 100644
--- a/tests/ffi/regress_37254_test.dart
+++ b/tests/ffi/regress_37254_test.dart
@@ -84,7 +84,7 @@
 
   // Successful implicit downcast of argument at runtime.
   // Should succeed now, should statically be rejected when NNBD lands.
-  a.value = b;
+  a.value = b as Pointer<Int8>;
 
   free(a);
   free(b);
@@ -97,7 +97,7 @@
   // Failing implicit downcast of argument at runtime.
   // Should fail now at runtime, should statically be rejected when NNBD lands.
   Expect.throws(() {
-    a.value = b;
+    a.value = b as Pointer<Int8>;
   });
 
   free(a);
@@ -199,7 +199,7 @@
   // Reified as Pointer<Pointer<Int8>> at runtime.
   final Pointer<Pointer<NativeType>> a = allocate<Pointer<Int8>>();
 
-  Pointer<Int8> b = a.value;
+  Pointer<Int8> b = a.value as Pointer<Int8>;
   Expect.type<Pointer<Int8>>(b);
 
   free(a);
@@ -222,7 +222,7 @@
   // Failing implicit downcast of return value at runtime.
   // Should fail now at runtime, should statically be rejected when NNBD lands.
   Expect.throws(() {
-    Pointer<Int8> b = a.value;
+    Pointer<Int8> b = a.value as Pointer<Int8>;
   });
 
   free(a);
diff --git a/tests/ffi/variance_function_test.dart b/tests/ffi/variance_function_test.dart
index d6e6378..539c245 100644
--- a/tests/ffi/variance_function_test.dart
+++ b/tests/ffi/variance_function_test.dart
@@ -165,7 +165,7 @@
 }
 
 // Pointer to return to C when C calls back into Dart and asks for a Pointer.
-Pointer<Int64> data;
+Pointer<Int64> data = nullptr;
 
 Pointer<Int64> int64PointerReturnOp() {
   return data;
@@ -194,7 +194,7 @@
       CallbackNaTyPointerParamOpDart>(callbackParamOpName);
   final fp = Pointer.fromFunction<Int64PointerParamOp>(int64PointerParamOp);
   Expect.throws(() {
-    callback(fp);
+    callback(fp as Pointer<NativeFunction<NaTyPointerParamOp>>);
   });
 }
 
diff --git a/tests/ffi/vmspecific_enable_ffi_test.dart b/tests/ffi/vmspecific_enable_ffi_test.dart
index 3cbd635..f44753d 100644
--- a/tests/ffi/vmspecific_enable_ffi_test.dart
+++ b/tests/ffi/vmspecific_enable_ffi_test.dart
@@ -4,18 +4,14 @@
 //
 // Dart test program for testing the --enable-ffi=false flag.
 //
-// Note: In AoT and Android the flag is passed to Dart when executing the
-// precompiled executable, so the error shows up as a runtime error rather than
-// a compile time error.
-//
 // VMOptions=--enable-ffi=false
 
-import 'dart:ffi'; //# 01: compile-time error, runtime error
-import 'package:ffi/ffi.dart'; //# 01: compile-time error, runtime error
+import 'dart:ffi'; //# 01: compile-time error
+import 'package:ffi/ffi.dart'; //# 01: compile-time error
 
 void main() {
-  Pointer<Int8> p = //# 01: compile-time error, runtime error
-      allocate(); //# 01: compile-time error, runtime error
-  print(p.address); //# 01: compile-time error, runtime error
-  free(p); //# 01: compile-time error, runtime error
+  Pointer<Int8> p = //# 01: compile-time error
+      allocate(); //# 01: compile-time error
+  print(p.address); //# 01: compile-time error
+  free(p); //# 01: compile-time error
 }
diff --git a/tests/ffi/vmspecific_static_checks_test.dart b/tests/ffi/vmspecific_static_checks_test.dart
index 410f33f..a0af90f 100644
--- a/tests/ffi/vmspecific_static_checks_test.dart
+++ b/tests/ffi/vmspecific_static_checks_test.dart
@@ -51,7 +51,7 @@
 
 void testGetGeneric() {
   int generic(Pointer p) {
-    int result;
+    int result = -1;
     result = p.value; //# 20: compile-time error
     return result;
   }
@@ -64,10 +64,10 @@
 }
 
 void testGetGeneric2() {
-  T generic<T extends Object>() {
+  T? generic<T extends Object>() {
     Pointer<Int8> p = allocate();
     p.value = 123;
-    T result;
+    T? result;
     result = p.value; //# 21: compile-time error
     free(p);
     return result;
@@ -161,19 +161,19 @@
 }
 
 void testAsFunctionGeneric() {
-  T generic<T extends Function>() {
+  T generic<T extends Function>(T defaultFunction) {
     Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
-    Function f;
+    T f = defaultFunction;
     f = p.asFunction<T>(); //# 11: compile-time error
     return f;
   }
 
-  generic<IntUnOp>();
+  generic<IntUnOp>((int a) => a + 1);
 }
 
 void testAsFunctionGeneric2() {
   generic(Pointer<NativeFunction> p) {
-    Function f;
+    Function f = () => "dummy";
     f = p.asFunction<IntUnOp>(); //# 12: compile-time error
     return f;
   }
@@ -203,7 +203,7 @@
 
 void testFromFunctionGeneric() {
   Pointer<NativeFunction> generic<T extends Function>(T f) {
-    Pointer<NativeFunction<NativeDoubleUnOp>> result;
+    Pointer<NativeFunction<NativeDoubleUnOp>> result = nullptr;
     result = Pointer.fromFunction(f); //# 70: compile-time error
     return result;
   }
@@ -213,7 +213,7 @@
 
 void testFromFunctionGeneric2() {
   Pointer<NativeFunction<T>> generic<T extends Function>() {
-    Pointer<NativeFunction<T>> result;
+    Pointer<NativeFunction<T>> result = nullptr;
     result = Pointer.fromFunction(myTimesThree); //# 71: compile-time error
     return result;
   }
@@ -254,7 +254,7 @@
 void testLookupFunctionGeneric() {
   Function generic<T extends Function>() {
     DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-    Function result;
+    Function result = () => "dummy";
     result = l.lookupFunction<T, DoubleUnOp>("cos"); //# 15: compile-time error
     return result;
   }
@@ -265,7 +265,7 @@
 void testLookupFunctionGeneric2() {
   Function generic<T extends Function>() {
     DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-    Function result;
+    Function result = () => "dummy";
     result = //# 16: compile-time error
         l.lookupFunction<NativeDoubleUnOp, T>("cos"); //# 16: compile-time error
     return result;
diff --git a/tests/ffi_2/aliasing_test.dart b/tests/ffi_2/aliasing_test.dart
new file mode 100644
index 0000000..6c2f698
--- /dev/null
+++ b/tests/ffi_2/aliasing_test.dart
@@ -0,0 +1,212 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test programing for testing that optimizations do wrongly assume loads
+// from and stores to C memory are not aliased.
+//
+// SharedObjects=ffi_test_functions
+// VMOptions=--deterministic --optimization-counter-threshold=50
+
+import 'dart:ffi';
+
+import "package:ffi/ffi.dart";
+import "package:expect/expect.dart";
+
+import 'ffi_test_helpers.dart';
+
+void main() {
+  for (int i = 0; i < 100; ++i) {
+    testNonAlias();
+    testAliasCast();
+    testAliasCast2();
+    testAliasOffsetBy();
+    testAliasOffsetBy2();
+    testAliasElementAt();
+    testAliasElementAt2();
+    testAliasFromAddress();
+    testAliasFromAddress2();
+    testAliasFromAddressViaMemory();
+    testAliasFromAddressViaMemory2();
+    testAliasFromAddressViaNativeFunction();
+    testAliasFromAddressViaNativeFunction2();
+    testPartialOverlap();
+  }
+}
+
+void testNonAlias() {
+  final source = allocate<Int64>();
+  source.value = 42;
+  final int a = source.value;
+  source.value = 1984;
+  // alias.value should be re-executed, as we wrote to alias.
+  Expect.notEquals(a, source.value);
+  free(source);
+}
+
+void testAliasCast() {
+  final source = allocate<Int64>();
+  final alias = source.cast<Int8>().cast<Int64>();
+  source.value = 42;
+  final int a = source.value;
+  alias.value = 1984;
+  // source.value should be re-executed, we wrote alias which aliases source.
+  Expect.notEquals(a, source.value);
+  free(source);
+}
+
+void testAliasCast2() {
+  final source = allocate<Int64>();
+  final alias = source.cast<Int16>().cast<Int64>();
+  final alias2 = source.cast<Int8>().cast<Int64>();
+  alias.value = 42;
+  final int a = alias.value;
+  alias2.value = 1984;
+  // alias.value should be re-executed, we wrote alias2 which aliases alias.
+  Expect.notEquals(a, alias.value);
+  free(source);
+}
+
+void testAliasOffsetBy() {
+  final source = allocate<Int64>(count: 2);
+  final alias = source.offsetBy(8).offsetBy(-8);
+  source.value = 42;
+  final int a = source.value;
+  alias.value = 1984;
+  // source.value should be re-executed, we wrote alias which aliases source.
+  Expect.notEquals(a, source.value);
+  free(source);
+}
+
+void testAliasOffsetBy2() {
+  final source = allocate<Int64>(count: 3);
+  final alias = source.offsetBy(16).offsetBy(-16);
+  final alias2 = source.offsetBy(8).offsetBy(-8);
+  alias.value = 42;
+  final int a = alias.value;
+  alias2.value = 1984;
+  // alias.value should be re-executed, we wrote alias2 which aliases alias.
+  Expect.notEquals(a, alias.value);
+  free(source);
+}
+
+void testAliasElementAt() {
+  final source = allocate<Int64>(count: 2);
+  final alias = source.elementAt(1).elementAt(-1);
+  source.value = 42;
+  final int a = source.value;
+  alias.value = 1984;
+  // source.value should be re-executed, we wrote alias which aliases source.
+  Expect.notEquals(a, source.value);
+  free(source);
+}
+
+void testAliasElementAt2() {
+  final source = allocate<Int64>(count: 3);
+  final alias = source.elementAt(2).elementAt(-2);
+  final alias2 = source.elementAt(1).elementAt(-1);
+  alias.value = 42;
+  final int a = alias.value;
+  alias2.value = 1984;
+  // alias.value should be re-executed, we wrote alias2 which aliases alias.
+  Expect.notEquals(a, alias.value);
+  free(source);
+}
+
+void testAliasFromAddress() {
+  final source = allocate<Int64>();
+  final alias = Pointer<Int64>.fromAddress(source.address);
+  source.value = 42;
+  final int a = source.value;
+  alias.value = 1984;
+  // source.value should be re-executed, we wrote alias which aliases source.
+  Expect.notEquals(a, source.value);
+  free(source);
+}
+
+void testAliasFromAddress2() {
+  final source = allocate<Int64>();
+  final alias = Pointer<Int64>.fromAddress(source.address);
+  final alias2 = Pointer<Int64>.fromAddress(source.address);
+  alias.value = 42;
+  final int a = alias.value;
+  alias2.value = 1984;
+  // alias.value should be re-executed, we wrote alias2 which aliases alias.
+  Expect.notEquals(a, alias.value);
+  free(source);
+}
+
+void testAliasFromAddressViaMemory() {
+  final helper = allocate<IntPtr>();
+  final source = allocate<Int64>();
+  helper.value = source.address;
+  final alias = Pointer<Int64>.fromAddress(helper.value);
+  source.value = 42;
+  final int a = source.value;
+  alias.value = 1984;
+  // source.value should be re-executed, we wrote alias which aliases source.
+  Expect.notEquals(a, source.value);
+  free(helper);
+  free(source);
+}
+
+void testAliasFromAddressViaMemory2() {
+  final helper = allocate<IntPtr>();
+  final source = allocate<Int64>();
+  helper.value = source.address;
+  final alias = Pointer<Int64>.fromAddress(helper.value);
+  final alias2 = Pointer<Int64>.fromAddress(helper.value);
+  alias.value = 42;
+  final int a = alias.value;
+  alias2.value = 1984;
+  // alias.value should be re-executed, we wrote alias2 which aliases alias.
+  Expect.notEquals(a, alias.value);
+  free(helper);
+  free(source);
+}
+
+typedef NativeQuadOpSigned = Int64 Function(Int8, Int16, Int32, Int64);
+typedef QuadOp = int Function(int, int, int, int);
+
+QuadOp intComputation = ffiTestFunctions
+    .lookupFunction<NativeQuadOpSigned, QuadOp>("IntComputation");
+
+void testAliasFromAddressViaNativeFunction() {
+  final source = allocate<Int64>();
+  final alias =
+      Pointer<Int64>.fromAddress(intComputation(0, 0, 0, source.address));
+  source.value = 42;
+  final int a = source.value;
+  alias.value = 1984;
+  // source.value should be re-executed, we wrote alias which aliases source.
+  Expect.notEquals(a, source.value);
+  free(source);
+}
+
+void testAliasFromAddressViaNativeFunction2() {
+  final source = allocate<Int64>();
+  final alias =
+      Pointer<Int64>.fromAddress(intComputation(0, 0, 0, source.address));
+  final alias2 =
+      Pointer<Int64>.fromAddress(intComputation(0, 0, 0, source.address));
+  alias.value = 42;
+  final int a = alias.value;
+  alias2.value = 1984;
+  // alias.value should be re-executed, we wrote alias2 which aliases alias.
+  Expect.notEquals(a, alias.value);
+  free(source);
+}
+
+@pragma('vm:never-inline')
+Pointer<Int8> makeDerived(Pointer<Int64> source) =>
+    source.offsetBy(7).cast<Int8>();
+
+testPartialOverlap() {
+  final source = allocate<Int64>(count: 2);
+  final derived = makeDerived(source);
+  source.value = 0x1122334455667788;
+  final int value = source.value;
+  derived.value = 0xaa;
+  Expect.notEquals(value, source.value);
+  free(source);
+}
diff --git a/tests/ffi_2/analysis_options.yaml b/tests/ffi_2/analysis_options.yaml
new file mode 100644
index 0000000..f8701d7
--- /dev/null
+++ b/tests/ffi_2/analysis_options.yaml
@@ -0,0 +1,3 @@
+analyzer:
+  exclude:
+    # Do analyze this subfolder in the tests/ even if tests/ is fully excluded.
diff --git a/tests/ffi_2/callback_tests_utils.dart b/tests/ffi_2/callback_tests_utils.dart
new file mode 100644
index 0000000..ac5fdcb
--- /dev/null
+++ b/tests/ffi_2/callback_tests_utils.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+import "package:expect/expect.dart";
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+typedef NativeCallbackTest = Int32 Function(Pointer);
+typedef NativeCallbackTestFn = int Function(Pointer);
+
+class CallbackTest {
+  final String name;
+  final Pointer callback;
+  final bool skip;
+
+  CallbackTest(this.name, this.callback, {bool skipIf: false})
+      : skip = skipIf {}
+
+  void run() {
+    if (skip) return;
+
+    final NativeCallbackTestFn tester = ffiTestFunctions
+        .lookupFunction<NativeCallbackTest, NativeCallbackTestFn>("Test$name");
+    final int testCode = tester(callback);
+    if (testCode != 0) {
+      Expect.fail("Test $name failed.");
+    }
+  }
+}
diff --git a/tests/ffi_2/coordinate.dart b/tests/ffi_2/coordinate.dart
new file mode 100644
index 0000000..92dd9d4
--- /dev/null
+++ b/tests/ffi_2/coordinate.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library FfiTest;
+
+import 'dart:ffi';
+import "package:ffi/ffi.dart";
+
+/// Sample struct for dart:ffi library.
+class Coordinate extends Struct {
+  @Double()
+  double x;
+
+  @Double()
+  double y;
+
+  Pointer<Coordinate> next;
+
+  factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
+    return allocate<Coordinate>().ref
+      ..x = x
+      ..y = y
+      ..next = next;
+  }
+}
diff --git a/tests/ffi_2/coordinate_bare.dart b/tests/ffi_2/coordinate_bare.dart
new file mode 100644
index 0000000..daaea24
--- /dev/null
+++ b/tests/ffi_2/coordinate_bare.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library FfiTestCoordinateBare;
+
+import 'dart:ffi';
+
+/// Stripped down sample struct for dart:ffi library.
+class Coordinate extends Struct {
+  @Double()
+  double x;
+
+  @Double()
+  double y;
+
+  Pointer<Coordinate> next;
+}
diff --git a/tests/ffi_2/data_not_asan_test.dart b/tests/ffi_2/data_not_asan_test.dart
new file mode 100644
index 0000000..e95658f
--- /dev/null
+++ b/tests/ffi_2/data_not_asan_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi primitive data pointers.
+//
+// These mallocs trigger an asan alarm, so these tests are in a separate file
+// which is excluded in asan mode.
+
+import 'dart:ffi';
+
+import "package:ffi/ffi.dart";
+import "package:expect/expect.dart";
+
+void main() {
+  testPointerAllocateTooLarge();
+  testPointerAllocateNegative();
+}
+
+void testPointerAllocateTooLarge() {
+  // Try to allocate something that doesn't fit in 64 bit address space.
+  int maxInt = 9223372036854775807; // 2^63 - 1
+  Expect.throws(() => allocate<Int64>(count: maxInt));
+
+  // Try to allocate almost the full 64 bit address space.
+  int maxInt1_8 = 1152921504606846975; // 2^60 -1
+  Expect.throws(() => allocate<Int64>(count: maxInt1_8));
+}
+
+void testPointerAllocateNegative() {
+  // Passing in -1 will be converted into an unsigned integer. So, it will try
+  // to allocate SIZE_MAX - 1 + 1 bytes. This will fail as it is the max amount
+  // of addressable memory on the system.
+  Expect.throws(() => allocate<Int8>(count: -1));
+}
diff --git a/tests/ffi_2/data_test.dart b/tests/ffi_2/data_test.dart
new file mode 100644
index 0000000..a533ced
--- /dev/null
+++ b/tests/ffi_2/data_test.dart
@@ -0,0 +1,518 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi primitive data pointers.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'ffi_test_helpers.dart';
+
+void main() {
+  testPointerBasic();
+  testPointerFromPointer();
+  testPointerPointerArithmetic();
+  testPointerPointerArithmeticSizes();
+  testPointerAllocateZero();
+  testPointerCast();
+  testCastGeneric();
+  testCastGeneric2();
+  testCastNativeType();
+  testCondensedNumbersInt8();
+  testCondensedNumbersFloat();
+  testRangeInt8();
+  testRangeUint8();
+  testRangeInt16();
+  testRangeUint16();
+  testRangeInt32();
+  testRangeUint32();
+  testRangeInt64();
+  testRangeUint64();
+  testRangeIntPtr();
+  testFloat();
+  testDouble();
+  testVoid();
+  testPointerPointer();
+  testPointerPointerNull();
+  testSizeOf();
+  testPointerChain(100);
+  testTypeTest();
+  testToString();
+  testEquality();
+  testAllocateGeneric();
+  testAllocateVoid();
+  testAllocateNativeFunction();
+  testAllocateNativeType();
+  testSizeOfGeneric();
+  testSizeOfVoid();
+  testSizeOfNativeFunction();
+  testSizeOfNativeType();
+  testDynamicInvocation();
+  testMemoryAddressTruncation();
+  testNullptrCast();
+}
+
+void testPointerBasic() {
+  Pointer<Int64> p = allocate();
+  p.value = 42;
+  Expect.equals(42, p.value);
+  free(p);
+}
+
+void testPointerFromPointer() {
+  Pointer<Int64> p = allocate();
+  p.value = 1337;
+  int ptr = p.address;
+  Pointer<Int64> p2 = Pointer.fromAddress(ptr);
+  Expect.equals(1337, p2.value);
+  free(p);
+}
+
+void testPointerPointerArithmetic() {
+  Pointer<Int64> p = allocate(count: 2);
+  Pointer<Int64> p2 = p.elementAt(1);
+  p2.value = 100;
+  Pointer<Int64> p3 = p.offsetBy(8);
+  Expect.equals(100, p3.value);
+  free(p);
+}
+
+void testPointerPointerArithmeticSizes() {
+  Pointer<Int64> p = allocate(count: 2);
+  Pointer<Int64> p2 = p.elementAt(1);
+  int addr = p.address;
+  Expect.equals(addr + 8, p2.address);
+  free(p);
+
+  Pointer<Int32> p3 = allocate(count: 2);
+  Pointer<Int32> p4 = p3.elementAt(1);
+  addr = p3.address;
+  Expect.equals(addr + 4, p4.address);
+  free(p3);
+}
+
+void testPointerAllocateZero() {
+  // > If size is 0, either a null pointer or a unique pointer that can be
+  // > successfully passed to free() shall be returned.
+  // http://pubs.opengroup.org/onlinepubs/009695399/functions/malloc.html
+  //
+  // Null pointer throws a Dart exception.
+  bool returnedNullPointer = false;
+  Pointer<Int8> p;
+  try {
+    p = allocate<Int8>(count: 0);
+  } on Exception {
+    returnedNullPointer = true;
+  }
+  if (!returnedNullPointer) {
+    free(p);
+  }
+}
+
+void testPointerCast() {
+  Pointer<Int64> p = allocate();
+  p.cast<Int32>(); // gets the correct type args back
+  free(p);
+}
+
+void testCastGeneric() {
+  Pointer<T> generic<T extends NativeType>(Pointer<Int16> p) {
+    return p.cast();
+  }
+
+  Pointer<Int16> p = allocate();
+  Pointer<Int64> p2 = generic(p);
+  free(p);
+}
+
+void testCastGeneric2() {
+  Pointer<Int64> generic<T extends NativeType>(Pointer<T> p) {
+    return p.cast();
+  }
+
+  Pointer<Int16> p = allocate();
+  Pointer<Int64> p2 = generic(p);
+  free(p);
+}
+
+void testCastNativeType() {
+  Pointer<Int64> p = allocate();
+  p.cast<Pointer>();
+  free(p);
+}
+
+void testCondensedNumbersInt8() {
+  Pointer<Int8> p = allocate(count: 8);
+  for (var i in [0, 1, 2, 3, 4, 5, 6, 7]) {
+    p[i] = i * 3;
+  }
+  for (var i in [0, 1, 2, 3, 4, 5, 6, 7]) {
+    Expect.equals(i * 3, p[i]);
+  }
+  free(p);
+}
+
+void testCondensedNumbersFloat() {
+  Pointer<Float> p = allocate(count: 8);
+  for (var i in [0, 1, 2, 3, 4, 5, 6, 7]) {
+    p[i] = 1.511366173271439e-13;
+  }
+  for (var i in [0, 1, 2, 3, 4, 5, 6, 7]) {
+    Expect.equals(1.511366173271439e-13, p[i]);
+  }
+  free(p);
+}
+
+void testRangeInt8() {
+  Pointer<Int8> p = allocate();
+  p.value = 127;
+  Expect.equals(127, p.value);
+  p.value = -128;
+  Expect.equals(-128, p.value);
+
+  Expect.equals(0x0000000000000080, 128);
+  Expect.equals(0xFFFFFFFFFFFFFF80, -128);
+  p.value = 128;
+  Expect.equals(-128, p.value); // truncated and sign extended
+
+  Expect.equals(0xFFFFFFFFFFFFFF7F, -129);
+  Expect.equals(0x000000000000007F, 127);
+  p.value = -129;
+  Expect.equals(127, p.value); // truncated
+  free(p);
+}
+
+void testRangeUint8() {
+  Pointer<Uint8> p = allocate();
+  p.value = 255;
+  Expect.equals(255, p.value);
+  p.value = 0;
+  Expect.equals(0, p.value);
+
+  Expect.equals(0x0000000000000000, 0);
+  Expect.equals(0x0000000000000100, 256);
+  p.value = 256;
+  Expect.equals(0, p.value); // truncated
+
+  Expect.equals(0xFFFFFFFFFFFFFFFF, -1);
+  Expect.equals(0x00000000000000FF, 255);
+  p.value = -1;
+  Expect.equals(255, p.value); // truncated
+  free(p);
+}
+
+void testRangeInt16() {
+  Pointer<Int16> p = allocate();
+  p.value = 0x7FFF;
+  Expect.equals(0x7FFF, p.value);
+  p.value = -0x8000;
+  Expect.equals(-0x8000, p.value);
+  p.value = 0x8000;
+  Expect.equals(0xFFFFFFFFFFFF8000, p.value); // truncated and sign extended
+  p.value = -0x8001;
+  Expect.equals(0x7FFF, p.value); // truncated
+  free(p);
+}
+
+void testRangeUint16() {
+  Pointer<Uint16> p = allocate();
+  p.value = 0xFFFF;
+  Expect.equals(0xFFFF, p.value);
+  p.value = 0;
+  Expect.equals(0, p.value);
+  p.value = 0x10000;
+  Expect.equals(0, p.value); // truncated
+  p.value = -1;
+  Expect.equals(0xFFFF, p.value); // truncated
+  free(p);
+}
+
+void testRangeInt32() {
+  Pointer<Int32> p = allocate();
+  p.value = 0x7FFFFFFF;
+  Expect.equals(0x7FFFFFFF, p.value);
+  p.value = -0x80000000;
+  Expect.equals(-0x80000000, p.value);
+  p.value = 0x80000000;
+  Expect.equals(0xFFFFFFFF80000000, p.value); // truncated and sign extended
+  p.value = -0x80000001;
+  Expect.equals(0x7FFFFFFF, p.value); // truncated
+  free(p);
+}
+
+void testRangeUint32() {
+  Pointer<Uint32> p = allocate();
+  p.value = 0xFFFFFFFF;
+  Expect.equals(0xFFFFFFFF, p.value);
+  p.value = 0;
+  Expect.equals(0, p.value);
+  p.value = 0x100000000;
+  Expect.equals(0, p.value); // truncated
+  p.value = -1;
+  Expect.equals(0xFFFFFFFF, p.value); // truncated
+  free(p);
+}
+
+void testRangeInt64() {
+  Pointer<Int64> p = allocate();
+  p.value = 0x7FFFFFFFFFFFFFFF; // 2 ^ 63 - 1
+  Expect.equals(0x7FFFFFFFFFFFFFFF, p.value);
+  p.value = -0x8000000000000000; // -2 ^ 63
+  Expect.equals(-0x8000000000000000, p.value);
+  free(p);
+}
+
+void testRangeUint64() {
+  Pointer<Uint64> p = allocate();
+  p.value = 0x7FFFFFFFFFFFFFFF; // 2 ^ 63 - 1
+  Expect.equals(0x7FFFFFFFFFFFFFFF, p.value);
+  p.value = -0x8000000000000000; // -2 ^ 63 interpreted as 2 ^ 63
+  Expect.equals(-0x8000000000000000, p.value);
+
+  // Dart allows interpreting bits both signed and unsigned
+  Expect.equals(0xFFFFFFFFFFFFFFFF, -1);
+  p.value = -1; // -1 interpreted as 2 ^ 64 - 1
+  Expect.equals(-1, p.value);
+  Expect.equals(0xFFFFFFFFFFFFFFFF, p.value);
+  free(p);
+}
+
+void testRangeIntPtr() {
+  Pointer<IntPtr> p = allocate();
+  int pAddr = p.address;
+  p.value = pAddr; // its own address should fit
+  p.value = 0x7FFFFFFF; // and 32 bit addresses should fit
+  Expect.equals(0x7FFFFFFF, p.value);
+  p.value = -0x80000000;
+  Expect.equals(-0x80000000, p.value);
+  free(p);
+}
+
+void testFloat() {
+  Pointer<Float> p = allocate();
+  p.value = 1.511366173271439e-13;
+  Expect.equals(1.511366173271439e-13, p.value);
+  p.value = 1.4260258159703532e-105; // float does not have enough precision
+  Expect.notEquals(1.4260258159703532e-105, p.value);
+  free(p);
+}
+
+void testDouble() {
+  Pointer<Double> p = allocate();
+  p.value = 1.4260258159703532e-105;
+  Expect.equals(1.4260258159703532e-105, p.value);
+  free(p);
+}
+
+void testVoid() {
+  Pointer<IntPtr> p1 = allocate();
+  Pointer<Void> p2 = p1.cast(); // make this dart pointer opaque
+  p2.address; // we can print the address
+  free(p2);
+}
+
+void testPointerPointer() {
+  Pointer<Int16> p = allocate();
+  p.value = 17;
+  Pointer<Pointer<Int16>> p2 = allocate();
+  p2.value = p;
+  Expect.equals(17, p2.value.value);
+  free(p2);
+  free(p);
+}
+
+void testPointerPointerNull() {
+  Pointer<Pointer<Int8>> pointerToPointer = allocate();
+  Pointer<Int8> value = nullptr;
+  pointerToPointer.value = value;
+  value = pointerToPointer.value;
+  Expect.equals(value, nullptr);
+  value = allocate();
+  pointerToPointer.value = value;
+  value = pointerToPointer.value;
+  Expect.isNotNull(value);
+  free(value);
+  value = nullptr;
+  pointerToPointer.value = value;
+  value = pointerToPointer.value;
+  Expect.equals(value, nullptr);
+  free(pointerToPointer);
+}
+
+void testSizeOf() {
+  Expect.equals(1, sizeOf<Int8>());
+  Expect.equals(2, sizeOf<Int16>());
+  Expect.equals(4, sizeOf<Int32>());
+  Expect.equals(8, sizeOf<Int64>());
+  Expect.equals(1, sizeOf<Uint8>());
+  Expect.equals(2, sizeOf<Uint16>());
+  Expect.equals(4, sizeOf<Uint32>());
+  Expect.equals(8, sizeOf<Uint64>());
+  Expect.equals(true, 4 == sizeOf<IntPtr>() || 8 == sizeOf<IntPtr>());
+  Expect.equals(4, sizeOf<Float>());
+  Expect.equals(8, sizeOf<Double>());
+}
+
+// note: stack overflows at around 15k calls
+void testPointerChain(int length) {
+  void createChain(Pointer<IntPtr> head, int length, int value) {
+    if (length == 0) {
+      head.value = value;
+      return;
+    }
+    Pointer<IntPtr> next = allocate();
+    head.value = next.address;
+    createChain(next, length - 1, value);
+  }
+
+  int getChainValue(Pointer<IntPtr> head, int length) {
+    if (length == 0) {
+      return head.value;
+    }
+    Pointer<IntPtr> next = Pointer.fromAddress(head.value);
+    return getChainValue(next, length - 1);
+  }
+
+  void freeChain(Pointer<IntPtr> head, int length) {
+    Pointer<IntPtr> next = Pointer.fromAddress(head.value);
+    free(head);
+    if (length == 0) {
+      return;
+    }
+    freeChain(next, length - 1);
+  }
+
+  Pointer<IntPtr> head = allocate();
+  createChain(head, length, 512);
+  int tailValue = getChainValue(head, length);
+  Expect.equals(512, tailValue);
+  freeChain(head, length);
+}
+
+void testTypeTest() {
+  Pointer<Int8> p = allocate();
+  Expect.isTrue(p is Pointer);
+  free(p);
+}
+
+void testToString() {
+  Pointer<Int16> p = allocate();
+  Expect.stringEquals(
+      "Pointer<Int16>: address=0x", p.toString().substring(0, 26));
+  free(p);
+  Pointer<Int64> p2 = Pointer.fromAddress(0x123abc);
+  Expect.stringEquals("Pointer<Int64>: address=0x123abc", p2.toString());
+}
+
+void testEquality() {
+  Pointer<Int8> p = Pointer.fromAddress(12345678);
+  Pointer<Int8> p2 = Pointer.fromAddress(12345678);
+  Expect.equals(p, p2);
+  Expect.equals(p.hashCode, p2.hashCode);
+  Pointer<Int16> p3 = p.cast();
+  Expect.equals(p, p3);
+  Expect.equals(p.hashCode, p3.hashCode);
+  Pointer<Int8> p4 = p.offsetBy(1337);
+  Expect.notEquals(p, p4);
+}
+
+typedef Int8UnOp = Int8 Function(Int8);
+
+void testAllocateGeneric() {
+  Pointer<T> generic<T extends NativeType>() {
+    Pointer<T> pointer;
+    pointer = allocate();
+    return pointer;
+  }
+
+  Pointer p = generic<Int64>();
+  free(p);
+}
+
+void testAllocateVoid() {
+  Expect.throws(() {
+    Pointer<Void> p = allocate();
+  });
+}
+
+void testAllocateNativeFunction() {
+  Expect.throws(() {
+    Pointer<NativeFunction<Int8UnOp>> p = allocate();
+  });
+}
+
+void testAllocateNativeType() {
+  Expect.throws(() {
+    allocate();
+  });
+}
+
+void testSizeOfGeneric() {
+  int generic<T extends Pointer>() {
+    int size;
+    size = sizeOf<T>();
+    return size;
+  }
+
+  int size = generic<Pointer<Int64>>();
+  Expect.isTrue(size == 8 || size == 4);
+}
+
+void testSizeOfVoid() {
+  Expect.throws(() {
+    sizeOf<Void>();
+  });
+}
+
+void testSizeOfNativeFunction() {
+  Expect.throws(() {
+    sizeOf<NativeFunction<Int8UnOp>>();
+  });
+}
+
+void testSizeOfNativeType() {
+  Expect.throws(() {
+    sizeOf();
+  });
+}
+
+void testDynamicInvocation() {
+  dynamic p = allocate<Int8>();
+  Expect.throws(() {
+    final int i = p.value;
+  });
+  Expect.throws(() => p.value = 1);
+  p.elementAt(5); // Works, but is slow.
+  final int addr = p.address;
+  final Pointer<Int16> p2 = p.cast<Int16>();
+  free(p);
+}
+
+final nullableInt64ElementAt1 = ffiTestFunctions.lookupFunction<
+    Pointer<Int64> Function(Pointer<Int64>),
+    Pointer<Int64> Function(Pointer<Int64>)>("NullableInt64ElemAt1");
+
+void testNullptrCast() {
+  Pointer<Int64> ptr = nullptr;
+  ptr = nullableInt64ElementAt1(ptr);
+  Expect.equals(ptr, nullptr);
+}
+
+void testMemoryAddressTruncation() {
+  const int kIgnoreBytesPositive = 0x1122334400000000;
+  const int kIgnoreBytesNegative = 0xffddccbb00000000;
+  if (sizeOf<IntPtr>() == 4) {
+    final p1 = Pointer<Int8>.fromAddress(123);
+    final p2 = Pointer<Int8>.fromAddress(123 + kIgnoreBytesPositive);
+    final p3 = Pointer<Int8>.fromAddress(123 + kIgnoreBytesNegative);
+    Expect.equals(p1.address, p2.address);
+    Expect.equals(p1, p2);
+    Expect.equals(p1.address, p3.address);
+    Expect.equals(p1, p3);
+  }
+}
diff --git a/tests/ffi_2/dylib_utils.dart b/tests/ffi_2/dylib_utils.dart
new file mode 100644
index 0000000..fb8153a
--- /dev/null
+++ b/tests/ffi_2/dylib_utils.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi' as ffi;
+import 'dart:io' show Platform;
+
+String _platformPath(String name, {String path}) {
+  if (path == null) path = "";
+  if (Platform.isLinux || Platform.isAndroid)
+    return path + "lib" + name + ".so";
+  if (Platform.isMacOS) return path + "lib" + name + ".dylib";
+  if (Platform.isWindows) return path + name + ".dll";
+  throw Exception("Platform not implemented");
+}
+
+ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+  String fullPath = _platformPath(name, path: path);
+  return ffi.DynamicLibrary.open(fullPath);
+}
diff --git a/tests/ffi_2/extension_methods_test.dart b/tests/ffi_2/extension_methods_test.dart
new file mode 100644
index 0000000..19bc44b
--- /dev/null
+++ b/tests/ffi_2/extension_methods_test.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+main(List<String> arguments) {
+  for (int i = 0; i < 100; i++) {
+    testStoreLoad();
+    testReifiedGeneric();
+  }
+}
+
+testStoreLoad() {
+  final p = allocate<Int8>(count: 2);
+  p.value = 10;
+  Expect.equals(10, p.value);
+  p[1] = 20;
+  Expect.equals(20, p[1]);
+  if (sizeOf<IntPtr>() == 4) {
+    // Test round tripping.
+    Expect.equals(20, p.elementAt(0x100000001).value);
+    Expect.equals(20, p[0x100000001]);
+  }
+
+  // Test negative index.
+  final pUseNegative = p.elementAt(1);
+  Expect.equals(10, pUseNegative[-1]);
+
+  final p1 = allocate<Double>(count: 2);
+  p1.value = 10.0;
+  Expect.approxEquals(10.0, p1.value);
+  p1[1] = 20.0;
+  Expect.approxEquals(20.0, p1[1]);
+  free(p1);
+
+  final p2 = allocate<Pointer<Int8>>(count: 2);
+  p2.value = p;
+  Expect.equals(p, p2.value);
+  p2[1] = p;
+  Expect.equals(p, p2[1]);
+  free(p2);
+  free(p);
+
+  final p3 = allocate<Foo>();
+  Foo foo = p3.ref;
+  foo.a = 1;
+  Expect.equals(1, foo.a);
+  free(p3);
+}
+
+testReifiedGeneric() {
+  final p = allocate<Pointer<Int8>>();
+  Pointer<Pointer<NativeType>> p2 = p;
+  Expect.isTrue(p2.value is Pointer<Int8>);
+  free(p);
+}
+
+class Foo extends Struct {
+  @Int8()
+  int a;
+}
diff --git a/tests/ffi_2/external_typed_data_test.dart b/tests/ffi_2/external_typed_data_test.dart
new file mode 100644
index 0000000..8d19f79
--- /dev/null
+++ b/tests/ffi_2/external_typed_data_test.dart
@@ -0,0 +1,295 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+import 'dart:math';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+import "package:ffi/ffi.dart";
+
+main() {
+  testInt8Load();
+  testInt8Store();
+  testUint8Load();
+  testUint8Store();
+  testInt16Load();
+  testInt16Store();
+  testUint16Load();
+  testUint16Store();
+  testInt32Load();
+  testInt32Store();
+  testUint32Load();
+  testUint32Store();
+  testInt64Load();
+  testInt64Store();
+  testUint64Load();
+  testUint64Store();
+  testFloatLoad();
+  testFloatStore();
+  testDoubleLoad();
+  testDoubleStore();
+  testArrayLoad();
+  testArrayStore();
+  testNegativeArray();
+  testAlignment();
+}
+
+// For signed int tests, we store 0xf* and load -1 to check sign-extension.
+// For unsigned int tests, we store 0xf* and load the same to check truncation.
+
+void testInt8Load() {
+  // Load
+  Pointer<Int8> ptr = allocate();
+  ptr.value = 0xff;
+  Int8List list = ptr.asTypedList(1);
+  Expect.equals(list[0], -1);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testInt8Store() {
+  // Store
+  Pointer<Int8> ptr = allocate();
+  Int8List list = ptr.asTypedList(1);
+  list[0] = 0xff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, -1);
+  free(ptr);
+}
+
+void testUint8Load() {
+  // Load
+  Pointer<Uint8> ptr = allocate();
+  ptr.value = 0xff;
+  Uint8List list = ptr.asTypedList(1);
+  Expect.equals(list[0], 0xff);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testUint8Store() {
+  // Store
+  Pointer<Uint8> ptr = allocate();
+  Uint8List list = ptr.asTypedList(1);
+  list[0] = 0xff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, 0xff);
+  free(ptr);
+}
+
+void testInt16Load() {
+  // Load
+  Pointer<Int16> ptr = allocate();
+  ptr.value = 0xffff;
+  Int16List list = ptr.asTypedList(1);
+  Expect.equals(list[0], -1);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testInt16Store() {
+  // Store
+  Pointer<Int16> ptr = allocate();
+  Int16List list = ptr.asTypedList(1);
+  list[0] = 0xffff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, -1);
+  free(ptr);
+}
+
+void testUint16Load() {
+  // Load
+  Pointer<Uint16> ptr = allocate();
+  ptr.value = 0xffff;
+  Uint16List list = ptr.asTypedList(1);
+  Expect.equals(list[0], 0xffff);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testUint16Store() {
+  // Store
+  Pointer<Uint16> ptr = allocate();
+  Uint16List list = ptr.asTypedList(1);
+  list[0] = 0xffff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, 0xffff);
+  free(ptr);
+}
+
+void testInt32Load() {
+  // Load
+  Pointer<Int32> ptr = allocate();
+  ptr.value = 0xffffffff;
+  Int32List list = ptr.asTypedList(1);
+  Expect.equals(list[0], -1);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testInt32Store() {
+  // Store
+  Pointer<Int32> ptr = allocate();
+  Int32List list = ptr.asTypedList(1);
+  list[0] = 0xffffffff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, -1);
+  free(ptr);
+}
+
+void testUint32Load() {
+  // Load
+  Pointer<Uint32> ptr = allocate();
+  ptr.value = 0xffffffff;
+  Uint32List list = ptr.asTypedList(1);
+  Expect.equals(list[0], 0xffffffff);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testUint32Store() {
+  // Store
+  Pointer<Uint32> ptr = allocate();
+  Uint32List list = ptr.asTypedList(1);
+  list[0] = 0xffffffff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, 0xffffffff);
+  free(ptr);
+}
+
+void testInt64Load() {
+  // Load
+  Pointer<Int64> ptr = allocate();
+  ptr.value = 0xffffffffffffffff;
+  Int64List list = ptr.asTypedList(1);
+  Expect.equals(list[0], -1);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testInt64Store() {
+  // Store
+  Pointer<Int64> ptr = allocate();
+  Int64List list = ptr.asTypedList(1);
+  list[0] = 0xffffffffffffffff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, -1);
+  free(ptr);
+}
+
+void testUint64Load() {
+  // Load
+  Pointer<Uint64> ptr = allocate();
+  ptr.value = 0xffffffffffffffff;
+  Uint64List list = ptr.asTypedList(1);
+  Expect.equals(list[0], 0xffffffffffffffff);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testUint64Store() {
+  // Store
+  Pointer<Uint64> ptr = allocate();
+  Uint64List list = ptr.asTypedList(1);
+  list[0] = 0xffffffffffffffff;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, 0xffffffffffffffff);
+  free(ptr);
+}
+
+double maxFloat = (2 - pow(2, -23)) * pow(2, 127);
+double maxDouble = (2 - pow(2, -52)) * pow(2, pow(2, 10) - 1);
+
+void testFloatLoad() {
+  // Load
+  Pointer<Float> ptr = allocate();
+  ptr.value = maxFloat;
+  Float32List list = ptr.asTypedList(1);
+  Expect.equals(list[0], maxFloat);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testFloatStore() {
+  // Store
+  Pointer<Float> ptr = allocate();
+  Float32List list = ptr.asTypedList(1);
+  list[0] = maxFloat;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, maxFloat);
+  free(ptr);
+}
+
+void testDoubleLoad() {
+  // Load
+  Pointer<Double> ptr = allocate();
+  ptr.value = maxDouble;
+  Float64List list = ptr.asTypedList(1);
+  Expect.equals(list[0], maxDouble);
+  Expect.equals(list.length, 1);
+  free(ptr);
+}
+
+void testDoubleStore() {
+  // Store
+  Pointer<Double> ptr = allocate();
+  Float64List list = ptr.asTypedList(1);
+  list[0] = maxDouble;
+  Expect.equals(list.length, 1);
+  Expect.equals(ptr.value, maxDouble);
+  free(ptr);
+}
+
+void testArrayLoad() {
+  const int count = 0x100;
+  Pointer<Int32> ptr = allocate(count: count);
+  for (int i = 0; i < count; ++i) {
+    ptr[i] = i;
+  }
+  Int32List array = ptr.asTypedList(count);
+  for (int i = 0; i < count; ++i) {
+    Expect.equals(array[i], i);
+  }
+  free(ptr);
+}
+
+void testArrayStore() {
+  const int count = 0x100;
+  Pointer<Int32> ptr = allocate(count: count);
+  Int32List array = ptr.asTypedList(count);
+  for (int i = 0; i < count; ++i) {
+    array[i] = i;
+  }
+  for (int i = 0; i < count; ++i) {
+    Expect.equals(ptr[i], i);
+  }
+  free(ptr);
+}
+
+void testNegativeArray() {
+  Pointer<Int32> ptr = nullptr;
+  Expect.throws<ArgumentError>(() => ptr.asTypedList(-1));
+}
+
+// Tests that the address we're creating an ExternalTypedData from is aligned to
+// the element size.
+void testAlignment() {
+  Expect.throws<ArgumentError>(
+      () => Pointer<Int16>.fromAddress(1).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Int32>.fromAddress(2).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Int64>.fromAddress(4).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Uint16>.fromAddress(1).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Uint32>.fromAddress(2).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Uint64>.fromAddress(4).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Float>.fromAddress(2).asTypedList(1));
+  Expect.throws<ArgumentError>(
+      () => Pointer<Double>.fromAddress(4).asTypedList(1));
+}
diff --git a/tests/ffi_2/ffi_2.status b/tests/ffi_2/ffi_2.status
new file mode 100644
index 0000000..6400609
--- /dev/null
+++ b/tests/ffi_2/ffi_2.status
@@ -0,0 +1,34 @@
+# Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+[ $builder_tag == asan ]
+data_not_asan_test: SkipByDesign # This test tries to allocate too much memory on purpose.
+
+[ $system == android ]
+*: Pass, Slow # https://github.com/dart-lang/sdk/issues/38489
+
+[ $arch == arm && $system != android ]
+*: Skip # "hardfp" calling convention is not yet supported (iOS is also supported but not tested): dartbug.com/36309
+
+[ $compiler != dart2analyzer && $compiler != fasta && $runtime != dart_precompiled && $runtime != vm ]
+*: SkipByDesign # FFI is a VM-only feature. (This test suite is part of the default set.)
+
+[ $system != android && $system != linux && $system != macos && $system != windows ]
+*: Skip # FFI not yet supported on other OSes.
+
+[ $arch == simarm || $arch == simarm64 ]
+*: Skip # FFI not yet supported on the arm simulator.
+
+# These tests trigger and catch an abort (intentionally) and terminate the VM.
+# They're incompatible with ASAN because not all memory is freed when aborting and
+# with AppJit because the abort the VM before it can generate a snapshot.
+[ $builder_tag == asan || $compiler == app_jitk ]
+vmspecific_function_callbacks_exit_test: SkipByDesign
+
+[ $compiler == dart2analyzer || $compiler == fasta ]
+vmspecific_enable_ffi_test: SkipByDesign # This is a check for VM only.
+
+[ $hot_reload || $hot_reload_rollback ]
+snapshot_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+vmspecific_function_callbacks_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
diff --git a/tests/ffi_2/ffi_test_helpers.dart b/tests/ffi_2/ffi_test_helpers.dart
new file mode 100644
index 0000000..0c598ec
--- /dev/null
+++ b/tests/ffi_2/ffi_test_helpers.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Helpers for tests which trigger GC in delicate places.
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+typedef NativeNullaryOp = Void Function();
+typedef NullaryOpVoid = void Function();
+
+typedef NativeUnaryOp = Void Function(IntPtr);
+typedef UnaryOpVoid = void Function(int);
+
+final DynamicLibrary ffiTestFunctions =
+    dlopenPlatformSpecific("ffi_test_functions");
+
+final triggerGc = ffiTestFunctions
+    .lookupFunction<NativeNullaryOp, NullaryOpVoid>("TriggerGC");
+
+final collectOnNthAllocation = ffiTestFunctions
+    .lookupFunction<NativeUnaryOp, UnaryOpVoid>("CollectOnNthAllocation");
+
+extension PointerOffsetBy<T extends NativeType> on Pointer<T> {
+  Pointer<T> offsetBy(int bytes) => Pointer.fromAddress(address + bytes);
+}
diff --git a/tests/ffi_2/function_callbacks_many_test.dart b/tests/ffi_2/function_callbacks_many_test.dart
new file mode 100644
index 0000000..c8fb519
--- /dev/null
+++ b/tests/ffi_2/function_callbacks_many_test.dart
@@ -0,0 +1,1043 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers with callbacks.
+//
+// VMOptions=--enable-testing-pragmas
+// VMOptions=--enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas
+// VMOptions=--use-slow-path --enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'callback_tests_utils.dart';
+
+typedef SimpleAdditionType = Int32 Function(Int32, Int32);
+int simpleAddition(int x, int y) => x + y;
+
+void main() {
+  testManyCallbacks();
+}
+
+void testManyCallbacks() {
+  // Create enough callbacks (1000) to overflow one page of the JIT callback
+  // trampolines. The use of distinct exceptional return values forces separate
+  // trampolines.
+  final List<Pointer> pointers = [];
+
+  // All the parameters of 'fromFunction' are forced to be constant so that we
+  // only need to generate one trampoline per 'fromFunction' call-site.
+  //
+  // As a consequence, to force the creation of 1000 trampolines (and prevent
+  // any possible caching), we need literally 1000 call-sites.
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 0));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 1));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 2));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 3));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 4));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 5));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 6));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 7));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 8));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 9));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 10));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 11));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 12));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 13));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 14));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 15));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 16));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 17));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 18));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 19));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 20));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 21));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 22));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 23));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 24));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 25));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 26));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 27));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 28));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 29));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 30));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 31));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 32));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 33));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 34));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 35));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 36));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 37));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 38));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 39));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 40));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 41));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 42));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 43));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 44));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 45));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 46));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 47));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 48));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 49));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 50));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 51));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 52));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 53));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 54));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 55));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 56));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 57));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 58));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 59));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 60));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 61));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 62));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 63));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 64));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 65));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 66));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 67));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 68));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 69));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 70));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 71));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 72));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 73));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 74));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 75));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 76));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 77));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 78));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 79));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 80));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 81));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 82));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 83));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 84));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 85));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 86));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 87));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 88));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 89));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 90));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 91));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 92));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 93));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 94));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 95));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 96));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 97));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 98));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 99));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 100));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 101));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 102));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 103));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 104));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 105));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 106));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 107));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 108));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 109));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 110));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 111));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 112));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 113));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 114));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 115));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 116));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 117));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 118));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 119));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 120));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 121));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 122));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 123));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 124));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 125));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 126));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 127));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 128));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 129));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 130));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 131));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 132));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 133));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 134));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 135));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 136));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 137));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 138));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 139));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 140));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 141));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 142));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 143));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 144));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 145));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 146));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 147));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 148));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 149));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 150));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 151));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 152));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 153));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 154));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 155));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 156));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 157));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 158));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 159));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 160));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 161));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 162));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 163));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 164));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 165));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 166));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 167));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 168));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 169));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 170));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 171));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 172));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 173));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 174));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 175));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 176));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 177));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 178));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 179));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 180));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 181));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 182));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 183));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 184));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 185));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 186));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 187));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 188));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 189));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 190));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 191));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 192));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 193));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 194));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 195));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 196));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 197));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 198));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 199));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 200));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 201));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 202));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 203));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 204));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 205));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 206));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 207));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 208));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 209));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 210));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 211));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 212));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 213));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 214));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 215));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 216));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 217));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 218));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 219));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 220));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 221));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 222));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 223));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 224));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 225));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 226));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 227));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 228));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 229));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 230));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 231));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 232));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 233));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 234));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 235));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 236));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 237));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 238));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 239));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 240));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 241));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 242));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 243));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 244));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 245));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 246));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 247));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 248));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 249));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 250));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 251));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 252));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 253));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 254));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 255));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 256));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 257));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 258));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 259));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 260));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 261));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 262));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 263));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 264));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 265));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 266));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 267));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 268));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 269));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 270));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 271));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 272));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 273));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 274));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 275));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 276));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 277));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 278));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 279));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 280));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 281));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 282));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 283));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 284));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 285));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 286));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 287));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 288));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 289));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 290));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 291));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 292));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 293));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 294));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 295));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 296));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 297));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 298));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 299));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 300));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 301));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 302));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 303));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 304));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 305));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 306));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 307));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 308));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 309));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 310));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 311));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 312));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 313));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 314));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 315));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 316));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 317));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 318));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 319));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 320));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 321));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 322));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 323));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 324));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 325));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 326));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 327));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 328));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 329));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 330));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 331));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 332));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 333));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 334));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 335));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 336));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 337));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 338));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 339));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 340));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 341));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 342));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 343));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 344));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 345));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 346));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 347));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 348));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 349));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 350));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 351));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 352));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 353));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 354));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 355));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 356));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 357));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 358));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 359));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 360));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 361));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 362));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 363));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 364));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 365));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 366));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 367));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 368));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 369));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 370));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 371));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 372));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 373));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 374));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 375));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 376));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 377));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 378));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 379));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 380));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 381));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 382));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 383));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 384));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 385));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 386));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 387));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 388));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 389));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 390));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 391));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 392));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 393));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 394));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 395));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 396));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 397));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 398));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 399));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 400));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 401));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 402));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 403));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 404));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 405));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 406));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 407));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 408));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 409));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 410));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 411));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 412));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 413));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 414));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 415));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 416));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 417));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 418));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 419));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 420));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 421));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 422));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 423));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 424));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 425));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 426));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 427));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 428));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 429));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 430));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 431));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 432));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 433));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 434));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 435));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 436));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 437));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 438));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 439));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 440));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 441));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 442));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 443));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 444));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 445));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 446));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 447));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 448));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 449));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 450));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 451));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 452));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 453));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 454));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 455));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 456));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 457));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 458));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 459));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 460));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 461));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 462));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 463));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 464));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 465));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 466));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 467));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 468));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 469));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 470));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 471));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 472));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 473));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 474));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 475));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 476));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 477));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 478));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 479));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 480));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 481));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 482));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 483));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 484));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 485));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 486));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 487));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 488));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 489));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 490));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 491));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 492));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 493));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 494));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 495));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 496));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 497));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 498));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 499));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 500));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 501));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 502));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 503));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 504));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 505));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 506));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 507));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 508));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 509));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 510));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 511));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 512));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 513));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 514));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 515));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 516));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 517));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 518));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 519));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 520));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 521));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 522));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 523));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 524));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 525));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 526));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 527));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 528));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 529));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 530));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 531));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 532));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 533));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 534));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 535));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 536));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 537));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 538));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 539));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 540));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 541));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 542));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 543));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 544));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 545));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 546));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 547));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 548));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 549));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 550));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 551));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 552));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 553));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 554));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 555));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 556));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 557));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 558));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 559));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 560));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 561));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 562));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 563));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 564));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 565));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 566));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 567));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 568));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 569));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 570));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 571));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 572));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 573));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 574));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 575));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 576));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 577));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 578));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 579));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 580));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 581));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 582));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 583));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 584));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 585));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 586));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 587));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 588));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 589));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 590));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 591));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 592));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 593));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 594));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 595));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 596));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 597));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 598));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 599));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 600));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 601));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 602));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 603));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 604));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 605));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 606));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 607));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 608));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 609));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 610));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 611));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 612));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 613));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 614));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 615));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 616));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 617));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 618));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 619));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 620));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 621));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 622));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 623));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 624));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 625));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 626));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 627));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 628));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 629));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 630));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 631));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 632));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 633));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 634));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 635));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 636));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 637));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 638));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 639));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 640));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 641));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 642));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 643));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 644));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 645));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 646));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 647));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 648));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 649));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 650));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 651));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 652));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 653));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 654));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 655));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 656));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 657));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 658));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 659));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 660));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 661));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 662));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 663));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 664));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 665));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 666));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 667));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 668));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 669));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 670));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 671));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 672));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 673));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 674));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 675));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 676));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 677));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 678));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 679));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 680));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 681));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 682));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 683));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 684));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 685));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 686));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 687));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 688));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 689));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 690));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 691));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 692));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 693));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 694));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 695));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 696));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 697));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 698));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 699));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 700));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 701));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 702));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 703));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 704));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 705));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 706));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 707));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 708));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 709));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 710));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 711));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 712));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 713));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 714));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 715));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 716));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 717));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 718));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 719));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 720));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 721));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 722));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 723));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 724));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 725));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 726));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 727));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 728));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 729));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 730));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 731));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 732));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 733));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 734));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 735));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 736));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 737));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 738));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 739));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 740));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 741));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 742));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 743));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 744));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 745));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 746));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 747));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 748));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 749));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 750));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 751));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 752));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 753));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 754));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 755));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 756));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 757));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 758));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 759));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 760));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 761));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 762));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 763));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 764));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 765));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 766));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 767));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 768));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 769));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 770));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 771));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 772));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 773));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 774));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 775));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 776));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 777));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 778));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 779));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 780));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 781));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 782));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 783));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 784));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 785));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 786));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 787));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 788));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 789));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 790));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 791));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 792));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 793));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 794));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 795));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 796));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 797));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 798));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 799));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 800));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 801));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 802));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 803));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 804));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 805));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 806));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 807));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 808));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 809));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 810));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 811));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 812));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 813));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 814));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 815));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 816));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 817));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 818));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 819));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 820));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 821));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 822));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 823));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 824));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 825));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 826));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 827));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 828));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 829));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 830));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 831));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 832));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 833));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 834));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 835));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 836));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 837));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 838));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 839));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 840));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 841));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 842));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 843));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 844));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 845));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 846));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 847));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 848));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 849));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 850));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 851));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 852));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 853));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 854));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 855));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 856));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 857));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 858));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 859));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 860));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 861));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 862));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 863));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 864));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 865));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 866));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 867));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 868));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 869));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 870));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 871));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 872));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 873));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 874));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 875));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 876));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 877));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 878));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 879));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 880));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 881));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 882));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 883));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 884));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 885));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 886));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 887));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 888));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 889));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 890));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 891));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 892));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 893));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 894));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 895));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 896));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 897));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 898));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 899));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 900));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 901));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 902));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 903));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 904));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 905));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 906));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 907));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 908));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 909));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 910));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 911));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 912));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 913));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 914));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 915));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 916));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 917));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 918));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 919));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 920));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 921));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 922));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 923));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 924));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 925));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 926));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 927));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 928));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 929));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 930));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 931));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 932));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 933));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 934));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 935));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 936));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 937));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 938));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 939));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 940));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 941));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 942));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 943));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 944));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 945));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 946));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 947));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 948));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 949));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 950));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 951));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 952));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 953));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 954));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 955));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 956));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 957));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 958));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 959));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 960));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 961));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 962));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 963));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 964));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 965));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 966));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 967));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 968));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 969));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 970));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 971));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 972));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 973));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 974));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 975));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 976));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 977));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 978));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 979));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 980));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 981));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 982));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 983));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 984));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 985));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 986));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 987));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 988));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 989));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 990));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 991));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 992));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 993));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 994));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 995));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 996));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 997));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 998));
+  pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 999));
+
+  for (final pointer in pointers) {
+    CallbackTest("SimpleAddition", pointer).run();
+  }
+}
diff --git a/tests/ffi_2/function_callbacks_test.dart b/tests/ffi_2/function_callbacks_test.dart
new file mode 100644
index 0000000..24ca064
--- /dev/null
+++ b/tests/ffi_2/function_callbacks_test.dart
@@ -0,0 +1,224 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Dart test program for testing dart:ffi function pointers with callbacks.
+//
+// VMOptions=--enable-testing-pragmas
+// VMOptions=--enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas
+// VMOptions=--use-slow-path --enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'callback_tests_utils.dart';
+
+typedef SimpleAdditionType = Int32 Function(Int32, Int32);
+int simpleAddition(int x, int y) {
+  print("simpleAddition($x, $y)");
+  return x + y;
+}
+
+typedef IntComputationType = Int64 Function(Int8, Int16, Int32, Int64);
+int intComputation(int a, int b, int c, int d) {
+  print("intComputation($a, $b, $c, $d)");
+  return d - c + b - a;
+}
+
+typedef UintComputationType = Uint64 Function(Uint8, Uint16, Uint32, Uint64);
+int uintComputation(int a, int b, int c, int d) {
+  print("uintComputation($a, $b, $c, $d)");
+  return d - c + b - a;
+}
+
+typedef SimpleMultiplyType = Double Function(Double);
+double simpleMultiply(double x) {
+  print("simpleMultiply($x)");
+  return x * 1.337;
+}
+
+typedef SimpleMultiplyFloatType = Float Function(Float);
+double simpleMultiplyFloat(double x) {
+  print("simpleMultiplyFloat($x)");
+  return x * 1.337;
+}
+
+typedef ManyIntsType = IntPtr Function(IntPtr, IntPtr, IntPtr, IntPtr, IntPtr,
+    IntPtr, IntPtr, IntPtr, IntPtr, IntPtr);
+int manyInts(
+    int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) {
+  print("manyInts($a, $b, $c, $d, $e, $f, $g, $h, $i, $j");
+  return a + b + c + d + e + f + g + h + i + j;
+}
+
+typedef ManyDoublesType = Double Function(Double, Double, Double, Double,
+    Double, Double, Double, Double, Double, Double);
+double manyDoubles(double a, double b, double c, double d, double e, double f,
+    double g, double h, double i, double j) {
+  print("manyDoubles($a, $b, $c, $d, $e, $f, $g, $h, $i, $j");
+  return a + b + c + d + e + f + g + h + i + j;
+}
+
+typedef ManyArgsType = Double Function(
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double);
+double manyArgs(
+    int _1,
+    double _2,
+    int _3,
+    double _4,
+    int _5,
+    double _6,
+    int _7,
+    double _8,
+    int _9,
+    double _10,
+    int _11,
+    double _12,
+    int _13,
+    double _14,
+    int _15,
+    double _16,
+    int _17,
+    double _18,
+    int _19,
+    double _20) {
+  print("manyArgs( $_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10," +
+      "$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20)");
+  return _1 +
+      _2 +
+      _3 +
+      _4 +
+      _5 +
+      _6 +
+      _7 +
+      _8 +
+      _9 +
+      _10 +
+      _11 +
+      _12 +
+      _13 +
+      _14 +
+      _15 +
+      _16 +
+      _17 +
+      _18 +
+      _19 +
+      _20;
+}
+
+typedef StoreType = Pointer<Int64> Function(Pointer<Int64>);
+Pointer<Int64> store(Pointer<Int64> ptr) => ptr.elementAt(1)..value = 1337;
+
+typedef NullPointersType = Pointer<Int64> Function(Pointer<Int64>);
+Pointer<Int64> nullPointers(Pointer<Int64> ptr) => ptr.elementAt(1);
+
+typedef ReturnVoid = Void Function();
+void returnVoid() {}
+
+void throwException() {
+  throw "Exception.";
+}
+
+typedef ThrowExceptionInt = IntPtr Function();
+int throwExceptionInt() {
+  throw "Exception.";
+}
+
+typedef ThrowExceptionDouble = Double Function();
+double throwExceptionDouble() {
+  throw "Exception.";
+}
+
+typedef ThrowExceptionPointer = Pointer<Void> Function();
+Pointer<Void> throwExceptionPointer() {
+  throw "Exception.";
+}
+
+typedef TakeMaxUint8x10Type = IntPtr Function(
+    Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8);
+int takeMaxUint8x10(
+    int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) {
+  print("takeMaxUint8x10($a, $b, $c, $d, $e, $f, $g, $h, $i, $j)");
+  return a == 0xff &&
+          b == 0xff &&
+          c == 0xff &&
+          d == 0xff &&
+          e == 0xff &&
+          f == 0xff &&
+          g == 0xff &&
+          h == 0xff &&
+          i == 0xff &&
+          j == 0xff
+      ? 1
+      : 0;
+}
+
+typedef ReturnMaxUint8Type = Uint8 Function();
+int returnMaxUint8() {
+  return 0xff;
+}
+
+int returnMaxUint8v2() {
+  return 0xabcff;
+}
+
+final testcases = [
+  CallbackTest("SimpleAddition",
+      Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 0)),
+  CallbackTest("IntComputation",
+      Pointer.fromFunction<IntComputationType>(intComputation, 0)),
+  CallbackTest("UintComputation",
+      Pointer.fromFunction<UintComputationType>(uintComputation, 0)),
+  CallbackTest("SimpleMultiply",
+      Pointer.fromFunction<SimpleMultiplyType>(simpleMultiply, 0.0)),
+  CallbackTest("SimpleMultiplyFloat",
+      Pointer.fromFunction<SimpleMultiplyFloatType>(simpleMultiplyFloat, 0.0)),
+  CallbackTest("ManyInts", Pointer.fromFunction<ManyIntsType>(manyInts, 0)),
+  CallbackTest(
+      "ManyDoubles", Pointer.fromFunction<ManyDoublesType>(manyDoubles, 0.0)),
+  CallbackTest("ManyArgs", Pointer.fromFunction<ManyArgsType>(manyArgs, 0.0)),
+  CallbackTest("Store", Pointer.fromFunction<StoreType>(store)),
+  CallbackTest(
+      "NullPointers", Pointer.fromFunction<NullPointersType>(nullPointers)),
+  CallbackTest("ReturnVoid", Pointer.fromFunction<ReturnVoid>(returnVoid)),
+  CallbackTest("ThrowExceptionDouble",
+      Pointer.fromFunction<ThrowExceptionDouble>(throwExceptionDouble, 42.0)),
+  CallbackTest("ThrowExceptionPointer",
+      Pointer.fromFunction<ThrowExceptionPointer>(throwExceptionPointer)),
+  CallbackTest("ThrowException",
+      Pointer.fromFunction<ThrowExceptionInt>(throwExceptionInt, 42)),
+  CallbackTest("TakeMaxUint8x10",
+      Pointer.fromFunction<TakeMaxUint8x10Type>(takeMaxUint8x10, 0)),
+  CallbackTest("ReturnMaxUint8",
+      Pointer.fromFunction<ReturnMaxUint8Type>(returnMaxUint8, 0)),
+  CallbackTest("ReturnMaxUint8",
+      Pointer.fromFunction<ReturnMaxUint8Type>(returnMaxUint8v2, 0)),
+];
+
+void main() {
+  testcases.forEach((t) => t.run());
+}
diff --git a/tests/ffi_2/function_callbacks_very_many_test copy.dart b/tests/ffi_2/function_callbacks_very_many_test copy.dart
new file mode 100644
index 0000000..383b482
--- /dev/null
+++ b/tests/ffi_2/function_callbacks_very_many_test copy.dart
@@ -0,0 +1,295 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Dart test program for testing dart:ffi function pointers with callbacks.
+//
+// VMOptions=--deterministic --optimization-counter-threshold=10
+// VMOptions=--enable-testing-pragmas
+// VMOptions=--enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas
+// VMOptions=--use-slow-path --enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'callback_tests_utils.dart';
+
+final testcases = [
+  CallbackTest("SumVeryManySmallInts",
+      Pointer.fromFunction<NativeVeryManyIntsOp>(sumVeryManySmallInts, 0)),
+  CallbackTest(
+      "SumVeryManyFloatsDoubles",
+      Pointer.fromFunction<NativeVeryManyFloatsDoublesOp>(
+          sumVeryManyDoubles, 0.0)),
+];
+
+void main() {
+  for (int i = 0; i < 100; ++i) {
+    testcases.forEach((t) => t.run());
+  }
+}
+
+int sumVeryManySmallInts(
+    int _1,
+    int _2,
+    int _3,
+    int _4,
+    int _5,
+    int _6,
+    int _7,
+    int _8,
+    int _9,
+    int _10,
+    int _11,
+    int _12,
+    int _13,
+    int _14,
+    int _15,
+    int _16,
+    int _17,
+    int _18,
+    int _19,
+    int _20,
+    int _21,
+    int _22,
+    int _23,
+    int _24,
+    int _25,
+    int _26,
+    int _27,
+    int _28,
+    int _29,
+    int _30,
+    int _31,
+    int _32,
+    int _33,
+    int _34,
+    int _35,
+    int _36,
+    int _37,
+    int _38,
+    int _39,
+    int _40) {
+  print("sumVeryManySmallInts(" +
+      "$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10, " +
+      "$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20, " +
+      "$_21, $_22, $_23, $_24, $_25, $_26, $_27, $_28, $_29, $_30, " +
+      "$_31, $_32, $_33, $_34, $_35, $_36, $_37, $_38, $_39, $_40)");
+  return _1 +
+      _2 +
+      _3 +
+      _4 +
+      _5 +
+      _6 +
+      _7 +
+      _8 +
+      _9 +
+      _10 +
+      _11 +
+      _12 +
+      _13 +
+      _14 +
+      _15 +
+      _16 +
+      _17 +
+      _18 +
+      _19 +
+      _20 +
+      _21 +
+      _22 +
+      _23 +
+      _24 +
+      _25 +
+      _26 +
+      _27 +
+      _28 +
+      _29 +
+      _30 +
+      _31 +
+      _32 +
+      _33 +
+      _34 +
+      _35 +
+      _36 +
+      _37 +
+      _38 +
+      _39 +
+      _40;
+}
+
+double sumVeryManyDoubles(
+    double _1,
+    double _2,
+    double _3,
+    double _4,
+    double _5,
+    double _6,
+    double _7,
+    double _8,
+    double _9,
+    double _10,
+    double _11,
+    double _12,
+    double _13,
+    double _14,
+    double _15,
+    double _16,
+    double _17,
+    double _18,
+    double _19,
+    double _20,
+    double _21,
+    double _22,
+    double _23,
+    double _24,
+    double _25,
+    double _26,
+    double _27,
+    double _28,
+    double _29,
+    double _30,
+    double _31,
+    double _32,
+    double _33,
+    double _34,
+    double _35,
+    double _36,
+    double _37,
+    double _38,
+    double _39,
+    double _40) {
+  print("sumVeryManyDoubles(" +
+      "$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10, " +
+      "$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20, " +
+      "$_21, $_22, $_23, $_24, $_25, $_26, $_27, $_28, $_29, $_30, " +
+      "$_31, $_32, $_33, $_34, $_35, $_36, $_37, $_38, $_39, $_40)");
+  return _1 +
+      _2 +
+      _3 +
+      _4 +
+      _5 +
+      _6 +
+      _7 +
+      _8 +
+      _9 +
+      _10 +
+      _11 +
+      _12 +
+      _13 +
+      _14 +
+      _15 +
+      _16 +
+      _17 +
+      _18 +
+      _19 +
+      _20 +
+      _21 +
+      _22 +
+      _23 +
+      _24 +
+      _25 +
+      _26 +
+      _27 +
+      _28 +
+      _29 +
+      _30 +
+      _31 +
+      _32 +
+      _33 +
+      _34 +
+      _35 +
+      _36 +
+      _37 +
+      _38 +
+      _39 +
+      _40;
+}
+
+typedef NativeVeryManyIntsOp = Int16 Function(
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16);
+
+typedef NativeVeryManyFloatsDoublesOp = Double Function(
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double);
diff --git a/tests/ffi_2/function_callbacks_very_many_test.dart b/tests/ffi_2/function_callbacks_very_many_test.dart
new file mode 100644
index 0000000..383b482
--- /dev/null
+++ b/tests/ffi_2/function_callbacks_very_many_test.dart
@@ -0,0 +1,295 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Dart test program for testing dart:ffi function pointers with callbacks.
+//
+// VMOptions=--deterministic --optimization-counter-threshold=10
+// VMOptions=--enable-testing-pragmas
+// VMOptions=--enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas
+// VMOptions=--use-slow-path --enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'callback_tests_utils.dart';
+
+final testcases = [
+  CallbackTest("SumVeryManySmallInts",
+      Pointer.fromFunction<NativeVeryManyIntsOp>(sumVeryManySmallInts, 0)),
+  CallbackTest(
+      "SumVeryManyFloatsDoubles",
+      Pointer.fromFunction<NativeVeryManyFloatsDoublesOp>(
+          sumVeryManyDoubles, 0.0)),
+];
+
+void main() {
+  for (int i = 0; i < 100; ++i) {
+    testcases.forEach((t) => t.run());
+  }
+}
+
+int sumVeryManySmallInts(
+    int _1,
+    int _2,
+    int _3,
+    int _4,
+    int _5,
+    int _6,
+    int _7,
+    int _8,
+    int _9,
+    int _10,
+    int _11,
+    int _12,
+    int _13,
+    int _14,
+    int _15,
+    int _16,
+    int _17,
+    int _18,
+    int _19,
+    int _20,
+    int _21,
+    int _22,
+    int _23,
+    int _24,
+    int _25,
+    int _26,
+    int _27,
+    int _28,
+    int _29,
+    int _30,
+    int _31,
+    int _32,
+    int _33,
+    int _34,
+    int _35,
+    int _36,
+    int _37,
+    int _38,
+    int _39,
+    int _40) {
+  print("sumVeryManySmallInts(" +
+      "$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10, " +
+      "$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20, " +
+      "$_21, $_22, $_23, $_24, $_25, $_26, $_27, $_28, $_29, $_30, " +
+      "$_31, $_32, $_33, $_34, $_35, $_36, $_37, $_38, $_39, $_40)");
+  return _1 +
+      _2 +
+      _3 +
+      _4 +
+      _5 +
+      _6 +
+      _7 +
+      _8 +
+      _9 +
+      _10 +
+      _11 +
+      _12 +
+      _13 +
+      _14 +
+      _15 +
+      _16 +
+      _17 +
+      _18 +
+      _19 +
+      _20 +
+      _21 +
+      _22 +
+      _23 +
+      _24 +
+      _25 +
+      _26 +
+      _27 +
+      _28 +
+      _29 +
+      _30 +
+      _31 +
+      _32 +
+      _33 +
+      _34 +
+      _35 +
+      _36 +
+      _37 +
+      _38 +
+      _39 +
+      _40;
+}
+
+double sumVeryManyDoubles(
+    double _1,
+    double _2,
+    double _3,
+    double _4,
+    double _5,
+    double _6,
+    double _7,
+    double _8,
+    double _9,
+    double _10,
+    double _11,
+    double _12,
+    double _13,
+    double _14,
+    double _15,
+    double _16,
+    double _17,
+    double _18,
+    double _19,
+    double _20,
+    double _21,
+    double _22,
+    double _23,
+    double _24,
+    double _25,
+    double _26,
+    double _27,
+    double _28,
+    double _29,
+    double _30,
+    double _31,
+    double _32,
+    double _33,
+    double _34,
+    double _35,
+    double _36,
+    double _37,
+    double _38,
+    double _39,
+    double _40) {
+  print("sumVeryManyDoubles(" +
+      "$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10, " +
+      "$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20, " +
+      "$_21, $_22, $_23, $_24, $_25, $_26, $_27, $_28, $_29, $_30, " +
+      "$_31, $_32, $_33, $_34, $_35, $_36, $_37, $_38, $_39, $_40)");
+  return _1 +
+      _2 +
+      _3 +
+      _4 +
+      _5 +
+      _6 +
+      _7 +
+      _8 +
+      _9 +
+      _10 +
+      _11 +
+      _12 +
+      _13 +
+      _14 +
+      _15 +
+      _16 +
+      _17 +
+      _18 +
+      _19 +
+      _20 +
+      _21 +
+      _22 +
+      _23 +
+      _24 +
+      _25 +
+      _26 +
+      _27 +
+      _28 +
+      _29 +
+      _30 +
+      _31 +
+      _32 +
+      _33 +
+      _34 +
+      _35 +
+      _36 +
+      _37 +
+      _38 +
+      _39 +
+      _40;
+}
+
+typedef NativeVeryManyIntsOp = Int16 Function(
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16,
+    Int8,
+    Int16);
+
+typedef NativeVeryManyFloatsDoublesOp = Double Function(
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double,
+    Float,
+    Double);
diff --git a/tests/ffi_2/function_structs_test.dart b/tests/ffi_2/function_structs_test.dart
new file mode 100644
index 0000000..3738876
--- /dev/null
+++ b/tests/ffi_2/function_structs_test.dart
@@ -0,0 +1,118 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers with struct
+// arguments.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'coordinate.dart';
+import 'very_large_struct.dart';
+
+typedef NativeCoordinateOp = Pointer<Coordinate> Function(Pointer<Coordinate>);
+
+void main() {
+  testFunctionWithStruct();
+  // testFunctionWithStructArray();
+  // testFunctionWithVeryLargeStruct();
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+/// pass a struct to a c function and get a struct as return value
+void testFunctionWithStruct() {
+  Pointer<NativeFunction<NativeCoordinateOp>> p1 =
+      ffiTestFunctions.lookup("TransposeCoordinate");
+  NativeCoordinateOp f1 = p1.asFunction();
+
+  Pointer<Coordinate> c1 = Coordinate.allocate(10.0, 20.0, nullptr).addressOf;
+  Pointer<Coordinate> c2 = Coordinate.allocate(42.0, 84.0, c1).addressOf;
+  c1.ref.next = c2;
+
+  Coordinate result = f1(c1).ref;
+
+  Expect.approxEquals(20.0, c1.ref.x);
+  Expect.approxEquals(30.0, c1.ref.y);
+
+  Expect.approxEquals(42.0, result.x);
+  Expect.approxEquals(84.0, result.y);
+
+  free(c1);
+  free(c2);
+}
+
+/// pass an array of structs to a c funtion
+void testFunctionWithStructArray() {
+  Pointer<NativeFunction<NativeCoordinateOp>> p1 =
+      ffiTestFunctions.lookup("CoordinateElemAt1");
+  NativeCoordinateOp f1 = p1.asFunction();
+
+  Coordinate c1 = allocate<Coordinate>(count: 3).ref;
+  Coordinate c2 = c1.addressOf[1];
+  Coordinate c3 = c1.addressOf[2];
+  c1.x = 10.0;
+  c1.y = 10.0;
+  c1.next = c3.addressOf;
+  c2.x = 20.0;
+  c2.y = 20.0;
+  c2.next = c1.addressOf;
+  c3.x = 30.0;
+  c3.y = 30.0;
+  c3.next = c2.addressOf;
+
+  Coordinate result = f1(c1.addressOf).ref;
+  Expect.approxEquals(20.0, result.x);
+  Expect.approxEquals(20.0, result.y);
+
+  free(c1.addressOf);
+}
+
+typedef VeryLargeStructSum = int Function(Pointer<VeryLargeStruct>);
+typedef NativeVeryLargeStructSum = Int64 Function(Pointer<VeryLargeStruct>);
+
+void testFunctionWithVeryLargeStruct() {
+  Pointer<NativeFunction<NativeVeryLargeStructSum>> p1 =
+      ffiTestFunctions.lookup("SumVeryLargeStruct");
+  VeryLargeStructSum f = p1.asFunction();
+
+  VeryLargeStruct vls1 = allocate<VeryLargeStruct>(count: 2).ref;
+  VeryLargeStruct vls2 = vls1.addressOf[1];
+  List<VeryLargeStruct> structs = [vls1, vls2];
+  for (VeryLargeStruct struct in structs) {
+    struct.a = 1;
+    struct.b = 2;
+    struct.c = 4;
+    struct.d = 8;
+    struct.e = 16;
+    struct.f = 32;
+    struct.g = 64;
+    struct.h = 128;
+    struct.i = 256;
+    struct.j = 512;
+    struct.k = 1024;
+    struct.smallLastField = 1;
+  }
+  vls1.parent = vls2.addressOf;
+  vls1.numChildren = 2;
+  vls1.children = vls1.addressOf;
+  vls2.parent = vls2.addressOf;
+  vls2.parent = nullptr;
+  vls2.numChildren = 0;
+  vls2.children = nullptr;
+
+  int result = f(vls1.addressOf);
+  Expect.equals(2051, result);
+
+  result = f(vls2.addressOf);
+  Expect.equals(2048, result);
+
+  free(vls1.addressOf);
+}
diff --git a/tests/ffi_2/function_test.dart b/tests/ffi_2/function_test.dart
new file mode 100644
index 0000000..376711b
--- /dev/null
+++ b/tests/ffi_2/function_test.dart
@@ -0,0 +1,450 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers.
+//
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=10
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+// VMOptions=--write-protect-code --no-dual-map-code
+// VMOptions=--write-protect-code --no-dual-map-code --use-slow-path
+// VMOptions=--write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+import "package:ffi/ffi.dart";
+import "package:expect/expect.dart";
+
+void main() {
+  for (int i = 0; i < 100; ++i) {
+    testNativeFunctionFromCast();
+    testNativeFunctionFromLookup();
+    test64bitInterpretations();
+    testExtension();
+    testTruncation();
+    testNativeFunctionDoubles();
+    testNativeFunctionFloats();
+    testNativeFunctionManyArguments1();
+    testNativeFunctionManyArguments2();
+    testNativeFunctionManyArguments3();
+    testNativeFunctionManyArguments4();
+    testNativeFunctionManyArguments5();
+    testNativeFunctionPointer();
+    testNullPointers();
+    testFloatRounding();
+    testVoidReturn();
+    testNoArgs();
+  }
+}
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+typedef NativeBinaryOp = Int32 Function(Int32, Int32);
+typedef UnaryOp = int Function(int);
+typedef BinaryOp = int Function(int, int);
+typedef GenericBinaryOp<T> = int Function(int, T);
+
+void testNativeFunctionFromCast() {
+  Pointer<IntPtr> p1 = allocate();
+  Pointer<NativeFunction<NativeBinaryOp>> p2 = p1.cast();
+  p2.asFunction<BinaryOp>();
+  p2.asFunction<GenericBinaryOp<int>>();
+  free(p1);
+}
+
+typedef NativeQuadOpSigned = Int64 Function(Int8, Int16, Int32, Int64);
+typedef QuadOp = int Function(int, int, int, int);
+typedef NativeQuadOpUnsigned = Uint64 Function(Uint8, Uint16, Uint32, Uint64);
+
+BinaryOp sumPlus42 =
+    ffiTestFunctions.lookupFunction<NativeBinaryOp, BinaryOp>("SumPlus42");
+
+QuadOp intComputation = ffiTestFunctions
+    .lookupFunction<NativeQuadOpSigned, QuadOp>("IntComputation");
+
+void testNativeFunctionFromLookup() {
+  Expect.equals(49, sumPlus42(3, 4));
+
+  Expect.equals(625, intComputation(125, 250, 500, 1000));
+
+  Expect.equals(
+      0x7FFFFFFFFFFFFFFF, intComputation(0, 0, 0, 0x7FFFFFFFFFFFFFFF));
+  Expect.equals(
+      -0x8000000000000000, intComputation(0, 0, 0, -0x8000000000000000));
+}
+
+typedef NativeReturnMaxUint8 = Uint8 Function();
+int Function() returnMaxUint8 = ffiTestFunctions
+    .lookup("ReturnMaxUint8")
+    .cast<NativeFunction<NativeReturnMaxUint8>>()
+    .asFunction();
+int Function() returnMaxUint8v2 = ffiTestFunctions
+    .lookup("ReturnMaxUint8v2")
+    .cast<NativeFunction<NativeReturnMaxUint8>>()
+    .asFunction();
+
+typedef NativeReturnMaxUint16 = Uint16 Function();
+int Function() returnMaxUint16 = ffiTestFunctions
+    .lookup("ReturnMaxUint16")
+    .cast<NativeFunction<NativeReturnMaxUint16>>()
+    .asFunction();
+int Function() returnMaxUint16v2 = ffiTestFunctions
+    .lookup("ReturnMaxUint16v2")
+    .cast<NativeFunction<NativeReturnMaxUint16>>()
+    .asFunction();
+
+typedef NativeReturnMaxUint32 = Uint32 Function();
+int Function() returnMaxUint32 = ffiTestFunctions
+    .lookup("ReturnMaxUint32")
+    .cast<NativeFunction<NativeReturnMaxUint32>>()
+    .asFunction();
+int Function() returnMaxUint32v2 = ffiTestFunctions
+    .lookup("ReturnMaxUint32v2")
+    .cast<NativeFunction<NativeReturnMaxUint32>>()
+    .asFunction();
+
+typedef NativeReturnMinInt8 = Int8 Function();
+int Function() returnMinInt8 = ffiTestFunctions
+    .lookup("ReturnMinInt8")
+    .cast<NativeFunction<NativeReturnMinInt8>>()
+    .asFunction();
+int Function() returnMinInt8v2 = ffiTestFunctions
+    .lookup("ReturnMinInt8v2")
+    .cast<NativeFunction<NativeReturnMinInt8>>()
+    .asFunction();
+
+typedef NativeReturnMinInt16 = Int16 Function();
+int Function() returnMinInt16 = ffiTestFunctions
+    .lookup("ReturnMinInt16")
+    .cast<NativeFunction<NativeReturnMinInt16>>()
+    .asFunction();
+int Function() returnMinInt16v2 = ffiTestFunctions
+    .lookup("ReturnMinInt16v2")
+    .cast<NativeFunction<NativeReturnMinInt16>>()
+    .asFunction();
+
+typedef NativeReturnMinInt32 = Int32 Function();
+int Function() returnMinInt32 = ffiTestFunctions
+    .lookup("ReturnMinInt32")
+    .cast<NativeFunction<NativeReturnMinInt32>>()
+    .asFunction();
+int Function() returnMinInt32v2 = ffiTestFunctions
+    .lookup("ReturnMinInt32v2")
+    .cast<NativeFunction<NativeReturnMinInt32>>()
+    .asFunction();
+
+typedef NativeTakeMaxUint8 = IntPtr Function(Uint8);
+int Function(int) takeMaxUint8 = ffiTestFunctions
+    .lookup("TakeMaxUint8")
+    .cast<NativeFunction<NativeTakeMaxUint8>>()
+    .asFunction();
+
+typedef NativeTakeMaxUint16 = IntPtr Function(Uint16);
+int Function(int) takeMaxUint16 = ffiTestFunctions
+    .lookup("TakeMaxUint16")
+    .cast<NativeFunction<NativeTakeMaxUint16>>()
+    .asFunction();
+
+typedef NativeTakeMaxUint32 = IntPtr Function(Uint32);
+int Function(int) takeMaxUint32 = ffiTestFunctions
+    .lookup("TakeMaxUint32")
+    .cast<NativeFunction<NativeTakeMaxUint32>>()
+    .asFunction();
+
+typedef NativeTakeMinInt8 = IntPtr Function(Int8);
+int Function(int) takeMinInt8 = ffiTestFunctions
+    .lookup("TakeMinInt8")
+    .cast<NativeFunction<NativeTakeMinInt8>>()
+    .asFunction();
+
+typedef NativeTakeMinInt16 = IntPtr Function(Int16);
+int Function(int) takeMinInt16 = ffiTestFunctions
+    .lookup("TakeMinInt16")
+    .cast<NativeFunction<NativeTakeMinInt16>>()
+    .asFunction();
+
+typedef NativeTakeMinInt32 = IntPtr Function(Int32);
+int Function(int) takeMinInt32 = ffiTestFunctions
+    .lookup("TakeMinInt32")
+    .cast<NativeFunction<NativeTakeMinInt32>>()
+    .asFunction();
+
+typedef NativeTakeMaxUint8x10 = IntPtr Function(
+    Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8);
+int Function(int, int, int, int, int, int, int, int, int, int) takeMaxUint8x10 =
+    ffiTestFunctions
+        .lookup("TakeMaxUint8x10")
+        .cast<NativeFunction<NativeTakeMaxUint8x10>>()
+        .asFunction();
+
+void testExtension() {
+  // Sign extension on the way back to Dart.
+  Expect.equals(0xff, returnMaxUint8());
+  Expect.equals(0xffff, returnMaxUint16());
+  Expect.equals(0xffffffff, returnMaxUint32());
+  Expect.equals(-0x80, returnMinInt8());
+  Expect.equals(-0x8000, returnMinInt16());
+  Expect.equals(-0x80000000, returnMinInt32());
+  // Truncation in C, and sign extension back to Dart.
+  Expect.equals(0xff, returnMaxUint8v2());
+  Expect.equals(0xffff, returnMaxUint16v2());
+  Expect.equals(0xffffffff, returnMaxUint32v2());
+  Expect.equals(-0x80, returnMinInt8v2());
+  Expect.equals(-0x8000, returnMinInt16v2());
+  Expect.equals(-0x80000000, returnMinInt32v2());
+
+  // Upper bits propper, should work without truncation.
+  Expect.equals(1, takeMaxUint8(0xff));
+  Expect.equals(1, takeMaxUint16(0xffff));
+  Expect.equals(1, takeMaxUint32(0xffffffff));
+  Expect.equals(1, takeMinInt8(-0x80));
+  Expect.equals(1, takeMinInt16(-0x8000));
+  Expect.equals(1, takeMinInt32(-0x80000000));
+  Expect.equals(
+      1,
+      takeMaxUint8x10(
+          0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff));
+  // Upper bits garbage, needs to truncate.
+  Expect.equals(1, takeMaxUint8(0xabcff));
+  Expect.equals(1, takeMaxUint16(0xabcffff));
+  Expect.equals(1, takeMaxUint32(0xabcffffffff));
+  Expect.equals(1, takeMinInt8(0x8abc80));
+  Expect.equals(1, takeMinInt16(0x8abc8000));
+  Expect.equals(1, takeMinInt32(0x8abc80000000));
+  Expect.equals(
+      1,
+      takeMaxUint8x10(0xabcff, 0xabcff, 0xabcff, 0xabcff, 0xabcff, 0xabcff,
+          0xabcff, 0xabcff, 0xabcff, 0xabcff));
+}
+
+QuadOp uintComputation = ffiTestFunctions
+    .lookupFunction<NativeQuadOpUnsigned, QuadOp>("UintComputation");
+
+void test64bitInterpretations() {
+  // 2 ^ 63 - 1
+  Expect.equals(
+      0x7FFFFFFFFFFFFFFF, uintComputation(0, 0, 0, 0x7FFFFFFFFFFFFFFF));
+  // -2 ^ 63 interpreted as 2 ^ 63
+  Expect.equals(
+      -0x8000000000000000, uintComputation(0, 0, 0, -0x8000000000000000));
+  // -1 interpreted as 2 ^ 64 - 1
+  Expect.equals(-1, uintComputation(0, 0, 0, -1));
+}
+
+typedef NativeSenaryOp = Int64 Function(
+    Int8, Int16, Int32, Uint8, Uint16, Uint32);
+typedef SenaryOp = int Function(int, int, int, int, int, int);
+
+SenaryOp sumSmallNumbers = ffiTestFunctions
+    .lookupFunction<NativeSenaryOp, SenaryOp>("SumSmallNumbers");
+
+void testTruncation() {
+  sumSmallNumbers(128, 0, 0, 0, 0, 0);
+  sumSmallNumbers(-129, 0, 0, 0, 0, 0);
+  sumSmallNumbers(0, 0, 0, 256, 0, 0);
+  sumSmallNumbers(0, 0, 0, -1, 0, 0);
+
+  sumSmallNumbers(0, 0x8000, 0, 0, 0, 0);
+  sumSmallNumbers(0, 0xFFFFFFFFFFFF7FFF, 0, 0, 0, 0);
+  sumSmallNumbers(0, 0, 0, 0, 0x10000, 0);
+  sumSmallNumbers(0, 0, 0, 0, -1, 0);
+
+  Expect.equals(0xFFFFFFFF80000000, sumSmallNumbers(0, 0, 0x80000000, 0, 0, 0));
+  Expect.equals(
+      0x000000007FFFFFFF, sumSmallNumbers(0, 0, 0xFFFFFFFF7FFFFFFF, 0, 0, 0));
+  Expect.equals(0, sumSmallNumbers(0, 0, 0, 0, 0, 0x100000000));
+  Expect.equals(0xFFFFFFFF, sumSmallNumbers(0, 0, 0, 0, 0, -1));
+}
+
+typedef NativeDoubleUnaryOp = Double Function(Double);
+typedef DoubleUnaryOp = double Function(double);
+
+DoubleUnaryOp times1_337Double = ffiTestFunctions
+    .lookupFunction<NativeDoubleUnaryOp, DoubleUnaryOp>("Times1_337Double");
+
+void testNativeFunctionDoubles() {
+  Expect.approxEquals(2.0 * 1.337, times1_337Double(2.0));
+}
+
+typedef NativeFloatUnaryOp = Float Function(Float);
+
+DoubleUnaryOp times1_337Float = ffiTestFunctions
+    .lookupFunction<NativeFloatUnaryOp, DoubleUnaryOp>("Times1_337Float");
+
+void testNativeFunctionFloats() {
+  Expect.approxEquals(1337.0, times1_337Float(1000.0));
+}
+
+typedef NativeDecenaryOp = IntPtr Function(IntPtr, IntPtr, IntPtr, IntPtr,
+    IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr);
+typedef NativeDecenaryOp2 = Int16 Function(
+    Int8, Int16, Int8, Int16, Int8, Int16, Int8, Int16, Int8, Int16);
+typedef DecenaryOp = int Function(
+    int, int, int, int, int, int, int, int, int, int);
+
+DecenaryOp sumManyInts = ffiTestFunctions
+    .lookupFunction<NativeDecenaryOp, DecenaryOp>("SumManyInts");
+
+void testNativeFunctionManyArguments1() {
+  Expect.equals(55, sumManyInts(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
+}
+
+DecenaryOp sumManySmallInts = ffiTestFunctions
+    .lookupFunction<NativeDecenaryOp2, DecenaryOp>("SumManySmallInts");
+
+void testNativeFunctionManyArguments5() {
+  Expect.equals(55, sumManySmallInts(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
+}
+
+typedef NativeUndenaryOp = IntPtr Function(IntPtr, IntPtr, IntPtr, IntPtr,
+    IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr);
+typedef UndenaryOp = int Function(
+    int, int, int, int, int, int, int, int, int, int, int);
+
+UndenaryOp sumManyIntsOdd = ffiTestFunctions
+    .lookupFunction<NativeUndenaryOp, UndenaryOp>("SumManyIntsOdd");
+
+void testNativeFunctionManyArguments4() {
+  Expect.equals(66, sumManyIntsOdd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11));
+}
+
+typedef NativeDoubleDecenaryOp = Double Function(Double, Double, Double, Double,
+    Double, Double, Double, Double, Double, Double);
+typedef DoubleDecenaryOp = double Function(double, double, double, double,
+    double, double, double, double, double, double);
+
+DoubleDecenaryOp sumManyDoubles = ffiTestFunctions
+    .lookupFunction<NativeDoubleDecenaryOp, DoubleDecenaryOp>("SumManyDoubles");
+
+void testNativeFunctionManyArguments2() {
+  Expect.approxEquals(
+      55.0, sumManyDoubles(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0));
+}
+
+typedef NativeVigesimalOp = Double Function(
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double);
+typedef VigesimalOp = double Function(
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double);
+
+VigesimalOp sumManyNumbers = ffiTestFunctions
+    .lookupFunction<NativeVigesimalOp, VigesimalOp>("SumManyNumbers");
+
+void testNativeFunctionManyArguments3() {
+  Expect.approxEquals(
+      210.0,
+      sumManyNumbers(1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9, 10.0, 11, 12.0, 13,
+          14.0, 15, 16.0, 17, 18.0, 19, 20.0));
+}
+
+typedef Int64PointerUnOp = Pointer<Int64> Function(Pointer<Int64>);
+
+Int64PointerUnOp assign1337Index1 = ffiTestFunctions
+    .lookupFunction<Int64PointerUnOp, Int64PointerUnOp>("Assign1337Index1");
+
+void testNativeFunctionPointer() {
+  Pointer<Int64> p2 = allocate(count: 2);
+  p2.value = 42;
+  p2[1] = 1000;
+  Pointer<Int64> result = assign1337Index1(p2);
+  Expect.equals(1337, result.value);
+  Expect.equals(1337, p2[1]);
+  Expect.equals(p2.elementAt(1).address, result.address);
+  free(p2);
+}
+
+Int64PointerUnOp nullableInt64ElemAt1 = ffiTestFunctions
+    .lookupFunction<Int64PointerUnOp, Int64PointerUnOp>("NullableInt64ElemAt1");
+
+void testNullPointers() {
+  Pointer<Int64> result = nullableInt64ElemAt1(nullptr);
+  Expect.equals(result, nullptr);
+
+  Pointer<Int64> p2 = allocate(count: 2);
+  result = nullableInt64ElemAt1(p2);
+  Expect.notEquals(result, nullptr);
+  free(p2);
+}
+
+typedef NativeFloatPointerToBool = Uint8 Function(Pointer<Float>);
+typedef FloatPointerToBool = int Function(Pointer<Float>);
+
+FloatPointerToBool isRoughly1337 = ffiTestFunctions.lookupFunction<
+    NativeFloatPointerToBool, FloatPointerToBool>("IsRoughly1337");
+
+void testFloatRounding() {
+  Pointer<Float> p2 = allocate();
+  p2.value = 1337.0;
+
+  int result = isRoughly1337(p2);
+  Expect.equals(1, result);
+
+  free(p2);
+}
+
+typedef NativeFloatToVoid = Void Function(Float);
+typedef DoubleToVoid = void Function(double);
+
+DoubleToVoid devNullFloat = ffiTestFunctions
+    .lookupFunction<NativeFloatToVoid, DoubleToVoid>("DevNullFloat");
+
+void testVoidReturn() {
+  devNullFloat(1337.0);
+
+  dynamic loseSignature = devNullFloat;
+  dynamic result = loseSignature(1337.0);
+  Expect.isNull(result);
+}
+
+typedef NativeVoidToFloat = Float Function();
+typedef VoidToDouble = double Function();
+
+VoidToDouble inventFloatValue = ffiTestFunctions
+    .lookupFunction<NativeVoidToFloat, VoidToDouble>("InventFloatValue");
+
+void testNoArgs() {
+  double result = inventFloatValue();
+  Expect.approxEquals(1337.0, result);
+}
diff --git a/tests/ffi_2/hardfp_test.dart b/tests/ffi_2/hardfp_test.dart
new file mode 100644
index 0000000..600e26b
--- /dev/null
+++ b/tests/ffi_2/hardfp_test.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers.
+//
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=10
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+// VMOptions=--write-protect-code --no-dual-map-code
+// VMOptions=--write-protect-code --no-dual-map-code --use-slow-path
+// VMOptions=--write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+
+import 'callback_tests_utils.dart';
+import 'dylib_utils.dart';
+
+void main() {
+  for (int i = 0; i < 100; ++i) {
+    testSumFloatsAndDoubles();
+    testSumFloatsAndDoublesCallback();
+  }
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+final sumFloatsAndDoubles = ffiTestFunctions.lookupFunction<
+    Double Function(Float, Double, Float),
+    double Function(double, double, double)>("SumFloatsAndDoubles");
+
+void testSumFloatsAndDoubles() {
+  Expect.approxEquals(6.0, sumFloatsAndDoubles(1.0, 2.0, 3.0));
+}
+
+void testSumFloatsAndDoublesCallback() {
+  CallbackTest(
+          "SumFloatsAndDoubles",
+          Pointer.fromFunction<Double Function(Float, Double, Float)>(
+              sumFloatsAndDoublesDart, 0.0))
+      .run();
+}
+
+double sumFloatsAndDoublesDart(double a, double b, double c) {
+  print("sumFloatsAndDoublesDart($a, $b, $c)");
+  return a + b + c;
+}
diff --git a/tests/ffi_2/negative_function_test.dart b/tests/ffi_2/negative_function_test.dart
new file mode 100644
index 0000000..d96c17c
--- /dev/null
+++ b/tests/ffi_2/negative_function_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing error handling with dart:ffi functions.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi' as ffi;
+import 'dylib_utils.dart';
+import "package:expect/expect.dart";
+
+main() {
+  testWrongArity();
+  testWrongTypes();
+  testDynamicAsFunction();
+  testDynamicLookupFunction();
+}
+
+ffi.DynamicLibrary ffiTestFunctions =
+    dlopenPlatformSpecific("ffi_test_functions");
+
+typedef NativeBinaryOp = ffi.Int32 Function(ffi.Int32, ffi.Int32);
+typedef BinaryOp = int Function(int, int);
+
+typedef NativeUnaryOp = ffi.Int64 Function(ffi.Pointer<ffi.Int64>);
+typedef UnaryOp = int Function(ffi.Pointer<ffi.Int64>);
+
+void testWrongArity() {
+  {
+    dynamic sumPlus42 =
+        ffiTestFunctions.lookupFunction<NativeBinaryOp, BinaryOp>("SumPlus42");
+    Expect.throwsNoSuchMethodError(() => sumPlus42(10));
+    Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12));
+    Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12, y: 13));
+  }
+
+  {
+    Function sumPlus42 =
+        ffiTestFunctions.lookupFunction<NativeBinaryOp, BinaryOp>("SumPlus42");
+    Expect.throwsNoSuchMethodError(() => sumPlus42(10));
+    Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12));
+    Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12, y: 13));
+  }
+}
+
+void testWrongTypes() {
+  {
+    dynamic sumPlus42 =
+        ffiTestFunctions.lookupFunction<NativeBinaryOp, BinaryOp>("SumPlus42");
+    Expect.throwsTypeError(() => sumPlus42("abc", "def"));
+  }
+
+  {
+    Function sumPlus42 =
+        ffiTestFunctions.lookupFunction<NativeBinaryOp, BinaryOp>("SumPlus42");
+    Expect.throwsTypeError(() => sumPlus42("abc", "def"));
+  }
+
+  {
+    dynamic pointerOp = ffiTestFunctions
+        .lookupFunction<NativeUnaryOp, UnaryOp>("Assign1337Index1");
+    Expect.throwsTypeError(() => pointerOp(0));
+  }
+}
+
+// Test that invoking 'Pointer.asFunction' with a dynamic receiver type throws
+// an exception.
+void testDynamicAsFunction() {
+  dynamic x = ffi.nullptr.cast<ffi.NativeFunction<ffi.Void Function()>>();
+  Expect.throwsUnsupportedError(() {
+    x.asFunction<void Function()>();
+  });
+}
+
+// Test that invoking 'DynamicLibrary.lookupFunction' with a dynamic receiver
+// type throws an exception.
+void testDynamicLookupFunction() {
+  dynamic lib = ffiTestFunctions;
+  Expect.throwsUnsupportedError(() {
+    lib.lookupFunction<ffi.Void Function(), void Function()>("_");
+  });
+}
diff --git a/tests/ffi/null_regress_39068_test.dart b/tests/ffi_2/null_regress_39068_test.dart
similarity index 100%
rename from tests/ffi/null_regress_39068_test.dart
rename to tests/ffi_2/null_regress_39068_test.dart
diff --git a/tests/ffi/null_test.dart b/tests/ffi_2/null_test.dart
similarity index 100%
rename from tests/ffi/null_test.dart
rename to tests/ffi_2/null_test.dart
diff --git a/tests/ffi_2/prepare_flutter_bundle.dart b/tests/ffi_2/prepare_flutter_bundle.dart
new file mode 100644
index 0000000..83a4a42
--- /dev/null
+++ b/tests/ffi_2/prepare_flutter_bundle.dart
@@ -0,0 +1,204 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:path/path.dart' as path;
+import 'package:args/args.dart';
+
+main(List<String> args) async {
+  if (args.length != 1) {
+    print('Usage ${Platform.executable} ${Platform.script} <output-dir>');
+    exit(1);
+  }
+
+  final sdkRoot =
+      path.canonicalize(path.join(Platform.script.path, '../../..'));
+  final flutterTestsDir = args.single;
+
+  print('Using SDK root: $sdkRoot');
+  final testFiles = <String>[];
+  final failedOrTimedOut = <String>[];
+  final filteredTests = <String>[];
+  await for (final testFile in listTestFiles(sdkRoot, filteredTests)) {
+    final duration = await run(sdkRoot, testFile);
+    if (duration != null && duration.inSeconds < 5) {
+      testFiles.add(testFile);
+    } else {
+      failedOrTimedOut.add(testFile);
+    }
+  }
+  testFiles.sort();
+  failedOrTimedOut.sort();
+  filteredTests.sort();
+
+  dumpTestList(testFiles, 'The following tests will be included:');
+  dumpTestList(failedOrTimedOut,
+      'The following tests will be excluded due to timeout or test failure:');
+  dumpTestList(
+      filteredTests,
+      'The following tests were filtered due to using '
+      'dart_api.h/async/DynamicLibrary.{process,executable}/...');
+
+  final allFiles = <String>{};
+  allFiles.add(path.join(sdkRoot, 'pkg/expect/lib/expect.dart'));
+  for (final testFile in testFiles) {
+    allFiles.add(testFile);
+    await addImportedFilesTo(allFiles, testFile);
+  }
+
+  await generateCleanDir(flutterTestsDir);
+
+  final dartTestsDir = path.join(flutterTestsDir, 'lib/src/generated');
+  await generateDartTests(dartTestsDir, allFiles, testFiles);
+
+  final ccDir = path.join(flutterTestsDir, 'ios/Classes');
+  await generateCLibs(sdkRoot, ccDir, allFiles, testFiles);
+
+  print('');
+  print('Please copy generated files into FFI flutter test application');
+  print('  * $dartTestsDir');
+  print('  * $ccDir');
+}
+
+void dumpTestList(List<String> testFiles, String message) {
+  if (testFiles.isEmpty) return;
+
+  print(message);
+  for (final testFile in testFiles) {
+    print('  ${path.basename(testFile)}');
+  }
+}
+
+final importRegExp = RegExp(r'''^import.*['"](.+)['"].*;''');
+
+Future addImportedFilesTo(Set<String> allFiles, String testFile) async {
+  final content = await File(testFile).readAsString();
+  for (final line in content.split('\n')) {
+    final match = importRegExp.matchAsPrefix(line);
+    if (match != null) {
+      final filename = match.group(1);
+      if (!filename.contains('dart:') &&
+          !filename.contains('package:expect') &&
+          !filename.contains('package:ffi')) {
+        final importedFile = Uri.file(testFile).resolve(filename).toFilePath();
+        if (allFiles.add(importedFile)) {
+          addImportedFilesTo(allFiles, importedFile);
+        }
+      }
+    }
+  }
+}
+
+Future generateCLibs(String sdkRoot, String destDir, Set<String> allFiles,
+    List<String> testFiles) async {
+  final dir = await generateCleanDir(destDir);
+
+  String destinationFile;
+
+  final lib1 =
+      path.join(sdkRoot, 'runtime/bin/ffi_test/ffi_test_dynamic_library.cc');
+  destinationFile =
+      path.join(dir.path, path.basename(lib1)).replaceAll('.cc', '.cpp');
+  File(destinationFile).writeAsStringSync(File(lib1).readAsStringSync());
+
+  final lib2 = path.join(sdkRoot, 'runtime/bin/ffi_test/ffi_test_functions.cc');
+  destinationFile =
+      path.join(dir.path, path.basename(lib2)).replaceAll('.cc', '.cpp');
+  File(destinationFile).writeAsStringSync(File(lib2).readAsStringSync());
+}
+
+String cleanDart(String content) {
+  return content.replaceAll('package:expect/expect.dart', 'expect.dart');
+}
+
+Future generateDartTests(
+    String destDir, Set<String> allFiles, List<String> testFiles) async {
+  final dir = await generateCleanDir(destDir);
+
+  final sink = File(path.join(dir.path, 'all.dart')).openWrite();
+  sink.writeln('import "dart:async";');
+  sink.writeln('');
+  for (int i = 0; i < testFiles.length; ++i) {
+    sink.writeln('import "${path.basename(testFiles[i])}" as main$i;');
+  }
+  sink.writeln('');
+  sink.writeln('Future invoke(dynamic fun) async {');
+  sink.writeln('  if (fun is void Function() || fun is Future Function()) {');
+  sink.writeln('    return await fun();');
+  sink.writeln('  } else {');
+  sink.writeln('    return await fun(<String>[]);');
+  sink.writeln('  }');
+  sink.writeln('}');
+  sink.writeln('');
+  sink.writeln('dynamic main() async {');
+  for (int i = 0; i < testFiles.length; ++i) {
+    sink.writeln('  await invoke(main$i.main);');
+  }
+  sink.writeln('}');
+  await sink.close();
+
+  for (final file in allFiles) {
+    File(path.join(dir.path, path.basename(file)))
+        .writeAsStringSync(cleanDart(File(file).readAsStringSync()));
+  }
+
+  File(path.join(dir.path, 'dylib_utils.dart')).writeAsStringSync('''
+import 'dart:ffi' as ffi;
+import 'dart:io' show Platform;
+
+ffi.DynamicLibrary dlopenPlatformSpecific(String name, {String path}) {
+  return Platform.isAndroid
+      ? ffi.DynamicLibrary.open('libffi_tests.so')
+      : ffi.DynamicLibrary.process();
+}
+''');
+}
+
+Stream<String> listTestFiles(
+    String sdkRoot, List<String> filteredTests) async* {
+  await for (final file in Directory(path.join(sdkRoot, 'tests/ffi')).list()) {
+    if (file is File && file.path.endsWith('_test.dart')) {
+      // These tests are VM specific and cannot necessarily be run on Flutter.
+      if (path.basename(file.path).startsWith('vmspecific_')) {
+        filteredTests.add(file.path);
+        continue;
+      }
+      // These tests use special features which are hard to test on Flutter.
+      final contents = file.readAsStringSync();
+      if (contents.contains(RegExp('//# .* compile-time error')) ||
+          contents.contains('DynamicLibrary.process') ||
+          contents.contains('DynamicLibrary.executable')) {
+        filteredTests.add(file.path);
+        continue;
+      }
+      yield file.path;
+    }
+  }
+}
+
+Future<Duration> run(String sdkRoot, String testFile) async {
+  final env = Map<String, String>.from(Platform.environment);
+  env['LD_LIBRARY_PATH'] = path.join(sdkRoot, 'out/ReleaseX64');
+  final sw = Stopwatch()..start();
+  final Process process = await Process.start(
+      Platform.executable, <String>[testFile],
+      environment: env);
+  final timer = Timer(const Duration(seconds: 3), () => process.kill());
+  process.stdout.listen((_) {});
+  process.stderr.listen((_) {});
+  if (await process.exitCode != 0) return null;
+  timer.cancel();
+  return sw.elapsed;
+}
+
+Future<Directory> generateCleanDir(String dirname) async {
+  final directory = Directory(dirname);
+  if (await directory.exists()) {
+    await directory.delete(recursive: true);
+  }
+  await directory.create(recursive: true);
+  return directory;
+}
diff --git a/tests/ffi_2/regress_37254_test.dart b/tests/ffi_2/regress_37254_test.dart
new file mode 100644
index 0000000..dcd42b9
--- /dev/null
+++ b/tests/ffi_2/regress_37254_test.dart
@@ -0,0 +1,259 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This program tests interaction with generic Pointers.
+//
+// Notation used in following tables:
+// * static_type//dynamic_type
+// * P = Pointer
+// * I = Int8
+// * NT = NativeType
+//
+// Note #1: When NNBD is landed, implicit downcasts will be static errors.
+//
+// Note #2: When we switch to extension methods we will _only_ use the static
+//          type of the container.
+//
+// ===== a.value = b ======
+// Does a.value = b, where a and b have specific static and dynamic types: run
+// fine, fail at compile time, or fail at runtime?
+// =======================
+//                  b     P<I>//P<I>   P<NT>//P<I>           P<NT>//P<NT>
+// a
+// P<P<I>>//P<P<I>>     1 ok         2 implicit downcast   3 implicit downcast
+//                                     of argument:          of argument:
+//                                     static error          static error
+//
+// P<P<NT>>//P<P<I>>    4 ok         5 ok                  6 fail at runtime
+//
+// P<P<NT>>//P<P<NT>>   7 ok         8 ok                  9 ok
+//
+// ====== final c = a.value ======
+// What is the (inferred) static type and runtime type of `a.value`. Note that
+// we assume extension method here: on Pointer<PointerT>> { Pointer<T> load(); }
+// ================================
+// a                    a.value
+//                      inferred static type*//runtime type
+// P<P<I>>//P<P<I>>     P<I>//P<I>
+//
+// P<P<NT>>//P<P<I>>    P<NT>//P<I>
+//
+// P<P<NT>>//P<P<NT>>   P<NT>//P<NT>
+//
+// * The inferred static type when we get extension methods.
+//
+// ====== b = a.value ======
+// What happens when we try to assign the result of a.value to variable b with
+// a specific static type: runs fine, fails at compile time, or fails at runtime.
+// ==========================
+//                  b     P<I>                        P<NT>
+// a
+// P<P<I>>//P<P<I>>     1 ok                        2 ok
+//
+// P<P<NT>>//P<P<I>>    3 implicit downcast         4 ok
+//                        of returnvalue: ok
+//
+// P<P<NT>>//P<P<NT>>   5 implicit downcast         6 ok
+//                        of returnvalue: fail
+//                        at runtime
+//
+// These are the normal Dart assignment rules.
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+// ===== a.value = b ======
+// The tests follow table cells left to right, top to bottom.
+void store1() {
+  final Pointer<Pointer<Int8>> a = allocate<Pointer<Int8>>();
+  final Pointer<Int8> b = allocate<Int8>();
+
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+void store2() {
+  final Pointer<Pointer<Int8>> a = allocate<Pointer<Int8>>();
+  final Pointer<NativeType> b =
+      allocate<Int8>(); // Reified Pointer<Int8> at runtime.
+
+  // Successful implicit downcast of argument at runtime.
+  // Should succeed now, should statically be rejected when NNBD lands.
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+void store3() {
+  final Pointer<Pointer<Int8>> a = allocate<Pointer<Int8>>();
+  final Pointer<NativeType> b = allocate<Int8>().cast<Pointer<NativeType>>();
+
+  // Failing implicit downcast of argument at runtime.
+  // Should fail now at runtime, should statically be rejected when NNBD lands.
+  Expect.throws(() {
+    a.value = b;
+  });
+
+  free(a);
+  free(b);
+}
+
+void store4() {
+  // Reified as Pointer<Pointer<Int8>> at runtime.
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<Int8>>();
+
+  final Pointer<Int8> b = allocate<Int8>();
+
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+void store5() {
+  // Reified as Pointer<Pointer<Int8>> at runtime.
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<Int8>>();
+
+  final Pointer<NativeType> b =
+      allocate<Int8>(); // Reified as Pointer<Int8> at runtime.
+
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+void store6() {
+  // Reified as Pointer<Pointer<Int8>> at runtime.
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<Int8>>();
+  final Pointer<NativeType> b = allocate<Int8>().cast<Pointer<NativeType>>();
+
+  // Fails on type check of argument.
+  Expect.throws(() {
+    a.value = b;
+  });
+
+  free(a);
+  free(b);
+}
+
+void store7() {
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<NativeType>>();
+  final Pointer<Int8> b = allocate<Int8>();
+
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+void store8() {
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<NativeType>>();
+
+  // Reified as Pointer<Int8> at runtime.
+  final Pointer<NativeType> b = allocate<Int8>();
+
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+void store9() {
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<NativeType>>();
+  final Pointer<NativeType> b = allocate<Int8>().cast<Pointer<NativeType>>();
+
+  a.value = b;
+
+  free(a);
+  free(b);
+}
+
+// ====== b = a.value ======
+// The tests follow table cells left to right, top to bottom.
+void load1() {
+  final Pointer<Pointer<Int8>> a = allocate<Pointer<Int8>>();
+
+  Pointer<Int8> b = a.value;
+  Expect.type<Pointer<Int8>>(b);
+
+  free(a);
+}
+
+void load2() {
+  final Pointer<Pointer<Int8>> a = allocate<Pointer<Int8>>();
+
+  Pointer<NativeType> b = a.value;
+  Expect.type<Pointer<Int8>>(b);
+
+  free(a);
+}
+
+void load3() {
+  // Reified as Pointer<Pointer<Int8>> at runtime.
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<Int8>>();
+
+  Pointer<Int8> b = a.value;
+  Expect.type<Pointer<Int8>>(b);
+
+  free(a);
+}
+
+void load4() {
+  // Reified as Pointer<Pointer<Int8>> at runtime.
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<Int8>>();
+
+  // Return value runtime type is Pointer<Int8>.
+  Pointer<NativeType> b = a.value;
+  Expect.type<Pointer<Int8>>(b);
+
+  free(a);
+}
+
+void load5() {
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<NativeType>>();
+
+  // Failing implicit downcast of return value at runtime.
+  // Should fail now at runtime, should statically be rejected when NNBD lands.
+  Expect.throws(() {
+    Pointer<Int8> b = a.value;
+  });
+
+  free(a);
+}
+
+void load6() {
+  final Pointer<Pointer<NativeType>> a = allocate<Pointer<NativeType>>();
+
+  Pointer<NativeType> b = a.value;
+  Expect.type<Pointer<NativeType>>(b);
+
+  free(a);
+}
+
+void main() {
+  // Trigger both the runtime entry and the IL in bytecode.
+  for (int i = 0; i < 100; i++) {
+    store1();
+    store2();
+    store3();
+    store4();
+    store5();
+    store6();
+    store7();
+    store8();
+    store9();
+    load1();
+    load2();
+    load3();
+    load4();
+    load5();
+    load6();
+  }
+}
diff --git a/tests/ffi_2/regress_39044_test.dart b/tests/ffi_2/regress_39044_test.dart
new file mode 100644
index 0000000..785500d
--- /dev/null
+++ b/tests/ffi_2/regress_39044_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Check that the optimizer does not fuse constants with different
+// representations.
+//
+// SharedObjects=ffi_test_functions
+
+import "dart:ffi";
+
+import "package:expect/expect.dart";
+
+import "dylib_utils.dart";
+
+main() {
+  final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+  final intComputation = ffiTestFunctions.lookupFunction<
+      Int64 Function(Int64, Int8), int Function(int, int)>("Regress39044");
+
+  // The arguments are the same Smi constant, however they are different sizes.
+  final result = intComputation(
+      /* dart::kUnboxedInt64 --> int64_t             */ 1,
+      /* dart::kUnboxedInt32 --> truncated to int8_t */ 1);
+
+  Expect.equals(0, result);
+}
diff --git a/tests/ffi_2/regress_39063_test.dart b/tests/ffi_2/regress_39063_test.dart
new file mode 100644
index 0000000..52dca18
--- /dev/null
+++ b/tests/ffi_2/regress_39063_test.dart
@@ -0,0 +1,69 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Check that the optimizer does not fuse constants with different
+// representations.
+//
+// SharedObjects=ffi_test_functions
+
+import "dart:ffi";
+
+import "package:expect/expect.dart";
+
+import "dylib_utils.dart";
+
+typedef VigesimalOp = double Function(
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double,
+    int,
+    double);
+
+typedef NativeVigesimalOp = Double Function(
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double,
+    IntPtr,
+    Float,
+    IntPtr,
+    Double);
+
+main() {
+  final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+  final sumManyNumbers = ffiTestFunctions
+      .lookupFunction<NativeVigesimalOp, VigesimalOp>("SumManyNumbers");
+
+  // Should not crash.
+  sumManyNumbers(1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9, 10.0, 11, 12.0, 13, 14.0,
+      15, 16.0, 17, 18.0, 19, 20.0);
+}
diff --git a/tests/ffi_2/regress_39885_test.dart b/tests/ffi_2/regress_39885_test.dart
new file mode 100644
index 0000000..7d960f2
--- /dev/null
+++ b/tests/ffi_2/regress_39885_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+import "package:ffi/ffi.dart" show allocate, free;
+
+main() {
+  final data = allocate<Uint8>(count: 3);
+  for (int i = 0; i < 3; ++i) {
+    data.elementAt(i).value = 1;
+  }
+  free(data);
+}
diff --git a/tests/ffi_2/sizeof_test.dart b/tests/ffi_2/sizeof_test.dart
new file mode 100644
index 0000000..fd02efc
--- /dev/null
+++ b/tests/ffi_2/sizeof_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+
+void main() async {
+  Expect.equals(true, 4 == sizeOf<Pointer>() || 8 == sizeOf<Pointer>());
+}
diff --git a/tests/ffi_2/snapshot_test.dart b/tests/ffi_2/snapshot_test.dart
new file mode 100644
index 0000000..b27b88b
--- /dev/null
+++ b/tests/ffi_2/snapshot_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+//
+// Checks that the VM throws an appropriate exception when FFI objects are
+// passed between isolates.
+
+import 'dart:ffi';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+main(args) async {
+  try {
+    await Isolate.spawn(print, Pointer<Void>.fromAddress(1));
+  } catch (e) {
+    Expect.type<ArgumentError>(e);
+    return;
+  }
+
+  throw "Test didn't throw an exception!";
+}
diff --git a/tests/ffi_2/stacktrace_regress_37910_test.dart b/tests/ffi_2/stacktrace_regress_37910_test.dart
new file mode 100644
index 0000000..0a76648
--- /dev/null
+++ b/tests/ffi_2/stacktrace_regress_37910_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--stacktrace_every=100
+
+import 'dart:ffi' as ffi;
+
+typedef fooFfi1Type = ffi.Int32 Function();
+int fooFfi1() {
+  int a = 0;
+  for (int i = 0; i < 1000; ++i) {
+    a += i;
+  }
+  return a;
+}
+
+int Function() foo1 = ffi.Pointer.fromFunction<fooFfi1Type>(fooFfi1, 0)
+    .cast<ffi.NativeFunction<fooFfi1Type>>()
+    .asFunction();
+
+main() {
+  foo1();
+}
diff --git a/tests/ffi_2/structs_test.dart b/tests/ffi_2/structs_test.dart
new file mode 100644
index 0000000..263d562
--- /dev/null
+++ b/tests/ffi_2/structs_test.dart
@@ -0,0 +1,133 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi struct pointers.
+//
+// VMOptions=--deterministic --optimization-counter-threshold=50 --enable-inlining-annotations
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'ffi_test_helpers.dart';
+import 'coordinate_bare.dart' as bare;
+import 'coordinate.dart';
+
+void main() {
+  for (int i = 0; i < 100; i++) {
+    testStructAllocate();
+    testStructFromAddress();
+    testStructWithNulls();
+    testBareStruct();
+    testTypeTest();
+    testUtf8();
+  }
+}
+
+/// allocates each coordinate separately in c memory
+void testStructAllocate() {
+  Pointer<Coordinate> c1 = Coordinate.allocate(10.0, 10.0, nullptr).addressOf;
+  Pointer<Coordinate> c2 = Coordinate.allocate(20.0, 20.0, c1).addressOf;
+  Pointer<Coordinate> c3 = Coordinate.allocate(30.0, 30.0, c2).addressOf;
+  c1.ref.next = c3;
+
+  Coordinate currentCoordinate = c1.ref;
+  Expect.equals(10.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(30.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(20.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(10.0, currentCoordinate.x);
+
+  free(c1);
+  free(c2);
+  free(c3);
+}
+
+/// allocates coordinates consecutively in c memory
+void testStructFromAddress() {
+  Pointer<Coordinate> c1 = allocate(count: 3);
+  Pointer<Coordinate> c2 = c1.elementAt(1);
+  Pointer<Coordinate> c3 = c1.elementAt(2);
+  c1.ref
+    ..x = 10.0
+    ..y = 10.0
+    ..next = c3;
+  c2.ref
+    ..x = 20.0
+    ..y = 20.0
+    ..next = c1;
+  c3.ref
+    ..x = 30.0
+    ..y = 30.0
+    ..next = c2;
+
+  Coordinate currentCoordinate = c1.ref;
+  Expect.equals(10.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(30.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(20.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(10.0, currentCoordinate.x);
+
+  free(c1);
+}
+
+void testStructWithNulls() {
+  Pointer<Coordinate> coordinate =
+      Coordinate.allocate(10.0, 10.0, nullptr).addressOf;
+  Expect.equals(coordinate.ref.next, nullptr);
+  coordinate.ref.next = coordinate;
+  Expect.notEquals(coordinate.ref.next, nullptr);
+  coordinate.ref.next = nullptr;
+  Expect.equals(coordinate.ref.next, nullptr);
+  free(coordinate);
+}
+
+void testBareStruct() {
+  int structSize = sizeOf<Double>() * 2 + sizeOf<IntPtr>();
+  bare.Coordinate c1 =
+      allocate<Uint8>(count: structSize * 3).cast<bare.Coordinate>().ref;
+  bare.Coordinate c2 =
+      c1.addressOf.offsetBy(structSize).cast<bare.Coordinate>().ref;
+  bare.Coordinate c3 =
+      c1.addressOf.offsetBy(structSize * 2).cast<bare.Coordinate>().ref;
+  c1.x = 10.0;
+  c1.y = 10.0;
+  c1.next = c3.addressOf;
+  c2.x = 20.0;
+  c2.y = 20.0;
+  c2.next = c1.addressOf;
+  c3.x = 30.0;
+  c3.y = 30.0;
+  c3.next = c2.addressOf;
+
+  bare.Coordinate currentCoordinate = c1;
+  Expect.equals(10.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(30.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(20.0, currentCoordinate.x);
+  currentCoordinate = currentCoordinate.next.ref;
+  Expect.equals(10.0, currentCoordinate.x);
+
+  free(c1.addressOf);
+}
+
+void testTypeTest() {
+  Coordinate c = Coordinate.allocate(10, 10, nullptr);
+  Expect.isTrue(c is Struct);
+  Expect.isTrue(c.addressOf is Pointer<Coordinate>);
+  free(c.addressOf);
+}
+
+void testUtf8() {
+  final String test = 'Hasta Mañana';
+  final Pointer<Utf8> medium = Utf8.toUtf8(test);
+  Expect.equals(test, Utf8.fromUtf8(medium));
+  free(medium);
+}
diff --git a/tests/ffi_2/variance_function_test.dart b/tests/ffi_2/variance_function_test.dart
new file mode 100644
index 0000000..d6e6378
--- /dev/null
+++ b/tests/ffi_2/variance_function_test.dart
@@ -0,0 +1,238 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=10
+// VMOptions=--use-slow-path
+// SharedObjects=ffi_test_functions
+//
+// This file tests subtyping relationships (at compile time and at runtime) of
+// parameters and return types of ffi trampolines and ffi callback trampolines.
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+typedef Int64PointerParamOpDart = void Function(Pointer<Int64>);
+typedef Int64PointerParamOp = Void Function(Pointer<Int64>);
+typedef NaTyPointerParamOpDart = void Function(Pointer<NativeType>);
+typedef NaTyPointerParamOp = Void Function(Pointer<NativeType>);
+typedef Int64PointerReturnOp = Pointer<Int64> Function();
+typedef NaTyPointerReturnOp = Pointer<NativeType> Function();
+
+final paramOpName = "NativeTypePointerParam";
+final returnOpName = "NativeTypePointerReturn";
+
+final DynamicLibrary ffiTestFunctions =
+    dlopenPlatformSpecific("ffi_test_functions");
+
+// =============================================
+// Tests calls from Dart to native (asFunction).
+// =============================================
+
+void paramInvariant1() {
+  final fp =
+      ffiTestFunctions.lookup<NativeFunction<Int64PointerParamOp>>(paramOpName);
+  final f = fp.asFunction<Int64PointerParamOpDart>();
+  final arg = allocate<Int64>();
+  f(arg);
+  free(arg);
+}
+
+void paramInvariant2() {
+  final fp =
+      ffiTestFunctions.lookup<NativeFunction<NaTyPointerParamOp>>(paramOpName);
+  final f = fp.asFunction<NaTyPointerParamOpDart>();
+  final arg = allocate<Int64>().cast<NativeType>();
+  Expect.type<Pointer<NativeType>>(arg);
+  f(arg);
+  free(arg);
+}
+
+// Pass a statically and dynamically subtyped argument.
+void paramSubtype1() {
+  final fp =
+      ffiTestFunctions.lookup<NativeFunction<NaTyPointerParamOp>>(paramOpName);
+  final f = fp.asFunction<NaTyPointerParamOpDart>();
+  final arg = allocate<Int64>();
+  Expect.type<Pointer<Int64>>(arg);
+  f(arg);
+  free(arg);
+}
+
+// Pass a statically subtyped but dynamically invariant argument.
+void paramSubtype2() {
+  final fp =
+      ffiTestFunctions.lookup<NativeFunction<NaTyPointerParamOp>>(paramOpName);
+  final f = fp.asFunction<NaTyPointerParamOpDart>();
+  final Pointer<NativeType> arg = allocate<Int64>();
+  Expect.type<Pointer<Int64>>(arg);
+  f(arg);
+  free(arg);
+}
+
+void returnInvariant1() {
+  final fp = ffiTestFunctions
+      .lookup<NativeFunction<Int64PointerReturnOp>>(returnOpName);
+  final f = fp.asFunction<Int64PointerReturnOp>();
+  final result = f();
+  Expect.type<Pointer<Int64>>(result);
+}
+
+void returnInvariant2() {
+  final fp = ffiTestFunctions
+      .lookup<NativeFunction<NaTyPointerReturnOp>>(returnOpName);
+  final f = fp.asFunction<NaTyPointerReturnOp>();
+  final result = f();
+  Expect.type<Pointer<NativeType>>(result);
+}
+
+void returnSubtype() {
+  final fp = ffiTestFunctions
+      .lookup<NativeFunction<Int64PointerReturnOp>>(returnOpName);
+  final f = fp.asFunction<Int64PointerReturnOp>();
+  final NaTyPointerReturnOp f2 = f;
+  Expect.type<Int64PointerReturnOp>(f2);
+  final result = f2();
+  Expect.type<Pointer<NativeType>>(result);
+}
+
+void functionArgumentVariance() {
+  final p = Pointer<
+      NativeFunction<
+          Pointer<NativeFunction<Pointer<Int8> Function(Pointer<NativeType>)>> Function(
+              Pointer<
+                  NativeFunction<
+                      Pointer<NativeType> Function(
+                          Pointer<Int8>)>>)>>.fromAddress(0x1234);
+  final f = p.asFunction<
+      Pointer<NativeFunction<Pointer<NativeType> Function(Pointer<Int8>)>> Function(
+          Pointer<
+              NativeFunction<Pointer<Int8> Function(Pointer<NativeType>)>>)>();
+}
+
+void asFunctionTests() {
+  for (int i = 0; i < 100; ++i) {
+    paramInvariant1(); // Parameter invariant: Pointer<Int64>.
+    paramInvariant2(); // Parameter invariant: Pointer<NativeType>.
+    paramSubtype1(); // Parameter statically and dynamically subtyped.
+    paramSubtype2(); // Parameter statically invariant, dynamically subtyped.
+    returnInvariant1(); // Return value invariant: Pointer<Int64>.
+    returnInvariant2(); // Return value invariant: Pointer<NativeType>.
+    returnSubtype(); // Return value static subtyped, dynamically invariant.
+    functionArgumentVariance(); // Check nested function signatures.
+  }
+}
+
+// =======================================================
+// Test with callbacks from native to Dart (fromFunction).
+// =======================================================
+
+typedef CallbackInt64PointerParamOpDart = void Function(
+    Pointer<NativeFunction<Int64PointerParamOp>>);
+typedef CallbackInt64PointerParamOp = Void Function(
+    Pointer<NativeFunction<Int64PointerParamOp>>);
+
+typedef CallbackNaTyPointerParamOpDart = void Function(
+    Pointer<NativeFunction<NaTyPointerParamOp>>);
+typedef CallbackNaTyPointerParamOp = Void Function(
+    Pointer<NativeFunction<NaTyPointerParamOp>>);
+
+typedef CallbackInt64PointerReturnOpDart = void Function(
+    Pointer<NativeFunction<Int64PointerReturnOp>>);
+typedef CallbackInt64PointerReturnOp = Void Function(
+    Pointer<NativeFunction<Int64PointerReturnOp>>);
+
+typedef CallbackNaTyPointerReturnOpDart = void Function(
+    Pointer<NativeFunction<NaTyPointerReturnOp>>);
+typedef CallbackNaTyPointerReturnOp = Void Function(
+    Pointer<NativeFunction<NaTyPointerReturnOp>>);
+
+final callbackParamOpName = "CallbackNativeTypePointerParam";
+final callbackReturnOpName = "CallbackNativeTypePointerReturn";
+
+void int64PointerParamOp(Pointer<Int64> p) {
+  p.value = 42;
+}
+
+void naTyPointerParamOp(Pointer<NativeType> p) {
+  final Pointer<Int8> asInt8 = p.cast();
+  asInt8.value = 42;
+}
+
+// Pointer to return to C when C calls back into Dart and asks for a Pointer.
+Pointer<Int64> data;
+
+Pointer<Int64> int64PointerReturnOp() {
+  return data;
+}
+
+Pointer<NativeType> naTyPointerReturnOp() {
+  return data;
+}
+
+void callbackParamInvariant1() {
+  final callback = ffiTestFunctions.lookupFunction<CallbackInt64PointerParamOp,
+      CallbackInt64PointerParamOpDart>(callbackParamOpName);
+  final fp = Pointer.fromFunction<Int64PointerParamOp>(int64PointerParamOp);
+  callback(fp);
+}
+
+void callbackParamInvariant2() {
+  final callback = ffiTestFunctions.lookupFunction<CallbackNaTyPointerParamOp,
+      CallbackNaTyPointerParamOpDart>(callbackParamOpName);
+  final fp = Pointer.fromFunction<NaTyPointerParamOp>(naTyPointerParamOp);
+  callback(fp);
+}
+
+void callbackParamImplictDowncast1() {
+  final callback = ffiTestFunctions.lookupFunction<CallbackNaTyPointerParamOp,
+      CallbackNaTyPointerParamOpDart>(callbackParamOpName);
+  final fp = Pointer.fromFunction<Int64PointerParamOp>(int64PointerParamOp);
+  Expect.throws(() {
+    callback(fp);
+  });
+}
+
+void callbackParamSubtype1() {
+  final callback = ffiTestFunctions.lookupFunction<CallbackNaTyPointerParamOp,
+      CallbackNaTyPointerParamOpDart>(callbackParamOpName);
+  final fp = Pointer.fromFunction<NaTyPointerParamOp>(int64PointerParamOp);
+  callback(fp);
+}
+
+void callbackReturnInvariant1() {
+  final callback = ffiTestFunctions.lookupFunction<CallbackInt64PointerReturnOp,
+      CallbackInt64PointerReturnOpDart>(callbackReturnOpName);
+  final fp = Pointer.fromFunction<Int64PointerReturnOp>(int64PointerReturnOp);
+  callback(fp);
+}
+
+void callbackReturnInvariant2() {
+  final callback = ffiTestFunctions.lookupFunction<CallbackNaTyPointerReturnOp,
+      CallbackNaTyPointerReturnOpDart>(callbackReturnOpName);
+  final fp = Pointer.fromFunction<NaTyPointerReturnOp>(naTyPointerReturnOp);
+  callback(fp);
+}
+
+void fromFunctionTests() {
+  data = allocate();
+  for (int i = 0; i < 100; ++i) {
+    callbackParamInvariant1(); // Pointer<Int64> invariant
+    callbackParamInvariant2(); // Pointer<NativeType> invariant
+    callbackParamImplictDowncast1(); // static and dynamically supertyped
+    callbackParamSubtype1(); // static and dynamically subtyped
+    callbackReturnInvariant1(); // Pointer<Int64> invariant
+    callbackReturnInvariant2(); // Pointer<NativeType> invariant
+  }
+  free(data);
+}
+
+void main() {
+  asFunctionTests();
+  fromFunctionTests();
+}
diff --git a/tests/ffi_2/very_large_struct.dart b/tests/ffi_2/very_large_struct.dart
new file mode 100644
index 0000000..ca29143
--- /dev/null
+++ b/tests/ffi_2/very_large_struct.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+/// Large sample struct for dart:ffi library.
+class VeryLargeStruct extends Struct {
+  @Int8()
+  int a;
+
+  @Int16()
+  int b;
+
+  @Int32()
+  int c;
+
+  @Int64()
+  int d;
+
+  @Uint8()
+  int e;
+
+  @Uint16()
+  int f;
+
+  @Uint32()
+  int g;
+
+  @Uint64()
+  int h;
+
+  @IntPtr()
+  int i;
+
+  @Double()
+  double j;
+
+  @Float()
+  double k;
+
+  Pointer<VeryLargeStruct> parent;
+
+  @IntPtr()
+  int numChildren;
+
+  Pointer<VeryLargeStruct> children;
+
+  @Int8()
+  int smallLastField;
+}
diff --git a/tests/ffi_2/vmspecific_dynamic_library_test.dart b/tests/ffi_2/vmspecific_dynamic_library_test.dart
new file mode 100644
index 0000000..c15f850
--- /dev/null
+++ b/tests/ffi_2/vmspecific_dynamic_library_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi dynamic library loading.
+//
+// SharedObjects=ffi_test_dynamic_library ffi_test_functions
+
+import 'dart:io';
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+
+import 'dylib_utils.dart';
+
+void main() {
+  testOpen();
+  testOpenError();
+  testLookup();
+  testLookupError();
+  testToString();
+  testEquality();
+  testHandle();
+}
+
+void testOpen() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+}
+
+void testOpenError() {
+  Expect.throws(
+      () => dlopenPlatformSpecific("doesnotexistforsurelibrary123409876"));
+}
+
+typedef NativeDoubleUnOp = Double Function(Double);
+
+typedef DoubleUnOp = double Function(double);
+
+void testLookup() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  var timesFour = l.lookupFunction<NativeDoubleUnOp, DoubleUnOp>("timesFour");
+  Expect.approxEquals(12.0, timesFour(3));
+
+  if (Platform.isMacOS ||
+      Platform.isIOS ||
+      Platform.isAndroid ||
+      Platform.isLinux) {
+    // Lookup a symbol from 'libc' since it's loaded with global visibility.
+    DynamicLibrary p = DynamicLibrary.process();
+    Expect.isTrue(p.lookup<Void>("strcmp") != nullptr);
+  } else {
+    Expect.throws<UnsupportedError>(() => DynamicLibrary.process());
+  }
+
+  DynamicLibrary e = DynamicLibrary.executable();
+  Expect.isTrue(e.lookup("Dart_Invoke") != nullptr);
+}
+
+void testLookupError() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  Expect.throws(() => l.lookupFunction<NativeDoubleUnOp, DoubleUnOp>(
+      "functionnamethatdoesnotexistforsure749237593845"));
+}
+
+void testToString() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  Expect.stringEquals(
+      "DynamicLibrary: handle=0x", l.toString().substring(0, 25));
+}
+
+void testEquality() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  DynamicLibrary l2 = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  Expect.equals(l, l2);
+  Expect.equals(l.hashCode, l2.hashCode);
+  DynamicLibrary l3 = dlopenPlatformSpecific("ffi_test_functions");
+  Expect.notEquals(l, l3);
+}
+
+void testHandle() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  DynamicLibrary l2 = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  Pointer<Void> h = l.handle;
+  Pointer<Void> h2 = l2.handle;
+  Expect.equals(h, h2);
+  DynamicLibrary l3 = dlopenPlatformSpecific("ffi_test_functions");
+  Pointer<Void> h3 = l3.handle;
+  Expect.notEquals(h, h3);
+}
diff --git a/tests/ffi_2/vmspecific_enable_ffi_test.dart b/tests/ffi_2/vmspecific_enable_ffi_test.dart
new file mode 100644
index 0000000..f44753d
--- /dev/null
+++ b/tests/ffi_2/vmspecific_enable_ffi_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing the --enable-ffi=false flag.
+//
+// VMOptions=--enable-ffi=false
+
+import 'dart:ffi'; //# 01: compile-time error
+import 'package:ffi/ffi.dart'; //# 01: compile-time error
+
+void main() {
+  Pointer<Int8> p = //# 01: compile-time error
+      allocate(); //# 01: compile-time error
+  print(p.address); //# 01: compile-time error
+  free(p); //# 01: compile-time error
+}
diff --git a/tests/ffi_2/vmspecific_function_callbacks_exit_test.dart b/tests/ffi_2/vmspecific_function_callbacks_exit_test.dart
new file mode 100644
index 0000000..e7f33a2
--- /dev/null
+++ b/tests/ffi_2/vmspecific_function_callbacks_exit_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers with callbacks.
+//
+// VMOptions=
+// VMOptions=--use-slow-path
+// SharedObjects=ffi_test_functions
+import 'dart:io';
+import 'dart:ffi';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+
+import 'callback_tests_utils.dart';
+import 'dylib_utils.dart';
+
+final testLibrary = dlopenPlatformSpecific("ffi_test_functions");
+
+typedef ReturnVoid = Void Function();
+void returnVoid() {}
+testCallbackWrongThread() {
+  print("Test CallbackWrongThread.");
+  CallbackTest(
+          "CallbackWrongThread", Pointer.fromFunction<ReturnVoid>(returnVoid))
+      .run();
+}
+
+testCallbackOutsideIsolate() {
+  print("Test CallbackOutsideIsolate.");
+  CallbackTest("CallbackOutsideIsolate",
+          Pointer.fromFunction<ReturnVoid>(returnVoid))
+      .run();
+}
+
+isolateHelper(int callbackPointer) {
+  final Pointer<Void> ptr = Pointer.fromAddress(callbackPointer);
+  final NativeCallbackTestFn tester =
+      testLibrary.lookupFunction<NativeCallbackTest, NativeCallbackTestFn>(
+          "TestCallbackWrongIsolate");
+  Expect.equals(0, tester(ptr));
+}
+
+testCallbackWrongIsolate() async {
+  final int callbackPointer =
+      Pointer.fromFunction<ReturnVoid>(returnVoid).address;
+  final ReceivePort exitPort = ReceivePort();
+  await Isolate.spawn(isolateHelper, callbackPointer,
+      errorsAreFatal: true, onExit: exitPort.sendPort);
+  await exitPort.first;
+}
+
+void main() async {
+  // These tests terminate the process after successful completion, so we have
+  // to run them separately.
+  //
+  // Since they use signal handlers they only run on Linux.
+  if (Platform.isLinux && !const bool.fromEnvironment("dart.vm.product")) {
+    testCallbackWrongThread(); //# 01: ok
+    testCallbackOutsideIsolate(); //# 02: ok
+    await testCallbackWrongIsolate(); //# 03: ok
+  }
+}
diff --git a/tests/ffi_2/vmspecific_function_callbacks_negative_test.dart b/tests/ffi_2/vmspecific_function_callbacks_negative_test.dart
new file mode 100644
index 0000000..067cec4
--- /dev/null
+++ b/tests/ffi_2/vmspecific_function_callbacks_negative_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers with callbacks.
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+final DynamicLibrary testLibrary = dlopenPlatformSpecific("ffi_test_functions");
+
+// Correct type of exceptionalReturn argument to Pointer.fromFunction.
+double testExceptionalReturn() {
+  Pointer.fromFunction<Double Function()>(returnVoid, null); //# 59: compile-time error
+  Pointer.fromFunction<Void Function()>(returnVoid, 0); //# 60: compile-time error
+  Pointer.fromFunction<Double Function()>(testExceptionalReturn, "abc"); //# 61: compile-time error
+  Pointer.fromFunction<Double Function()>(testExceptionalReturn, 0); //# 62: compile-time error
+  Pointer.fromFunction<Double Function()>(testExceptionalReturn); //# 63: compile-time error
+
+  return 0.0; // not used
+}
+
+void main() {
+  testExceptionalReturn();
+}
diff --git a/tests/ffi_2/vmspecific_function_callbacks_test.dart b/tests/ffi_2/vmspecific_function_callbacks_test.dart
new file mode 100644
index 0000000..99a036b
--- /dev/null
+++ b/tests/ffi_2/vmspecific_function_callbacks_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-testing-pragmas --enable-isolate-groups
+// VMOptions=--enable-testing-pragmas --no-enable-isolate-groups
+//
+// Dart test program for testing dart:ffi function pointers with callbacks.
+//
+// VMOptions=--enable-testing-pragmas
+// VMOptions=--enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas
+// VMOptions=--use-slow-path --enable-testing-pragmas --stacktrace-every=100
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code
+// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'ffi_test_helpers.dart';
+import 'callback_tests_utils.dart';
+import 'dylib_utils.dart';
+
+typedef ReturnVoid = Void Function();
+
+final testLibrary = dlopenPlatformSpecific("ffi_test_functions");
+
+void testGC() {
+  triggerGc();
+}
+
+typedef WaitForHelperNative = Void Function(Pointer<Void>);
+typedef WaitForHelper = void Function(Pointer<Void>);
+
+void waitForHelper(Pointer<Void> helper) {
+  print("helper: $helper");
+  testLibrary.lookupFunction<WaitForHelperNative, WaitForHelper>(
+      "WaitForHelper")(helper);
+}
+
+final testcases = [
+  CallbackTest("GC", Pointer.fromFunction<ReturnVoid>(testGC)),
+  CallbackTest("UnprotectCode",
+      Pointer.fromFunction<WaitForHelperNative>(waitForHelper)),
+];
+
+const double zeroPointZero = 0.0;
+
+// Correct type of exceptionalReturn argument to Pointer.fromFunction.
+double testExceptionalReturn() {
+  Pointer.fromFunction<Double Function()>(testExceptionalReturn, 0.0);
+  Pointer.fromFunction<Double Function()>(testExceptionalReturn, zeroPointZero);
+
+  return 0.0;
+}
+
+void main() {
+  testExceptionalReturn();
+
+  testcases.forEach((t) => t.run());
+}
diff --git a/tests/ffi_2/vmspecific_function_gc_test.dart b/tests/ffi_2/vmspecific_function_gc_test.dart
new file mode 100644
index 0000000..e104bcc
--- /dev/null
+++ b/tests/ffi_2/vmspecific_function_gc_test.dart
@@ -0,0 +1,121 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--deterministic --optimization-counter-threshold=500 --enable-testing-pragmas
+// VMOptions=--deterministic --optimization-counter-threshold=-1 --enable-testing-pragmas
+// VMOptions=--deterministic --optimization-counter-threshold=500 --enable-testing-pragmas --no-dual-map-code --write-protect-code
+// VMOptions=--deterministic --optimization-counter-threshold=-1 --enable-testing-pragmas --no-dual-map-code --write-protect-code
+// VMOptions=--enable-testing-pragmas --no-dual-map-code --write-protect-code
+// VMOptions=--enable-testing-pragmas --no-dual-map-code --write-protect-code --stacktrace-every=100
+//
+// Dart test program for stress-testing boxing and GC in return paths from FFI
+// trampolines.
+//
+// NOTE: This test does not produce useful stderr when it fails because the
+// stderr is redirected to a file for reflection.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi' as ffi;
+import "package:expect/expect.dart";
+import 'ffi_test_helpers.dart';
+
+main() async {
+  testBoxInt64();
+  testBoxInt32();
+  testBoxDouble();
+  testBoxPointer();
+  testAllocateInNative();
+  testRegress37069();
+  testWriteProtection();
+}
+
+typedef NativeNullaryOp64 = ffi.Int64 Function();
+typedef NativeNullaryOp32 = ffi.Int32 Function();
+typedef NativeNullaryOpDouble = ffi.Double Function();
+typedef NativeNullaryOpPtr = ffi.Pointer<ffi.Void> Function();
+typedef NativeUnaryOp = ffi.Void Function(ffi.Uint64);
+typedef NativeUndenaryOp = ffi.Uint64 Function(
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64,
+    ffi.Uint64);
+typedef NullaryOp = int Function();
+typedef NullaryOpDbl = double Function();
+typedef NullaryOpPtr = ffi.Pointer<ffi.Void> Function();
+typedef UnaryOp = void Function(int);
+typedef UndenaryOp = int Function(
+    int, int, int, int, int, int, int, int, int, int, int);
+
+//// These functions return values that require boxing into different types.
+
+final minInt64 =
+    ffiTestFunctions.lookupFunction<NativeNullaryOp64, NullaryOp>("MinInt64");
+
+// Forces boxing into Mint on all platforms.
+void testBoxInt64() {
+  Expect.equals(0x8000000000000000, minInt64());
+}
+
+NullaryOp minInt32 =
+    ffiTestFunctions.lookupFunction<NativeNullaryOp32, NullaryOp>("MinInt32");
+
+// Forces boxing into Mint on 32-bit platforms only.
+void testBoxInt32() {
+  Expect.equals(-0x80000000, minInt32());
+}
+
+final smallDouble = ffiTestFunctions
+    .lookupFunction<NativeNullaryOpDouble, NullaryOpDbl>("SmallDouble");
+
+// Forces boxing into Double.
+void testBoxDouble() {
+  Expect.equals(0x80000000 * -1.0, smallDouble());
+}
+
+final largePointer = ffiTestFunctions
+    .lookupFunction<NativeNullaryOpPtr, NullaryOpPtr>("LargePointer");
+
+// Forces boxing into ffi.Pointer and ffi.Mint.
+void testBoxPointer() {
+  ffi.Pointer pointer = largePointer();
+  if (ffi.sizeOf<ffi.Pointer>() == 4) {
+    Expect.equals(0x82000000, pointer.address);
+  } else {
+    Expect.equals(0x8100000082000000, pointer.address);
+  }
+}
+
+// Test GC in the FFI call path by calling a C function which triggers GC
+// directly.
+void testAllocateInNative() => triggerGc();
+
+// This also works as a regression test for 37176.
+
+final regress37069 = ffiTestFunctions
+    .lookupFunction<NativeUndenaryOp, UndenaryOp>("Regress37069");
+
+// Test GC in the FFI call path by calling a C function which triggers GC
+// directly.
+void testRegress37069() {
+  regress37069(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+}
+
+final unprotectCode = ffiTestFunctions.lookupFunction<
+    ffi.Pointer<ffi.Void> Function(ffi.Pointer<ffi.Void>),
+    ffi.Pointer<ffi.Void> Function(ffi.Pointer<ffi.Void>)>("TestUnprotectCode");
+final waitForHelper = ffiTestFunctions.lookupFunction<
+    ffi.Void Function(ffi.Pointer<ffi.Void>),
+    void Function(ffi.Pointer<ffi.Void>)>("WaitForHelper");
+
+void testWriteProtection() {
+  waitForHelper(unprotectCode(ffi.nullptr));
+}
diff --git a/tests/ffi_2/vmspecific_function_test.dart b/tests/ffi_2/vmspecific_function_test.dart
new file mode 100644
index 0000000..00ea922
--- /dev/null
+++ b/tests/ffi_2/vmspecific_function_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi function pointers.
+//
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=10
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+// VMOptions=--write-protect-code --no-dual-map-code
+// VMOptions=--write-protect-code --no-dual-map-code --use-slow-path
+// VMOptions=--write-protect-code --no-dual-map-code --stacktrace-every=100
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+import "package:ffi/ffi.dart";
+import "package:expect/expect.dart";
+
+void main() {
+  for (int i = 0; i < 100; ++i) {
+    testLookupFunctionPointerNativeType();
+  }
+}
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+typedef NativeTypeNFT = Pointer<NativeType> Function(
+    Pointer<Pointer<NativeType>>, Int8);
+typedef NativeTypeFT = Pointer<NativeType> Function(
+    Pointer<Pointer<NativeType>>, int);
+
+void testLookupFunctionPointerNativeType() {
+  // The function signature does not match up, but that does not matter since
+  // this test does not use the trampoline.
+  ffiTestFunctions.lookupFunction<NativeTypeNFT, NativeTypeFT>("LargePointer");
+}
diff --git a/tests/ffi_2/vmspecific_highmem_32bit_test.dart b/tests/ffi_2/vmspecific_highmem_32bit_test.dart
new file mode 100644
index 0000000..eeee5fa
--- /dev/null
+++ b/tests/ffi_2/vmspecific_highmem_32bit_test.dart
@@ -0,0 +1,133 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file
+
+import 'dart:ffi';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+import 'ffi_test_helpers.dart';
+
+// void* mmap(void* addr, size_t length,
+//            int prot, int flags,
+//            int fd, off_t offset)
+typedef MMapNative = Pointer<Uint8> Function(Pointer<Uint8> address, IntPtr len,
+    IntPtr prot, IntPtr flags, IntPtr fd, IntPtr offset);
+typedef MMap = Pointer<Uint8> Function(
+    Pointer<Uint8> address, int len, int prot, int flags, int fd, int offset);
+final mmap = processSymbols.lookupFunction<MMapNative, MMap>('mmap');
+
+// int munmap(void *addr, size_t length)
+typedef MUnMapNative = IntPtr Function(Pointer<Uint8> address, IntPtr len);
+typedef MUnMap = int Function(Pointer<Uint8> address, int len);
+final munmap = processSymbols.lookupFunction<MUnMapNative, MUnMap>('munmap');
+
+final processSymbols = DynamicLibrary.process();
+
+const int kProtRead = 1;
+const int kProtWrite = 2;
+
+const int kMapPrivate = 2;
+const int kMapFixed = 16;
+final int kMapAnonymous = Platform.isMacOS ? 0x1000 : 0x20;
+
+const int kMapFailed = -1;
+
+// On 32-bit platforms the upper 4 bytes should be ignored.
+const int kIgnoreBytesPositive = 0x1122334400000000;
+const int kIgnoreBytesNegative = 0xffddccbb00000000;
+
+void swapBytes(
+    Pointer<Uint8> memoryView, int indexOffset, int indexA, int indexB) {
+  final int oldA = memoryView[indexOffset + indexA];
+  memoryView[indexOffset + indexA] = memoryView[indexOffset + indexB];
+  memoryView[indexOffset + indexB] = oldA;
+}
+
+void testLoadsAndStores(int indexOffset, Pointer<Uint8> memory) {
+  for (int i = 0; i < 10; ++i) {
+    memory[indexOffset + i] = 10 + i;
+  }
+  Expect.listEquals(<int>[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
+      memory.offsetBy(indexOffset).asTypedList(10));
+
+  for (int i = 0; i < 9; ++i) {
+    swapBytes(memory, indexOffset + 0, i, i + 1);
+  }
+  Expect.listEquals(<int>[11, 12, 13, 14, 15, 16, 17, 18, 19, 10],
+      memory.offsetBy(indexOffset).asTypedList(10));
+  for (int i = 0; i < 9; ++i) {
+    swapBytes(memory, indexOffset + kIgnoreBytesPositive, i, i + 1);
+  }
+  Expect.listEquals(<int>[12, 13, 14, 15, 16, 17, 18, 19, 10, 11],
+      memory.offsetBy(indexOffset).asTypedList(10));
+  for (int i = 0; i < 9; ++i) {
+    swapBytes(memory, indexOffset + kIgnoreBytesNegative, i, i + 1);
+  }
+  Expect.listEquals(<int>[13, 14, 15, 16, 17, 18, 19, 10, 11, 12],
+      memory.offsetBy(indexOffset).asTypedList(10));
+}
+
+void testOnHighOrLowMemory(Pointer<Uint8> memory, int indexOffset) {
+  testLoadsAndStores(indexOffset, memory);
+  testLoadsAndStores(indexOffset, memory.offsetBy(5));
+  testLoadsAndStores(indexOffset, memory.offsetBy(-5));
+  testLoadsAndStores(indexOffset, memory.offsetBy(kIgnoreBytesPositive + 5));
+  testLoadsAndStores(indexOffset, memory.offsetBy(kIgnoreBytesNegative + 5));
+  testLoadsAndStores(indexOffset, memory.offsetBy(kIgnoreBytesPositive - 5));
+  testLoadsAndStores(indexOffset, memory.offsetBy(kIgnoreBytesNegative - 5));
+  final m2 = Pointer<Uint8>.fromAddress(kIgnoreBytesPositive + memory.address);
+  Expect.equals(memory, m2); //# 01: ok
+  Expect.equals(memory.address, m2.address); //# 01: ok
+  testLoadsAndStores(indexOffset, m2);
+  final m3 = Pointer<Uint8>.fromAddress(kIgnoreBytesNegative + memory.address);
+  Expect.equals(memory, m3); //# 01: ok
+  Expect.equals(memory.address, m3.address); //# 01: ok
+  testLoadsAndStores(indexOffset, m3);
+}
+
+const int kPageSize = 4096;
+
+withMMapedAddress(
+    Pointer<Uint8> fixedAddress, void fun(Pointer<Uint8> address)) {
+  final result = mmap(fixedAddress, kPageSize, kProtRead | kProtWrite,
+      kMapAnonymous | kMapFixed | kMapPrivate, 0, 0);
+  if (result.address == kMapFailed) {
+    throw 'Could not mmap @0x${fixedAddress.address.toRadixString(16)}!';
+  }
+  Expect.equals(fixedAddress, result); //# 01: ok
+  Expect.equals(fixedAddress.address, result.address); //# 01: ok
+  try {
+    fun(result);
+  } finally {
+    if (munmap(result, kPageSize) != 0) {
+      throw 'Failed to unmap memory!';
+    }
+  }
+}
+
+main() {
+  final bool is32BitProcess = sizeOf<Pointer<Uint8>>() == 4;
+
+  // User space processes usually have
+  //   * the lower 3 GB available on Linux/Android on 32bit OS
+  //   * full 4 GB available on Linux/Android on 64bit OS
+  //   * full 4 GB available on MacOS
+  // So we choose high and low addresses that fall into lower 3 GB.
+  if (is32BitProcess && !Platform.isWindows) {
+    final highMemoryAddress = Pointer<Uint8>.fromAddress(0xaaaa0000);
+    final lowMemoryAddress = Pointer<Uint8>.fromAddress(0x11110000);
+    withMMapedAddress(lowMemoryAddress, (Pointer<Uint8> lowMemory) {
+      withMMapedAddress(highMemoryAddress, (Pointer<Uint8> highMemory) {
+        testOnHighOrLowMemory(lowMemory, 2048);
+        testOnHighOrLowMemory(highMemory, 2048);
+        testOnHighOrLowMemory(
+            lowMemory, 2048 + highMemory.address - lowMemory.address);
+        testOnHighOrLowMemory(
+            highMemory, 2048 + lowMemory.address - highMemory.address);
+      });
+    });
+  }
+}
diff --git a/tests/ffi/vmspecific_null_test.dart b/tests/ffi_2/vmspecific_null_test.dart
similarity index 100%
rename from tests/ffi/vmspecific_null_test.dart
rename to tests/ffi_2/vmspecific_null_test.dart
diff --git a/tests/ffi_2/vmspecific_object_gc_test.dart b/tests/ffi_2/vmspecific_object_gc_test.dart
new file mode 100644
index 0000000..c1d9f9c
--- /dev/null
+++ b/tests/ffi_2/vmspecific_object_gc_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Tests GC of Pointer objects.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+
+import 'dylib_utils.dart';
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+final triggerGc = ffiTestFunctions
+    .lookupFunction<Void Function(), void Function()>("TriggerGC");
+
+void main() async {
+  testGC();
+}
+
+dynamic bar;
+
+Future<void> testGC() async {
+  bar = Pointer<Int8>.fromAddress(11);
+
+  // Verify that the objects manufactured by 'fromAddress' can be scanned by the
+  // GC.
+  triggerGc();
+
+  Expect.equals(11, bar.address);
+}
diff --git a/tests/ffi_2/vmspecific_regress_37100_test.dart b/tests/ffi_2/vmspecific_regress_37100_test.dart
new file mode 100644
index 0000000..a819503
--- /dev/null
+++ b/tests/ffi_2/vmspecific_regress_37100_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+
+import 'dylib_utils.dart';
+
+class EVP_MD extends Struct {}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+final EVP_sha1 = ffiTestFunctions.lookupFunction<Pointer<EVP_MD> Function(),
+    Pointer<EVP_MD> Function()>('LargePointer');
+
+main() {
+  int result = EVP_sha1().address;
+  // On 32 bit only the lowest 32 bits are returned, so only test those.
+  result &= 0x00000000FFFFFFFF;
+  Expect.equals(0x0000000082000000, result);
+}
diff --git a/tests/ffi_2/vmspecific_regress_37511_callbacks_test.dart b/tests/ffi_2/vmspecific_regress_37511_callbacks_test.dart
new file mode 100644
index 0000000..0153560
--- /dev/null
+++ b/tests/ffi_2/vmspecific_regress_37511_callbacks_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi struct pointers.
+//
+// VMOptions=--deterministic --enable-testing-pragmas
+//
+// SharedObjects=ffi_test_functions
+//
+// TODO(37295): Merge this file with regress_37511_test.dart when callback
+// support lands.
+
+import 'dart:ffi';
+
+import 'ffi_test_helpers.dart';
+
+/// Estimate of how many allocations functions in `functionsToTest` do at most.
+const gcAfterNAllocationsMax = 10;
+
+void main() {
+  for (Function() f in functionsToTest) {
+    f(); // Ensure code is compiled.
+
+    for (int n = 1; n <= gcAfterNAllocationsMax; n++) {
+      collectOnNthAllocation(n);
+      f();
+    }
+  }
+}
+
+final List<Function()> functionsToTest = [
+  // Callback trampolines.
+  doFromFunction,
+  () => callbackSmallDouble(dartFunctionPointer),
+];
+
+// Callback trampoline helpers.
+typedef NativeCallbackTest = Int32 Function(Pointer);
+typedef NativeCallbackTestFn = int Function(Pointer);
+
+final callbackSmallDouble =
+    ffiTestFunctions.lookupFunction<NativeCallbackTest, NativeCallbackTestFn>(
+        "TestSimpleMultiply");
+
+typedef SimpleMultiplyType = Double Function(Double);
+double simpleMultiply(double x) => x * 1.337;
+
+final doFromFunction =
+    () => Pointer.fromFunction<SimpleMultiplyType>(simpleMultiply, 0.0);
+
+final dartFunctionPointer = doFromFunction();
diff --git a/tests/ffi_2/vmspecific_regress_37511_test.dart b/tests/ffi_2/vmspecific_regress_37511_test.dart
new file mode 100644
index 0000000..6d857e5
--- /dev/null
+++ b/tests/ffi_2/vmspecific_regress_37511_test.dart
@@ -0,0 +1,106 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi struct pointers.
+//
+// VMOptions=--deterministic --enable-testing-pragmas
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+/// Estimate of how many allocations functions in `functionsToTest` do at most.
+const gcAfterNAllocationsMax = 10;
+
+void main() {
+  for (Function() f in functionsToTest) {
+    f(); // Ensure code is compiled.
+
+    for (int n = 1; n <= gcAfterNAllocationsMax; n++) {
+      collectOnNthAllocation(n);
+      f();
+    }
+  }
+}
+
+final List<Function()> functionsToTest = [
+  // Pointer operations.
+  () => highAddressPointer.cast<Double>(),
+  () => Pointer.fromAddress(highAddressPointer.address),
+  () => highAddressPointer.address,
+  () => highAddressPointer.elementAt(1),
+  () => highAddressPointer.offsetBy(1),
+  () => highAddressPointer.asTypedList(1),
+
+  // DynamicLibrary operations.
+  doDlopen,
+  doDlsym, // Includes `asFunction`.
+  () => ffiTestFunctions.handle,
+
+  // Trampolines.
+  () => sumManyIntsOdd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, mint64bit),
+  () => sumManyDoubles(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0),
+  minInt64,
+  minInt32,
+  smallDouble,
+  largePointer,
+
+  // Callback trampolines.
+  //
+  // In regress_37511_callbacks_test.dart because callbacks are not supported
+  // in AOT yet.
+];
+
+// Pointer operation helpers.
+const mint32bit = 0xFFFFFFF0;
+const mint64bit = 0x7FFFFFFFFFFFFFF0;
+
+final int highAddress = sizeOf<IntPtr>() == 4 ? mint32bit : mint64bit;
+
+final Pointer<Int64> highAddressPointer = Pointer.fromAddress(highAddress);
+
+// Dynamic library operation helpers.
+final doDlopen = () => dlopenPlatformSpecific("ffi_test_functions");
+
+final doDlsym = () => ffiTestFunctions
+    .lookupFunction<NativeNullaryOp, NullaryOpVoid>("TriggerGC");
+
+// Trampoline helpers.
+typedef NativeUndenaryOp = IntPtr Function(IntPtr, IntPtr, IntPtr, IntPtr,
+    IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr);
+typedef UndenaryOp = int Function(
+    int, int, int, int, int, int, int, int, int, int, int);
+
+final UndenaryOp sumManyIntsOdd = ffiTestFunctions
+    .lookupFunction<NativeUndenaryOp, UndenaryOp>("SumManyIntsOdd");
+
+typedef NativeDoubleDecenaryOp = Double Function(Double, Double, Double, Double,
+    Double, Double, Double, Double, Double, Double);
+typedef DoubleDecenaryOp = double Function(double, double, double, double,
+    double, double, double, double, double, double);
+
+final DoubleDecenaryOp sumManyDoubles = ffiTestFunctions
+    .lookupFunction<NativeDoubleDecenaryOp, DoubleDecenaryOp>("SumManyDoubles");
+
+typedef NativeNullaryOp64 = Int64 Function();
+typedef NativeNullaryOp32 = Int32 Function();
+typedef NativeNullaryOpDouble = Double Function();
+typedef NullaryOpPtr = Pointer<Void> Function();
+typedef NullaryOp = int Function();
+typedef NullaryOpDbl = double Function();
+
+final minInt64 =
+    ffiTestFunctions.lookupFunction<NativeNullaryOp64, NullaryOp>("MinInt64");
+
+final minInt32 =
+    ffiTestFunctions.lookupFunction<NativeNullaryOp32, NullaryOp>("MinInt32");
+
+final smallDouble = ffiTestFunctions
+    .lookupFunction<NativeNullaryOpDouble, NullaryOpDbl>("SmallDouble");
+
+final largePointer =
+    ffiTestFunctions.lookupFunction<NullaryOpPtr, NullaryOpPtr>("LargePointer");
diff --git a/tests/ffi_2/vmspecific_regress_37780_test.dart b/tests/ffi_2/vmspecific_regress_37780_test.dart
new file mode 100644
index 0000000..a6b9f7e
--- /dev/null
+++ b/tests/ffi_2/vmspecific_regress_37780_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+final triggerGc = ffiTestFunctions
+    .lookupFunction<Void Function(), void Function()>("TriggerGC");
+
+main(List<String> args) {
+  final foo = [Float(), Double(), Uint8()];
+  triggerGc();
+  print(foo);
+}
diff --git a/tests/ffi_2/vmspecific_regress_38993_test.dart b/tests/ffi_2/vmspecific_regress_38993_test.dart
new file mode 100644
index 0000000..8c9972f
--- /dev/null
+++ b/tests/ffi_2/vmspecific_regress_38993_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Tests a compile time error that should not crash the analyzer or CFE.
+
+import "dart:ffi";
+
+class C extends Struct {
+  dynamic x; //# 1: compile-time error
+}
+
+main() {}
diff --git a/tests/ffi_2/vmspecific_send_port_id_test.dart b/tests/ffi_2/vmspecific_send_port_id_test.dart
new file mode 100644
index 0000000..abe7ccc
--- /dev/null
+++ b/tests/ffi_2/vmspecific_send_port_id_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+typedef Dart_PostIntegerNFT = IntPtr Function(Int64 port, Int64 message);
+typedef Dart_PostIntegerFT = int Function(int port, int message);
+
+main() async {
+  const int message = 112344556677888;
+
+  final completer = Completer();
+
+  final receivePort = ReceivePort()
+    ..listen((receivedMessage) => completer.complete(receivedMessage));
+
+  final executableSymbols = DynamicLibrary.executable();
+
+  final postInteger =
+      executableSymbols.lookupFunction<Dart_PostIntegerNFT, Dart_PostIntegerFT>(
+          "Dart_PostInteger");
+
+  // Issue(dartbug.com/38545): The dart:ffi doesn't have a bool type yet.
+  final bool success =
+      postInteger(receivePort.sendPort.nativePort, message) != 0;
+  Expect.isTrue(success);
+
+  final postedMessage = await completer.future;
+  Expect.equals(message, postedMessage);
+
+  receivePort.close();
+}
diff --git a/tests/ffi_2/vmspecific_static_checks_test.dart b/tests/ffi_2/vmspecific_static_checks_test.dart
new file mode 100644
index 0000000..410f33f
--- /dev/null
+++ b/tests/ffi_2/vmspecific_static_checks_test.dart
@@ -0,0 +1,449 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Dart test program for testing dart:ffi extra checks
+//
+// SharedObjects=ffi_test_dynamic_library
+
+import 'dart:ffi';
+
+import "package:ffi/ffi.dart";
+
+import 'dylib_utils.dart';
+
+void main() {
+  testGetGeneric();
+  testGetGeneric2();
+  testGetVoid();
+  testGetNativeFunction();
+  testGetNativeType();
+  testGetTypeMismatch();
+  testSetGeneric();
+  testSetGeneric2();
+  testSetVoid();
+  testSetNativeFunction();
+  testSetNativeType();
+  testSetTypeMismatch();
+  testAsFunctionGeneric();
+  testAsFunctionGeneric2();
+  testAsFunctionWrongNativeFunctionSignature();
+  testAsFunctionTypeMismatch();
+  testFromFunctionGeneric();
+  testFromFunctionGeneric2();
+  testFromFunctionWrongNativeFunctionSignature();
+  testFromFunctionTypeMismatch();
+  testFromFunctionClosure();
+  testFromFunctionTearOff();
+  testFromFunctionAbstract();
+  testLookupFunctionGeneric();
+  testLookupFunctionGeneric2();
+  testLookupFunctionWrongNativeFunctionSignature();
+  testLookupFunctionTypeMismatch();
+  testNativeFunctionSignatureInvalidReturn();
+  testNativeFunctionSignatureInvalidParam();
+  testNativeFunctionSignatureInvalidOptionalNamed();
+  testNativeFunctionSignatureInvalidOptionalPositional();
+}
+
+typedef Int8UnOp = Int8 Function(Int8);
+typedef IntUnOp = int Function(int);
+
+void testGetGeneric() {
+  int generic(Pointer p) {
+    int result;
+    result = p.value; //# 20: compile-time error
+    return result;
+  }
+
+  Pointer<Int8> p = allocate();
+  p.value = 123;
+  Pointer loseType = p;
+  generic(loseType);
+  free(p);
+}
+
+void testGetGeneric2() {
+  T generic<T extends Object>() {
+    Pointer<Int8> p = allocate();
+    p.value = 123;
+    T result;
+    result = p.value; //# 21: compile-time error
+    free(p);
+    return result;
+  }
+
+  generic<int>();
+}
+
+void testGetVoid() {
+  Pointer<IntPtr> p1 = allocate();
+  Pointer<Void> p2 = p1.cast();
+
+  p2.value; //# 22: compile-time error
+
+  free(p1);
+}
+
+void testGetNativeFunction() {
+  Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
+  IntUnOp f = p.value; //# 23: compile-time error
+}
+
+void testGetNativeType() {
+  // Is it possible to obtain a Pointer<NativeType> at all?
+}
+
+void testGetTypeMismatch() {
+  Pointer<Pointer<Int16>> p = allocate();
+  Pointer<Int16> typedNull = nullptr;
+  p.value = typedNull;
+
+  // this fails to compile due to type mismatch
+  Pointer<Int8> p2 = p.value; //# 25: compile-time error
+
+  free(p);
+}
+
+void testSetGeneric() {
+  void generic(Pointer p) {
+    p.value = 123; //# 26: compile-time error
+  }
+
+  Pointer<Int8> p = allocate();
+  p.value = 123;
+  Pointer loseType = p;
+  generic(loseType);
+  free(p);
+}
+
+void testSetGeneric2() {
+  void generic<T extends Object>(T arg) {
+    Pointer<Int8> p = allocate();
+    p.value = arg; //# 27: compile-time error
+    free(p);
+  }
+
+  generic<int>(123);
+}
+
+void testSetVoid() {
+  Pointer<IntPtr> p1 = allocate();
+  Pointer<Void> p2 = p1.cast();
+
+  p2.value = 1234; //# 28: compile-time error
+
+  free(p1);
+}
+
+void testSetNativeFunction() {
+  Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
+  IntUnOp f = (a) => a + 1;
+  p.value = f; //# 29: compile-time error
+}
+
+void testSetNativeType() {
+  // Is it possible to obtain a Pointer<NativeType> at all?
+}
+
+void testSetTypeMismatch() {
+  // the pointer to pointer types must match up
+  Pointer<Int8> pHelper = allocate();
+  pHelper.value = 123;
+
+  Pointer<Pointer<Int16>> p = allocate();
+
+  // this fails to compile due to type mismatch
+  p.value = pHelper; //# 40: compile-time error
+
+  free(pHelper);
+  free(p);
+}
+
+void testAsFunctionGeneric() {
+  T generic<T extends Function>() {
+    Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
+    Function f;
+    f = p.asFunction<T>(); //# 11: compile-time error
+    return f;
+  }
+
+  generic<IntUnOp>();
+}
+
+void testAsFunctionGeneric2() {
+  generic(Pointer<NativeFunction> p) {
+    Function f;
+    f = p.asFunction<IntUnOp>(); //# 12: compile-time error
+    return f;
+  }
+
+  Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
+  generic(p);
+}
+
+void testAsFunctionWrongNativeFunctionSignature() {
+  Pointer<NativeFunction<IntUnOp>> p;
+  Function f = p.asFunction<IntUnOp>(); //# 13: compile-time error
+}
+
+typedef IntBinOp = int Function(int, int);
+
+void testAsFunctionTypeMismatch() {
+  Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
+  IntBinOp f = p.asFunction(); //# 14: compile-time error
+}
+
+typedef NativeDoubleUnOp = Double Function(Double);
+typedef DoubleUnOp = double Function(double);
+
+double myTimesThree(double d) => d * 3;
+
+int myTimesFour(int i) => i * 4;
+
+void testFromFunctionGeneric() {
+  Pointer<NativeFunction> generic<T extends Function>(T f) {
+    Pointer<NativeFunction<NativeDoubleUnOp>> result;
+    result = Pointer.fromFunction(f); //# 70: compile-time error
+    return result;
+  }
+
+  generic(myTimesThree);
+}
+
+void testFromFunctionGeneric2() {
+  Pointer<NativeFunction<T>> generic<T extends Function>() {
+    Pointer<NativeFunction<T>> result;
+    result = Pointer.fromFunction(myTimesThree); //# 71: compile-time error
+    return result;
+  }
+
+  generic<NativeDoubleUnOp>();
+}
+
+void testFromFunctionWrongNativeFunctionSignature() {
+  Pointer.fromFunction<IntUnOp>(myTimesFour); //# 72: compile-time error
+}
+
+void testFromFunctionTypeMismatch() {
+  Pointer<NativeFunction<NativeDoubleUnOp>> p;
+  p = Pointer.fromFunction(myTimesFour); //# 73: compile-time error
+}
+
+void testFromFunctionClosure() {
+  DoubleUnOp someClosure = (double z) => z / 27.0;
+  Pointer<NativeFunction<NativeDoubleUnOp>> p;
+  p = Pointer.fromFunction(someClosure); //# 74: compile-time error
+}
+
+class X {
+  double tearoff(double d) => d / 27.0;
+}
+
+void testFromFunctionTearOff() {
+  DoubleUnOp fld = X().tearoff;
+  Pointer<NativeFunction<NativeDoubleUnOp>> p;
+  p = Pointer.fromFunction(fld); //# 75: compile-time error
+}
+
+void testFromFunctionAbstract() {
+  Pointer.fromFunction<Function>(//# 76: compile-time error
+      testFromFunctionAbstract); //# 76: compile-time error
+}
+
+void testLookupFunctionGeneric() {
+  Function generic<T extends Function>() {
+    DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+    Function result;
+    result = l.lookupFunction<T, DoubleUnOp>("cos"); //# 15: compile-time error
+    return result;
+  }
+
+  generic<NativeDoubleUnOp>();
+}
+
+void testLookupFunctionGeneric2() {
+  Function generic<T extends Function>() {
+    DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+    Function result;
+    result = //# 16: compile-time error
+        l.lookupFunction<NativeDoubleUnOp, T>("cos"); //# 16: compile-time error
+    return result;
+  }
+
+  generic<DoubleUnOp>();
+}
+
+void testLookupFunctionWrongNativeFunctionSignature() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  l.lookupFunction<IntUnOp, IntUnOp>("cos"); //# 17: compile-time error
+}
+
+void testLookupFunctionTypeMismatch() {
+  DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
+  l.lookupFunction<NativeDoubleUnOp, IntUnOp>("cos"); //# 18: compile-time error
+}
+
+// TODO(dacoharkes): make the next 4 test compile errors
+typedef Invalid1 = int Function(Int8);
+typedef Invalid2 = Int8 Function(int);
+typedef Invalid3 = Int8 Function({Int8 named});
+typedef Invalid4 = Int8 Function([Int8 positional]);
+
+void testNativeFunctionSignatureInvalidReturn() {
+  // Pointer<NativeFunction<Invalid1>> p = fromAddress(999);
+}
+
+void testNativeFunctionSignatureInvalidParam() {
+  // Pointer<NativeFunction<Invalid2>> p = fromAddress(999);
+}
+
+void testNativeFunctionSignatureInvalidOptionalNamed() {
+  // Pointer<NativeFunction<Invalid3>> p = fromAddress(999);
+}
+
+void testNativeFunctionSignatureInvalidOptionalPositional() {
+  // Pointer<NativeFunction<Invalid4>> p = fromAddress(999);
+}
+
+// error on missing field annotation
+class TestStruct extends Struct {
+  @Double()
+  double x;
+
+  double y; //# 50: compile-time error
+}
+
+// Cannot extend structs.
+class TestStruct3 extends TestStruct {} //# 52: compile-time error
+
+// error on double annotation
+class TestStruct4 extends Struct {
+  @Double()
+  @Double() //# 53: compile-time error
+  double z;
+}
+
+// error on annotation not matching up
+class TestStruct5 extends Struct {
+  @Int64() //# 54: compile-time error
+  double z; //# 54: compile-time error
+}
+
+// error on annotation not matching up
+class TestStruct6 extends Struct {
+  @Void() //# 55: compile-time error
+  double z; //# 55: compile-time error
+}
+
+// error on annotation not matching up
+class TestStruct7 extends Struct {
+  @NativeType() //# 56: compile-time error
+  double z; //# 56: compile-time error
+}
+
+// error on field initializer on field
+class TestStruct8 extends Struct {
+  @Double() //# 57: compile-time error
+  double z = 10.0; //# 57: compile-time error
+}
+
+// error on field initializer in constructor
+class TestStruct9 extends Struct {
+  @Double()
+  double z;
+
+  TestStruct9() : z = 0.0 {} //# 58: compile-time error
+}
+
+// Struct classes may not be generic.
+class TestStruct11<T> extends //# 60: compile-time error
+    Struct<TestStruct11<dynamic>> {} //# 60: compile-time error
+
+// Structs may not appear inside structs (currently, there is no suitable
+// annotation).
+class TestStruct12 extends Struct {
+  @Pointer //# 61: compile-time error
+  TestStruct9 struct; //# 61: compile-time error
+}
+
+class DummyAnnotation {
+  const DummyAnnotation();
+}
+
+// Structs fields may have other annotations.
+class TestStruct13 extends Struct {
+  @DummyAnnotation()
+  @Double()
+  double z;
+}
+
+// Cannot extend native types.
+
+class ENativeType extends NativeType {} //# 90: compile-time error
+
+class EInt8 extends Int8 {} //# 91: compile-time error
+
+class EInt16 extends Int16 {} //# 92: compile-time error
+
+class EInt32 extends Int32 {} //# 93: compile-time error
+
+class EInt64 extends Int64 {} //# 94: compile-time error
+
+class EUint8 extends Uint8 {} //# 95: compile-time error
+
+class EUint16 extends Uint16 {} //# 96: compile-time error
+
+class EUint32 extends Uint32 {} //# 97: compile-time error
+
+class EUint64 extends Uint64 {} //# 98: compile-time error
+
+class EIntPtr extends IntPtr {} //# 99: compile-time error
+
+class EFloat extends Float {} //# 910: compile-time error
+
+class EDouble extends Double {} //# 911: compile-time error
+
+class EVoid extends Void {} //# 912: compile-time error
+
+class ENativeFunction extends NativeFunction {} //# 913: compile-time error
+
+class EPointer extends Pointer {} //# 914: compile-time error
+
+// Cannot implement native natives or Struct.
+
+// Cannot extend native types.
+
+class INativeType implements NativeType {} //# 80: compile-time error
+
+class IInt8 implements Int8 {} //# 81: compile-time error
+
+class IInt16 implements Int16 {} //# 82: compile-time error
+
+class IInt32 implements Int32 {} //# 83: compile-time error
+
+class IInt64 implements Int64 {} //# 84: compile-time error
+
+class IUint8 implements Uint8 {} //# 85: compile-time error
+
+class IUint16 implements Uint16 {} //# 86: compile-time error
+
+class IUint32 implements Uint32 {} //# 87: compile-time error
+
+class IUint64 implements Uint64 {} //# 88: compile-time error
+
+class IIntPtr implements IntPtr {} //# 88: compile-time error
+
+class IFloat implements Float {} //# 810: compile-time error
+
+class IDouble implements Double {} //# 811: compile-time error
+
+class IVoid implements Void {} //# 812: compile-time error
+
+class INativeFunction //# 813: compile-time error
+    implements //# 813: compile-time error
+        NativeFunction {} //# 813: compile-time error
+
+class IPointer implements Pointer {} //# 814: compile-time error
+
+class IStruct implements Struct {} //# 815: compile-time error
diff --git a/tests/ffi_2/vmspecific_variance_function_checks_test.dart b/tests/ffi_2/vmspecific_variance_function_checks_test.dart
new file mode 100644
index 0000000..c17488c
--- /dev/null
+++ b/tests/ffi_2/vmspecific_variance_function_checks_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+
+// ============================================
+// Tests checks on Dart to native (asFunction).
+// ============================================
+
+typedef Int64PointerParamOpDart = void Function(Pointer<Int64>);
+typedef Int64PointerParamOp = Void Function(Pointer<Int64>);
+typedef Int64PointerReturnOp = Pointer<Int64> Function();
+typedef NaTyPointerReturnOp = Pointer<NativeType> Function();
+
+final paramOpName = "NativeTypePointerParam";
+final returnOpName = "NativeTypePointerReturn";
+
+final DynamicLibrary ffiTestFunctions =
+    dlopenPlatformSpecific("ffi_test_functions");
+
+final p1 =
+    ffiTestFunctions.lookup<NativeFunction<Int64PointerParamOp>>(paramOpName);
+final nonInvariantBinding1 = //# 1:  compile-time error
+    p1.asFunction<NaTyPointerParamOpDart>(); //# 1:  continued
+
+final p2 =
+    ffiTestFunctions.lookup<NativeFunction<NaTyPointerReturnOp>>(returnOpName);
+final nonInvariantBinding2 = //# 2:  compile-time error
+    p2.asFunction<Int64PointerReturnOp>(); //# 2:  continued
+
+final p3 = Pointer<
+    NativeFunction<
+        Pointer<NativeFunction<Pointer<NativeType> Function()>>
+            Function()>>.fromAddress(0x1234);
+final f3 = p3 //# 10:  compile-time error
+    .asFunction< //# 10:  continued
+        Pointer< //# 10:  continued
+                NativeFunction< //# 10:  continued
+                    Pointer<Int8> Function()>> //# 10:  continued
+            Function()>(); //# 10:  continued
+
+// ===========================================================
+// Test check on callbacks from native to Dart (fromFunction).
+// ===========================================================
+
+void naTyPointerParamOp(Pointer<NativeType> p) {
+  final Pointer<Int8> asInt8 = p.cast();
+  asInt8.value = 42;
+}
+
+Pointer<Int64> int64PointerReturnOp() {
+  return Pointer.fromAddress(0x13370000);
+}
+
+final implictDowncast1 = //# 3:  compile-time error
+    Pointer.fromFunction<Int64PointerParamOp>(//# 3:  continued
+        naTyPointerParamOp); //# 3:  continued
+final implictDowncast2 = //# 4:  compile-time error
+    Pointer.fromFunction<NaTyPointerReturnOp>(//# 4:  continued
+        int64PointerReturnOp); //# 4:  continued
+
+void main() {}
diff --git a/tests/language/await_type_error_test.dart b/tests/language/await_type_error_test.dart
new file mode 100644
index 0000000..b838fcc
--- /dev/null
+++ b/tests/language/await_type_error_test.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+main() async {
+  int i = 1;
+  Future<int> fi = Future<int>.value(i);
+  Future<Future<int>> ffi = Future<Future<int>>.value(fi);
+  Future<Future<Future<int>>> fffi = Future<Future<Future<int>>>.value(ffi);
+
+  String v1 = await i;
+  //                ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  String v2 = await fi;
+  //                ^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  int v3 = await ffi;
+  //             ^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<int> v4 = await fffi;
+  //                     ^^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<int> v5 = await i;
+  //                     ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<int> v6 = await fi;
+  //                     ^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<FutureOr<int>> v7 = await fi;
+  //                               ^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<Future<int>> v8 = await ffi;
+  //                             ^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language/await_type_test.dart b/tests/language/await_type_test.dart
new file mode 100644
index 0000000..dd3a765
--- /dev/null
+++ b/tests/language/await_type_test.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void main() async {
+  asyncStart();
+
+  var fi = Future<int>.value(1);
+  var ffi = Future<Future<int>>.value(fi);
+
+  // Sanity check.
+  Expect.equals(type<int>(), typeOf(1));
+
+  {
+    int v = 1; //                          // Variable with type T.
+    var f = await v; //                    // Variable with type FLATTEN(T).
+    Expect.equals(type<int>(), typeOf(f)); // Dynamic check of static type of f.
+    int s = f; //                          // Static check upper bound of f.
+    f = 1; //                              // Static check lower bound of f.
+    s.toString(); //                       // Avoid "unused variable" warning.
+  }
+
+  {
+    Future<int> v = fi;
+    var f = await v;
+    Expect.equals(type<int>(), typeOf(f));
+    int s = f;
+    f = 1;
+    s.toString();
+  }
+
+  {
+    Future<Future<int>> v = ffi;
+    var f = await v;
+    Expect.equals(type<Future<int>>(), typeOf(f));
+    Future<int> s = f;
+    f = fi;
+    s.toString();
+  }
+
+  {
+    FutureOr<int> v = 1;
+    var f = await v;
+    Expect.equals(type<int>(), typeOf(f));
+    int s = f;
+    f = 1;
+    s.toString();
+  }
+
+  {
+    FutureOr<Future<int>> v = fi;
+    var f = await v;
+    Expect.equals(type<Future<int>>(), typeOf(f));
+    Future<int> s = f;
+    f = fi;
+    s.toString();
+  }
+
+  {
+    Future<FutureOr<int>> v = fi;
+    var f = await v;
+    Expect.equals(type<FutureOr<int>>(), typeOf(f));
+    FutureOr<int> s = f;
+    f = 1;
+    f = fi;
+    s.toString();
+  }
+
+  {
+    FutureOr<FutureOr<int>> v = 1;
+    var f = await v;
+    Expect.equals(type<FutureOr<int>>(), typeOf(f));
+    FutureOr<int> s = f;
+    f = 1;
+    f = fi;
+    s.toString();
+  }
+
+  asyncEnd();
+}
+
+Type type<T>() => T;
+Type typeOf<T>(T of) => T;
diff --git a/tests/language/language.status b/tests/language/language.status
index 7944430..266988d 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -19,7 +19,7 @@
 void/*: Skip # https://github.com/dart-lang/sdk/issues/34015
 
 [ $mode == debug ]
-class/large_class_declaration_test: Slow
+class/large_class_declaration_test: Slow, Pass
 
 [ $mode == product ]
 assert/assert_test: SkipByDesign # Requires checked mode.
@@ -43,4 +43,4 @@
 
 [ $hot_reload || $hot_reload_rollback ]
 regress/regress22780_test/01: Crash # Issue 29094
-vm/optimized_stacktrace_test: Slow
+vm/optimized_stacktrace_test: Slow, Pass
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index 23eabf4..90a98d3 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -5,7 +5,7 @@
 # Sections in this file should contain "$compiler == dart2analyzer".
 
 [ $compiler == dart2analyzer ]
-class/large_class_declaration_test: Slow
+class/large_class_declaration_test: Slow, Pass
 vm/debug_break_enabled_vm_test: Skip
 vm/debug_break_vm_test/*: Skip
 vm/regress_27201_test: SkipByDesign # Loads bad library, so will always crash.
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 5bdb444..e0b4991 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -15,7 +15,7 @@
 control_flow_collections/for_non_bool_condition_test: Crash # Issue 36442
 
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
-override_field_test/02: Slow # TODO(kasperl): Please triage.
+override_field_test/02: Slow, Pass # TODO(kasperl): Please triage.
 
 [ $compiler == dart2js && $runtime == d8 ]
 import/conditional_string_test: SkipByDesign # No XHR in d8
diff --git a/tests/language/language_dartdevc.status b/tests/language/language_dartdevc.status
index f94dbaa..d92526e 100644
--- a/tests/language/language_dartdevc.status
+++ b/tests/language/language_dartdevc.status
@@ -4,7 +4,7 @@
 
 # Sections in this file should contain "$compiler == dartdevc" or dartdevk.
 [ $compiler == dartdevc ]
-class/large_class_declaration_test: Slow
+class/large_class_declaration_test: Slow, Pass
 const/double_in_int_op_test/dd6: Skip # Triple shift
 const/double_in_int_op_test/di6: Skip # Triple shift
 const/double_in_int_op_test/id6: Skip # Triple shift
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index a627eb8..8ca708b 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -237,7 +237,7 @@
 unsorted/inference_enum_list_test: Skip # Issue 35885
 
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
-vm/precompiled_static_initializer_test: Slow
+vm/precompiled_static_initializer_test: Slow, Pass
 
 # ==== dartkp + dart_precompiled status lines ====
 [ $compiler == dartkp && $runtime == dart_precompiled ]
@@ -293,7 +293,7 @@
 assert/initializer_const_error2_test/cc11: Crash
 
 [ $compiler == dartkp && $system == windows ]
-unsorted/disassemble_test: Slow
+unsorted/disassemble_test: Slow, Pass
 
 [ $mode == debug && $runtime == vm && ($compiler == app_jitk || $compiler == dartk || $compiler == dartkb) ]
 optimize/deopt_inlined_function_lazy_test: Skip
@@ -324,7 +324,7 @@
 web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
 
 [ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-symbol/conflict_test: Slow
+symbol/conflict_test: Slow, Pass
 
 [ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
 async_star/async_star2_test/01: Skip # Timeout
diff --git a/tests/language/operator/invalid_operators_test.dart b/tests/language/operator/invalid_operators_test.dart
new file mode 100644
index 0000000..d0ec7e4
--- /dev/null
+++ b/tests/language/operator/invalid_operators_test.dart
@@ -0,0 +1,667 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Operators1 {
+  operator ==() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  // [cfe] Operator '==' should have exactly one parameter.
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  operator <() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  operator >() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  operator <=() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  operator >=() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  operator +() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  operator /() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  operator ~/() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  operator *() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  operator %() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  operator |() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  operator ^() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  operator &() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  operator <<() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  operator >>() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  operator []=(a, b, c) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  operator []() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  operator ~(a) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+}
+
+class Operators2 {
+  operator ==(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  // [cfe] Operator '==' should have exactly one parameter.
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  operator <(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  operator >(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  operator <=(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  operator >=(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  operator -(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+  // [cfe] Operator '-' should have zero or one parameter.
+  operator +(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  operator /(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  operator ~/(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  operator *(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  operator %(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  operator |(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  operator ^(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  operator &(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  operator <<(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  operator >>(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  operator []=(a, b, c) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  operator [](a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  operator ~(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+}
+
+class Operators3 {
+  operator ==([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <=([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >=([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator -([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator +([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator /([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~/([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator *([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator %([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator |([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ^([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator &([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <<([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >>([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []=([a, b]) => true;
+  //            ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  //               ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~([a]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators4 {
+  operator ==({a}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <=({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >=({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator -({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator +({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator /({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~/({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator *({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator %({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator |({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ^({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator &({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <<({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >>({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []=({a, b}) => true;
+  //            ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  //               ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~({a}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators5 {
+  operator ==(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '==' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <=(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >=(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator -(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+  // [cfe] Operator '-' should have zero or one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator +(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator /(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~/(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator *(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator %(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator |(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ^(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator &(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <<(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >>(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator []=(a, b, [c]) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  //                  ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator [](a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators6 {
+  operator ==(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '==' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <=(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >=(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator -(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+  // [cfe] Operator '-' should have zero or one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator +(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator /(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~/(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator *(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator %(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator |(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ^(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator &(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <<(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >>(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator []=(a, b, {c}) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  //                  ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator [](a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators7 {
+  operator ==<T>(a) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ><T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator <=<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator >=<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator -<T>() => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator -<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator +<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator /<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ~/<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator *<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator %<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator |<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ^<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator &<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator <<<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator >><T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator []=<T>(a, b) => true;
+  //          ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //           ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator []<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ~<T, S>() => true;
+  //        ^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+}
+
+main() {}
diff --git a/tests/language_2/await_type_error_test.dart b/tests/language_2/await_type_error_test.dart
new file mode 100644
index 0000000..b838fcc
--- /dev/null
+++ b/tests/language_2/await_type_error_test.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+main() async {
+  int i = 1;
+  Future<int> fi = Future<int>.value(i);
+  Future<Future<int>> ffi = Future<Future<int>>.value(fi);
+  Future<Future<Future<int>>> fffi = Future<Future<Future<int>>>.value(ffi);
+
+  String v1 = await i;
+  //                ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  String v2 = await fi;
+  //                ^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  int v3 = await ffi;
+  //             ^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<int> v4 = await fffi;
+  //                     ^^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<int> v5 = await i;
+  //                     ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<int> v6 = await fi;
+  //                     ^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<FutureOr<int>> v7 = await fi;
+  //                               ^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+  Future<Future<int>> v8 = await ffi;
+  //                             ^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language_2/await_type_test.dart b/tests/language_2/await_type_test.dart
new file mode 100644
index 0000000..349beac
--- /dev/null
+++ b/tests/language_2/await_type_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void main() async {
+  asyncStart();
+
+  // Sanity check.
+  Expect.equals(type<int>(), type(1));
+
+  {
+    int v = null; //                     // Variable with type T.
+    var f = await v; //                  // Variable with type FLATTEN(T).
+    Expect.equals(type<int>(), type(f)); // Dynamic check of static type of f.
+    int s = f; //                        // Static check upper bound of f.
+    f = 1; //                            // Static check lower bound of f.
+    s.toString(); //                     // Avoid "unused variable" warning.
+  }
+
+  {
+    Future<int> v = null;
+    var f = await v;
+    Expect.equals(type<int>(), type(f));
+    int s = f;
+    f = 1;
+    s.toString();
+  }
+
+  {
+    Future<Future<int>> v = null;
+    var f = await v;
+    Expect.equals(type<Future<int>>(), type(f));
+    Future<int> s = f;
+    f = Future<int>.value(1);
+    s.toString();
+  }
+
+  {
+    FutureOr<int> v = null;
+    var f = await v;
+    Expect.equals(type<int>(), type(f));
+    int s = f;
+    f = 1;
+    s.toString();
+  }
+
+  {
+    FutureOr<Future<int>> v = null;
+    var f = await v;
+    Expect.equals(type<Future<int>>(), type(f));
+    Future<int> s = f;
+    f = Future<int>.value(1);
+    s.toString();
+  }
+
+  {
+    Future<FutureOr<int>> v = null;
+    var f = await v;
+    Expect.equals(type<FutureOr<int>>(), type(f));
+    FutureOr<int> s = f;
+    f = 1;
+    f = Future<int>.value(1);
+    s.toString();
+  }
+
+  {
+    FutureOr<FutureOr<int>> v = null;
+    var f = await v;
+    Expect.equals(type<FutureOr<int>>(), type(f));
+    FutureOr<int> s = f;
+    f = 1;
+    f = Future<int>.value(1);
+    s.toString();
+  }
+
+  asyncEnd();
+}
+
+Type type<T>([T of]) => T;
diff --git a/tests/language_2/enum/private_test.dart b/tests/language_2/enum/private_test.dart
index cf2376d..bd99d84 100644
--- a/tests/language_2/enum/private_test.dart
+++ b/tests/language_2/enum/private_test.dart
@@ -20,6 +20,6 @@
   Expect.equals('Enum2._A,Enum2._B', Enum2.values.join(','));
   Expect.throwsNoSuchMethodError(() => Enum2._A);
   //                                         ^^
-  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
+  // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_ENUM_CONSTANT
   // [cfe] Getter not found: '_A'.
 }
diff --git a/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart b/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
index 1cff35a..1b0a81b 100644
--- a/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
@@ -12,7 +12,7 @@
   //     ^^
   // [cfe] unspecified
   //             ^^^^^^^^
-  // [analyzer] STATIC_WARNING.MISMATCHED_GETTER_AND_SETTER_TYPES
+  // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
   static void set property(String value) {}
   //                       ^^
   // [cfe] unspecified
@@ -20,7 +20,7 @@
   //  ^^
   // [cfe] unspecified
   //      ^^^^^^^^^
-  // [analyzer] STATIC_WARNING.MISMATCHED_GETTER_AND_SETTER_TYPES
+  // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
   void set property2(String x) {}
   //                 ^^
   // [cfe] unspecified
diff --git a/tests/language_2/getter/setter2_test.dart b/tests/language_2/getter/setter2_test.dart
index cdc268b..de9bc28 100644
--- a/tests/language_2/getter/setter2_test.dart
+++ b/tests/language_2/getter/setter2_test.dart
@@ -37,7 +37,7 @@
   C setterField;
   A get field {
   //    ^^^^^
-  // [analyzer] STATIC_WARNING.MISMATCHED_GETTER_AND_SETTER_TYPES
+  // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
     return getterField;
   }
 
diff --git a/tests/language_2/getter/setter_type_test.dart b/tests/language_2/getter/setter_type_test.dart
index 63db11a..e108848 100644
--- a/tests/language_2/getter/setter_type_test.dart
+++ b/tests/language_2/getter/setter_type_test.dart
@@ -9,8 +9,8 @@
 int bar = 499;
 
 int get foo => bar;
-// [error line 11, column 1, length 19]
-// [analyzer] STATIC_WARNING.MISMATCHED_GETTER_AND_SETTER_TYPES
+//      ^^^
+// [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
 
 void set foo(String str) {
   bar = str.length;
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index a13e7f6..72e60ac 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -19,7 +19,7 @@
 void/*: Skip # https://github.com/dart-lang/sdk/issues/34015
 
 [ $mode == debug ]
-class/large_class_declaration_test: Slow
+class/large_class_declaration_test: Slow, Pass
 
 [ $mode == product ]
 assert/assert_test: SkipByDesign # Requires checked mode.
@@ -45,4 +45,4 @@
 regress/regress22780_test/01: Crash # Issue 29094
 regress/regress23244_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
 vm/optimized_guarded_field_isolates_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
-vm/optimized_stacktrace_test: Slow
+vm/optimized_stacktrace_test: Slow, Pass
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 23eabf4..90a98d3 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -5,7 +5,7 @@
 # Sections in this file should contain "$compiler == dart2analyzer".
 
 [ $compiler == dart2analyzer ]
-class/large_class_declaration_test: Slow
+class/large_class_declaration_test: Slow, Pass
 vm/debug_break_enabled_vm_test: Skip
 vm/debug_break_vm_test/*: Skip
 vm/regress_27201_test: SkipByDesign # Loads bad library, so will always crash.
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 5bdb444..e0b4991 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -15,7 +15,7 @@
 control_flow_collections/for_non_bool_condition_test: Crash # Issue 36442
 
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
-override_field_test/02: Slow # TODO(kasperl): Please triage.
+override_field_test/02: Slow, Pass # TODO(kasperl): Please triage.
 
 [ $compiler == dart2js && $runtime == d8 ]
 import/conditional_string_test: SkipByDesign # No XHR in d8
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index f94dbaa..d92526e 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -4,7 +4,7 @@
 
 # Sections in this file should contain "$compiler == dartdevc" or dartdevk.
 [ $compiler == dartdevc ]
-class/large_class_declaration_test: Slow
+class/large_class_declaration_test: Slow, Pass
 const/double_in_int_op_test/dd6: Skip # Triple shift
 const/double_in_int_op_test/di6: Skip # Triple shift
 const/double_in_int_op_test/id6: Skip # Triple shift
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index dce25e7..1d10def 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -52,7 +52,7 @@
 unsorted/inference_enum_list_test: Skip # Issue 35885
 
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
-vm/precompiled_static_initializer_test: Slow
+vm/precompiled_static_initializer_test: Slow, Pass
 
 # ==== dartkp + dart_precompiled status lines ====
 [ $compiler == dartkp && $runtime == dart_precompiled ]
@@ -108,7 +108,7 @@
 assert/initializer_const_error2_test/cc11: Crash
 
 [ $compiler == dartkp && $system == windows ]
-unsorted/disassemble_test: Slow
+unsorted/disassemble_test: Slow, Pass
 
 [ $mode == debug && $runtime == vm && ($compiler == app_jitk || $compiler == dartk || $compiler == dartkb) ]
 optimize/deopt_inlined_function_lazy_test: Skip
@@ -135,7 +135,7 @@
 web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
 
 [ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-symbol/conflict_test: Slow
+symbol/conflict_test: Slow, Pass
 
 [ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
 type_constants_test/none: Skip # Deferred libraries and hot reload.
diff --git a/tests/language_2/operator/invalid_operators_test.dart b/tests/language_2/operator/invalid_operators_test.dart
new file mode 100644
index 0000000..d0ec7e4
--- /dev/null
+++ b/tests/language_2/operator/invalid_operators_test.dart
@@ -0,0 +1,667 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Operators1 {
+  operator ==() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  // [cfe] Operator '==' should have exactly one parameter.
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  operator <() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  operator >() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  operator <=() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  operator >=() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  operator +() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  operator /() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  operator ~/() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  operator *() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  operator %() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  operator |() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  operator ^() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  operator &() => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  operator <<() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  operator >>() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  operator []=(a, b, c) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  operator []() => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  operator ~(a) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+}
+
+class Operators2 {
+  operator ==(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  // [cfe] Operator '==' should have exactly one parameter.
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  operator <(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  operator >(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  operator <=(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  operator >=(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  operator -(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+  // [cfe] Operator '-' should have zero or one parameter.
+  operator +(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  operator /(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  operator ~/(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  operator *(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  operator %(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  operator |(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  operator ^(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  operator &(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  operator <<(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  operator >>(a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  operator []=(a, b, c) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  operator [](a, b) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  operator ~(a, b) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+}
+
+class Operators3 {
+  operator ==([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <=([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >=([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator -([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator +([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator /([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~/([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator *([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator %([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator |([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ^([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator &([a]) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <<([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >>([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []=([a, b]) => true;
+  //            ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  //               ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []([a]) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~([a]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators4 {
+  operator ==({a}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <=({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >=({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator -({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator +({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator /({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~/({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator *({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator %({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator |({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ^({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator &({a}) => true;
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator <<({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator >>({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []=({a, b}) => true;
+  //            ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  //               ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator []({a}) => true;
+  //           ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  // [cfe] An operator can't have optional parameters.
+  operator ~({a}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //          ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators5 {
+  operator ==(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '==' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <=(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >=(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator -(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+  // [cfe] Operator '-' should have zero or one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator +(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator /(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~/(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator *(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator %(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator |(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ^(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator &(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <<(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >>(a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator []=(a, b, [c]) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  //                  ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator [](a, [b]) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~(a, [b]) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators6 {
+  operator ==(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '==' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <=(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >=(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>=' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator -(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+  // [cfe] Operator '-' should have zero or one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator +(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '+' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator /(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '/' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~/(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~/' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator *(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '*' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator %(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '%' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator |(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '|' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ^(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '^' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator &(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '&' should have exactly one parameter.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator <<(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '<<' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator >>(a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '>>' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator []=(a, b, {c}) => true;
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]=' should have exactly two parameters.
+  //                  ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator [](a, {b}) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '[]' should have exactly one parameter.
+  //              ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  operator ~(a, {b}) => true;
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+  // [cfe] Operator '~' shouldn't have any parameters.
+  //             ^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+}
+
+class Operators7 {
+  operator ==<T>(a) => true;
+  //       ^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ><T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator <=<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator >=<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator -<T>() => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator -<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator +<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator /<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ~/<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator *<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator %<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator |<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ^<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator &<T>(a) => true;
+  //        ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator <<<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator >><T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator []=<T>(a, b) => true;
+  //          ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //           ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator []<T>(a) => true;
+  //         ^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //          ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+  operator ~<T, S>() => true;
+  //        ^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETERS_ON_OPERATOR
+  //         ^
+  // [cfe] Types parameters aren't allowed when defining an operator.
+}
+
+main() {}
diff --git a/tests/language_2/vm/causal_async_exception_stack_test.dart b/tests/language_2/vm/causal_async_exception_stack_test.dart
index caba5d9..f4421c2 100644
--- a/tests/language_2/vm/causal_async_exception_stack_test.dart
+++ b/tests/language_2/vm/causal_async_exception_stack_test.dart
@@ -34,11 +34,11 @@
     } catch (e, st) {
       expect(
           h.stringContainsInOrder(st.toString(), [
-            'thrower', '.dart:10', //
-            'generator', '.dart:19', //
-            '<asynchronous suspension>', //
-            'foo', '.dart:23', //
-            'main', //
+            'thrower', '.dart:10', // no auto-format.
+            'generator', '.dart:19', // no auto-format.
+            '<asynchronous suspension>', // no auto-format.
+            'foo', '.dart', // no auto-format.
+            'main',
           ]),
           isTrue);
     }
@@ -72,8 +72,8 @@
     } catch (e, st) {
       expect(
           h.stringContainsInOrder(st.toString(), [
-            'thrower', '.dart:10', //
-            'main.<anonymous closure>', '.dart:71', //
+            'thrower', '.dart:10', // no auto-format.
+            'main.<anonymous closure>', '.dart:71', // no auto-format.
           ]),
           isTrue);
     }
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index a592e6a..4dd40c9 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -12,8 +12,8 @@
 isolate/issue_24243_parent_isolate_test: Skip # Requires checked mode
 
 [ $runtime == ff ]
-convert/streamed_conversion_utf8_decode_test: Slow # Issue 12029
-mirrors/mirrors_reader_test: Slow # Issue 16589
+convert/streamed_conversion_utf8_decode_test: Slow, Pass # Issue 12029
+mirrors/mirrors_reader_test: Slow, Pass # Issue 16589
 
 [ $runtime == ie11 ]
 html/request_animation_frame_test: Skip # Times out. Issue 22167
@@ -31,7 +31,7 @@
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
 
 [ $runtime == chrome && $system == linux ]
-mirrors/native_class_test: Slow
+mirrors/native_class_test: Slow, Pass
 
 [ $runtime == chrome && $system == macos ]
 convert/streamed_conversion_utf8_encode_test: SkipSlow # Times out. Issue 22050
diff --git a/tests/lib/lib_dart2js.status b/tests/lib/lib_dart2js.status
index 3119691..360147c 100644
--- a/tests/lib/lib_dart2js.status
+++ b/tests/lib/lib_dart2js.status
@@ -3,24 +3,24 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2js ]
-convert/chunked_conversion_utf88_test: Slow
-convert/utf85_test: Slow
+convert/chunked_conversion_utf88_test: Slow, Pass
+convert/utf85_test: Slow, Pass
 developer/metrics_num_test: Skip # Because of an int / double type test.
 developer/timeline_test: Skip # Not supported
 html/async_test: SkipByDesign
-html/custom/document_register_basic_test: Slow
-html/custom/document_register_type_extensions_test/construction: Slow
-html/custom/document_register_type_extensions_test/registration: Slow
-html/custom/entered_left_view_test/shadow_dom: Slow
+html/custom/document_register_basic_test: Slow, Pass
+html/custom/document_register_type_extensions_test/construction: Slow, Pass
+html/custom/document_register_type_extensions_test/registration: Slow, Pass
+html/custom/entered_left_view_test/shadow_dom: Slow, Pass
 html/custom/js_custom_test: Skip # mirrors not supported, delete this test.
 html/custom/mirrors_2_test: Skip # mirrors not supported, delete this test.
 html/custom/mirrors_test: Skip # mirrors not supported, delete this test.
-html/custom_elements_test: Slow # Issue 26789
+html/custom_elements_test: Slow, Pass # Issue 26789
 html/isolates_test: SkipByDesign
 html/mirrors_js_typed_interop_test: Skip # mirrors not supported, delete this test.
 html/worker_api_test: SkipByDesign
 html/wrapping_collections_test: SkipByDesign # Testing an issue that is only relevant to Dartium
-html/xhr_test: Slow
+html/xhr_test: Slow, Pass
 isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
 mirrors/*: SkipByDesign # Mirrors not supported on web in Dart 2.0.
 typed_data/int64_list_load_store_test: SkipByDesign # dart2js does not support Int64List
@@ -38,8 +38,8 @@
 convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
 
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
-html/crypto_test/functional: Slow # TODO(dart2js-team): Please triage this failure.
-html/input_element_datetime_test: Slow # TODO(dart2js-team): Please triage this failure.
+html/crypto_test/functional: Slow, Pass # TODO(dart2js-team): Please triage this failure.
+html/input_element_datetime_test: Slow, Pass # TODO(dart2js-team): Please triage this failure.
 
 [ $compiler == dart2js && $runtime == d8 ]
 html/event_callback_test: Skip # Browser test
@@ -49,7 +49,7 @@
 convert/streamed_conversion_json_utf8_decode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_json_utf8_encode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
-convert/utf85_test: Slow
+convert/utf85_test: Slow, Pass
 html/callback_list_test: SkipByDesign # FileSystem not supported in FireFox.
 html/custom/attribute_changed_callback_test: Skip # Times out
 html/custom/created_callback_test: Skip # Times out
@@ -71,7 +71,7 @@
 html/interactive_geolocation_test: Skip # Requires allowing geo location.
 
 [ $compiler == dart2js && $checked ]
-convert/utf85_test: Slow # Issue 12029.
+convert/utf85_test: Slow, Pass # Issue 12029.
 html/js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
 
 [ $compiler == dart2js && $csp && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == ff || $runtime == safari) ]
diff --git a/tests/lib/lib_dartdevc.status b/tests/lib/lib_dartdevc.status
index 2b4741b..4264211 100644
--- a/tests/lib/lib_dartdevc.status
+++ b/tests/lib/lib_dartdevc.status
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dartdevc ]
-html/xhr_test: Slow
+html/xhr_test: Slow, Pass
 
 [ $runtime == chrome && ($compiler == dartdevc || $compiler == dartdevk) ]
 html/js_dispatch_property_test: Skip # Timeout Issue 31030
@@ -18,10 +18,10 @@
 html/xhr_test: Skip # Times out. Issue 21527
 
 [ $compiler == dartdevc || $compiler == dartdevk ]
-convert/chunked_conversion_utf88_test: Slow
-convert/json_utf8_chunk_test: Slow
-convert/streamed_conversion_utf8_decode_test: Slow # Issue 29922
-convert/utf85_test: Slow
+convert/chunked_conversion_utf88_test: Slow, Pass
+convert/json_utf8_chunk_test: Slow, Pass
+convert/streamed_conversion_utf8_decode_test: Slow, Pass # Issue 29922
+convert/utf85_test: Slow, Pass
 developer/metrics_num_test: Skip # Because of an int / double type test.
 html/callback_list_test: Skip # Test requires user interaction to accept permissions.
 html/custom/attribute_changed_callback_test: Skip # Issue 31577
diff --git a/tests/lib_2/developer/timeline_recorders_test.dart b/tests/lib_2/developer/timeline_recorders_test.dart
new file mode 100644
index 0000000..349cbba
--- /dev/null
+++ b/tests/lib_2/developer/timeline_recorders_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// VMOptions=--timeline_streams=VM,Isolate,GC,Dart --timeline_recorder=endless
+/// VMOptions=--timeline_streams=VM,Isolate,GC,Dart --timeline_recorder=ring
+/// VMOptions=--timeline_streams=VM,Isolate,GC,Dart --timeline_recorder=startup
+/// VMOptions=--timeline_streams=VM,Isolate,GC,Dart --timeline_recorder=systrace
+
+import 'dart:developer';
+
+void main() {
+  Timeline.startSync('A');
+
+  Timeline.instantSync('B');
+
+  var task = new TimelineTask();
+  task.start('C');
+  task.instant('D');
+  task.finish();
+
+  Timeline.finishSync();
+}
diff --git a/tests/lib_2/isolate/unboxed_double_snapshot_writer_test.dart b/tests/lib_2/isolate/unboxed_double_snapshot_writer_test.dart
new file mode 100644
index 0000000..132ad6b
--- /dev/null
+++ b/tests/lib_2/isolate/unboxed_double_snapshot_writer_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+double getDoubleWithHeapObjectTag() {
+  final bd = ByteData(8);
+  bd.setUint64(0, 0x8000000000000001, Endian.host);
+  final double v = bd.getFloat64(0, Endian.host);
+  return v;
+}
+
+class Foo {
+  final double x = getDoubleWithHeapObjectTag();
+  final String name = "Foo Class";
+  Foo();
+}
+
+main(args) async {
+  final receivePort = new ReceivePort();
+
+  receivePort.sendPort.send(Foo());
+  final it = StreamIterator(receivePort);
+  Expect.isTrue(await it.moveNext());
+  final Foo receivedFoo = it.current as Foo;
+  Expect.equals(receivedFoo.x, getDoubleWithHeapObjectTag());
+  Expect.equals(receivedFoo.name, "Foo Class");
+  await it.cancel();
+}
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index a592e6a..4dd40c9 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -12,8 +12,8 @@
 isolate/issue_24243_parent_isolate_test: Skip # Requires checked mode
 
 [ $runtime == ff ]
-convert/streamed_conversion_utf8_decode_test: Slow # Issue 12029
-mirrors/mirrors_reader_test: Slow # Issue 16589
+convert/streamed_conversion_utf8_decode_test: Slow, Pass # Issue 12029
+mirrors/mirrors_reader_test: Slow, Pass # Issue 16589
 
 [ $runtime == ie11 ]
 html/request_animation_frame_test: Skip # Times out. Issue 22167
@@ -31,7 +31,7 @@
 isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
 
 [ $runtime == chrome && $system == linux ]
-mirrors/native_class_test: Slow
+mirrors/native_class_test: Slow, Pass
 
 [ $runtime == chrome && $system == macos ]
 convert/streamed_conversion_utf8_encode_test: SkipSlow # Times out. Issue 22050
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 784ae82..db9b90d 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -3,24 +3,24 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2js ]
-convert/chunked_conversion_utf88_test: Slow
-convert/utf85_test: Slow
+convert/chunked_conversion_utf88_test: Slow, Pass
+convert/utf85_test: Slow, Pass
 developer/metrics_num_test: Skip # Because of an int / double type test.
 developer/timeline_test: Skip # Not supported
 html/async_test: SkipByDesign
-html/custom/document_register_basic_test: Slow
-html/custom/document_register_type_extensions_test/construction: Slow
-html/custom/document_register_type_extensions_test/registration: Slow
-html/custom/entered_left_view_test/shadow_dom: Slow
+html/custom/document_register_basic_test: Slow, Pass
+html/custom/document_register_type_extensions_test/construction: Slow, Pass
+html/custom/document_register_type_extensions_test/registration: Slow, Pass
+html/custom/entered_left_view_test/shadow_dom: Slow, Pass
 html/custom/js_custom_test: Skip # mirrors not supported, delete this test.
 html/custom/mirrors_2_test: Skip # mirrors not supported, delete this test.
 html/custom/mirrors_test: Skip # mirrors not supported, delete this test.
-html/custom_elements_test: Slow # Issue 26789
+html/custom_elements_test: Slow, Pass # Issue 26789
 html/isolates_test: SkipByDesign
 html/mirrors_js_typed_interop_test: Skip # mirrors not supported, delete this test.
 html/worker_api_test: SkipByDesign
 html/wrapping_collections_test: SkipByDesign # Testing an issue that is only relevant to Dartium
-html/xhr_test: Slow
+html/xhr_test: Slow, Pass
 isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
 mirrors/*: SkipByDesign # Mirrors not supported on web in Dart 2.0.
 wasm/*: SkipByDesign # dart:wasm not currently supported on web.
@@ -35,8 +35,8 @@
 convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
 
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
-html/crypto_test/functional: Slow # TODO(dart2js-team): Please triage this failure.
-html/input_element_datetime_test: Slow # TODO(dart2js-team): Please triage this failure.
+html/crypto_test/functional: Slow, Pass # TODO(dart2js-team): Please triage this failure.
+html/input_element_datetime_test: Slow, Pass # TODO(dart2js-team): Please triage this failure.
 
 [ $compiler == dart2js && $runtime == d8 ]
 html/*: SkipByDesign # Browser test
@@ -46,7 +46,7 @@
 convert/streamed_conversion_json_utf8_decode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_json_utf8_encode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
-convert/utf85_test: Slow
+convert/utf85_test: Slow, Pass
 html/callback_list_test: SkipByDesign # FileSystem not supported in FireFox.
 html/custom/attribute_changed_callback_test: Skip # Times out
 html/custom/created_callback_test: Skip # Times out
@@ -68,7 +68,7 @@
 html/interactive_geolocation_test: Skip # Requires allowing geo location.
 
 [ $compiler == dart2js && $checked ]
-convert/utf85_test: Slow # Issue 12029.
+convert/utf85_test: Slow, Pass # Issue 12029.
 html/js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
 
 [ $compiler == dart2js && $csp && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == ff || $runtime == safari) ]
diff --git a/tests/lib_2/lib_2_dartdevc.status b/tests/lib_2/lib_2_dartdevc.status
index 7a07129..ae2ca1a 100644
--- a/tests/lib_2/lib_2_dartdevc.status
+++ b/tests/lib_2/lib_2_dartdevc.status
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dartdevc ]
-html/xhr_test: Slow
+html/xhr_test: Slow, Pass
 
 [ $runtime == chrome && ($compiler == dartdevc || $compiler == dartdevk) ]
 html/js_dispatch_property_test: Skip # Timeout Issue 31030
@@ -18,10 +18,10 @@
 html/xhr_test: Skip # Times out. Issue 21527
 
 [ $compiler == dartdevc || $compiler == dartdevk ]
-convert/chunked_conversion_utf88_test: Slow
-convert/json_utf8_chunk_test: Slow
-convert/streamed_conversion_utf8_decode_test: Slow # Issue 29922
-convert/utf85_test: Slow
+convert/chunked_conversion_utf88_test: Slow, Pass
+convert/json_utf8_chunk_test: Slow, Pass
+convert/streamed_conversion_utf8_decode_test: Slow, Pass # Issue 29922
+convert/utf85_test: Slow, Pass
 developer/metrics_num_test: Skip # Because of an int / double type test.
 html/callback_list_test: Skip # Test requires user interaction to accept permissions.
 html/custom/attribute_changed_callback_test: Skip # Issue 31577
diff --git a/tests/standalone/io/issue_32052_test.dart b/tests/standalone/io/issue_32052_test.dart
new file mode 100644
index 0000000..b39f816
--- /dev/null
+++ b/tests/standalone/io/issue_32052_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:cli';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+main() {
+  asyncStart();
+  Completer<Null> c = new Completer<Null>();
+  Timer.run(() {
+    c.complete(null);
+    asyncEnd();
+  });
+  Null result = waitFor<Null>(c.future);
+  Expect.isNull(result);
+}
diff --git a/tests/standalone/io/wait_for_error_test.dart b/tests/standalone/io/wait_for_error_test.dart
new file mode 100644
index 0000000..a3b71c5
--- /dev/null
+++ b/tests/standalone/io/wait_for_error_test.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:cli';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+main() {
+  asyncStart();
+  Completer<bool> c = new Completer<bool>();
+  Timer.run(() {
+    c.completeError("Error", StackTrace.current);
+    asyncEnd();
+  });
+  Expect.throws(() => waitFor<bool>(c.future), (e) => e is AsyncError);
+}
diff --git a/tests/standalone/io/wait_for_exception_test.dart b/tests/standalone/io/wait_for_exception_test.dart
new file mode 100644
index 0000000..f5c207d
--- /dev/null
+++ b/tests/standalone/io/wait_for_exception_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:cli';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+main() {
+  asyncStart();
+  Completer<bool> c = new Completer<bool>();
+  runZoned(() {
+    Timer.run(() {
+      asyncEnd();
+      throw "Error";
+    });
+  }, onError: (e) {
+    Expect.isTrue(e is String);
+    c.complete(true);
+  });
+  Expect.isTrue(waitFor<bool>(c.future));
+}
diff --git a/tests/standalone/io/wait_for_test.dart b/tests/standalone/io/wait_for_test.dart
new file mode 100644
index 0000000..a8ac543
--- /dev/null
+++ b/tests/standalone/io/wait_for_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:mirrors';
+import 'dart:cli';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+main() {
+  asyncStart();
+  Completer<bool> c = new Completer<bool>();
+  Timer.run(() {
+    c.complete(true);
+    asyncEnd();
+  });
+  bool result = waitFor<bool>(c.future);
+  Expect.isTrue(result);
+}
diff --git a/tests/standalone/io/wait_for_timeout_test.dart b/tests/standalone/io/wait_for_timeout_test.dart
new file mode 100644
index 0000000..2b239fa
--- /dev/null
+++ b/tests/standalone/io/wait_for_timeout_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:cli';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+main() {
+  asyncStart();
+  Completer<bool> c = new Completer<bool>();
+  Expect.throws(() {
+    waitFor<bool>(c.future, timeout: const Duration(seconds: 1));
+  }, (e) => e is TimeoutException);
+  asyncEnd();
+}
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 2518819..59dca0b 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -13,7 +13,7 @@
 packages_file_test/none: Skip # contains no tests.
 
 [ $builder_tag == asan ]
-io/process_detached_test: Slow
+io/process_detached_test: Slow, Pass
 
 [ $builder_tag == no_ipv6 ]
 io/http_ipv6_test: SkipByDesign
@@ -70,8 +70,8 @@
 dwarf_stack_trace_test: SkipByDesign # Due to instruction canonicalization we can end up having the wrong names in stack traces.
 
 [ $runtime == vm && $system == linux ]
-io/http_basic_test: Slow # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
-io/http_launch_test: Slow # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
+io/http_basic_test: Slow, Pass # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
+io/http_launch_test: Slow, Pass # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
 
 [ $system == macos && ($runtime == dart_precompiled || $runtime == vm) ]
 io/raw_secure_server_socket_test: Crash
diff --git a/tests/standalone/standalone_kernel.status b/tests/standalone/standalone_kernel.status
index b967e9f..cfbe667 100644
--- a/tests/standalone/standalone_kernel.status
+++ b/tests/standalone/standalone_kernel.status
@@ -18,7 +18,7 @@
 io/file_lock_test: SkipSlow # Timeout
 
 [ $arch == simarm64 && ($compiler == dartk || $compiler == dartkb) ]
-io/http_bind_test: Slow
+io/http_bind_test: Slow, Pass
 
 [ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
 map_insert_remove_oom_test: Skip # Heap limit too low.
@@ -58,7 +58,7 @@
 no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
 
 [ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-io/file_lock_test: Slow
+io/file_lock_test: Slow, Pass
 io/raw_socket_test: Crash
 io/socket_exception_test: Crash
 io/socket_finalizer_test: Crash
@@ -73,7 +73,7 @@
 no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
 
 [ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
-io/dart_std_io_pipe_test: Slow
+io/dart_std_io_pipe_test: Slow, Pass
 io/secure_builtin_roots_test: Skip # Issues 32137 and 32138.
 io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
 map_insert_remove_oom_test: Skip # Heap limit too low.
@@ -84,14 +84,14 @@
 
 [ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
 io/directory_chdir_test: Skip # Timeout
-io/echo_server_stream_test: Slow
+io/echo_server_stream_test: Slow, Pass
 
 # Enabling of dartk for sim{arm,arm64} revealed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
 [ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
 io/file_blocking_lock_test: Crash # Please triage.
-io/file_lock_test: Slow
+io/file_lock_test: Slow, Pass
 map_insert_remove_oom_test: Skip # Heap limit too low.
 
 [ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
diff --git a/tests/standalone_2/io/http_parser_test.dart b/tests/standalone_2/io/http_parser_test.dart
index 06ed070..6951916 100644
--- a/tests/standalone_2/io/http_parser_test.dart
+++ b/tests/standalone_2/io/http_parser_test.dart
@@ -251,8 +251,6 @@
         }
       }
 
-      ;
-
       var subscription = httpParser.listen((incoming) {
         port.close();
         statusCode = incoming.statusCode;
@@ -313,7 +311,6 @@
       _HttpParser httpParser = new _HttpParser.responseParser();
       StreamController<Uint8List> controller = new StreamController(sync: true);
       bool errorCalled = false;
-      ;
 
       if (chunkSize == -1) chunkSize = requestData.length;
 
@@ -785,6 +782,9 @@
     response = "HTTP/1.1 OK\r\nContent-Length: 0\r\n\r\n";
     _testParseInvalidResponse(response);
 
+    response = "HTTP/1.1 20A OK\r\nContent-Length: 0\r\n\r\n";
+    _testParseInvalidResponse(response);
+
     response = "200 OK\r\nContent-Length: 0\r\n\r\n";
     _testParseInvalidResponse(response);
 
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 66306a1e..1fa495c 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -13,7 +13,7 @@
 packages_file_test/none: Skip # contains no tests.
 
 [ $builder_tag == asan ]
-io/process_detached_test: Slow
+io/process_detached_test: Slow, Pass
 
 [ $builder_tag == no_ipv6 ]
 io/http_ipv6_test: SkipByDesign
@@ -67,8 +67,8 @@
 env_test: Skip # This is testing a vm command line parsing scenario.
 
 [ $runtime == vm && $system == linux ]
-io/http_basic_test: Slow # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
-io/http_launch_test: Slow # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
+io/http_basic_test: Slow, Pass # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
+io/http_launch_test: Slow, Pass # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
 
 [ $system == macos && ($runtime == dart_precompiled || $runtime == vm) ]
 io/raw_secure_server_socket_test: Crash
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index b967e9f..cfbe667 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -18,7 +18,7 @@
 io/file_lock_test: SkipSlow # Timeout
 
 [ $arch == simarm64 && ($compiler == dartk || $compiler == dartkb) ]
-io/http_bind_test: Slow
+io/http_bind_test: Slow, Pass
 
 [ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
 map_insert_remove_oom_test: Skip # Heap limit too low.
@@ -58,7 +58,7 @@
 no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
 
 [ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-io/file_lock_test: Slow
+io/file_lock_test: Slow, Pass
 io/raw_socket_test: Crash
 io/socket_exception_test: Crash
 io/socket_finalizer_test: Crash
@@ -73,7 +73,7 @@
 no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
 
 [ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
-io/dart_std_io_pipe_test: Slow
+io/dart_std_io_pipe_test: Slow, Pass
 io/secure_builtin_roots_test: Skip # Issues 32137 and 32138.
 io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
 map_insert_remove_oom_test: Skip # Heap limit too low.
@@ -84,14 +84,14 @@
 
 [ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
 io/directory_chdir_test: Skip # Timeout
-io/echo_server_stream_test: Slow
+io/echo_server_stream_test: Slow, Pass
 
 # Enabling of dartk for sim{arm,arm64} revealed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
 [ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
 io/file_blocking_lock_test: Crash # Please triage.
-io/file_lock_test: Slow
+io/file_lock_test: Slow, Pass
 map_insert_remove_oom_test: Skip # Heap limit too low.
 
 [ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
diff --git a/tools/VERSION b/tools/VERSION
index 3140836..fe48ed7 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -33,7 +33,7 @@
 MAJOR 2
 MINOR 8
 PATCH 0
-PRERELEASE 6
+PRERELEASE 7
 PRERELEASE_PATCH 0
 ABI_VERSION 28
 OLDEST_SUPPORTED_ABI_VERSION 28
diff --git a/tools/bots/get_builder_status.dart b/tools/bots/get_builder_status.dart
index 9ad188b..9ec200e 100755
--- a/tools/bots/get_builder_status.dart
+++ b/tools/bots/get_builder_status.dart
@@ -155,9 +155,7 @@
     final groups = <String>{
       for (Map document in documents)
         if (document.containsKey('document'))
-          document['document']['fields']['builder']['stringValue']
-              .split('-')
-              .first
+          document['document']['name'].split('/').last.split('-').first
     };
     String fragment = [
       'showLatestFailures=true',
diff --git a/tools/bots/post_results_to_pubsub.dart b/tools/bots/post_results_to_pubsub.dart
index d864765..92e91d1 100644
--- a/tools/bots/post_results_to_pubsub.dart
+++ b/tools/bots/post_results_to_pubsub.dart
@@ -32,7 +32,7 @@
   exit(1);
 }
 
-const resultsPerMessage = 100;
+const resultsPerMessage = 50;
 const postUrl =
     'https://pubsub.googleapis.com/v1/projects/dart-ci/topics/results:publish';
 
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index a3128d6..17a1c39 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -46,6 +46,7 @@
       "tests/search/",
       "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "third_party/babel/babel.min.js",
       "third_party/d8/",
       "third_party/observatory_pub_packages/packages/web_components/",
@@ -87,6 +88,7 @@
       "tests/search/",
       "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "third_party/babel/babel.min.js",
       "third_party/d8/",
       "third_party/observatory_pub_packages/packages/web_components/",
@@ -128,6 +130,7 @@
       "tests/search/",
       "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "third_party/d8/",
       "third_party/pkg/",
       "third_party/pkg_tested/",
@@ -208,6 +211,7 @@
       "tests/search/",
       "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "third_party/d8/",
       "third_party/pkg/",
       "third_party/pkg_tested/",
@@ -305,6 +309,7 @@
       "tests/search/",
       "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "pkg/_fe_analyzer_shared/",
       "pkg/async_helper/",
       "pkg/build_integration/",
@@ -336,7 +341,8 @@
         "runtime": "vm",
         "timeout": 240,
         "use-sdk": true
-    }},
+      }
+    },
     "unittest-asserts-(debug|product|release)-(linux|mac|win)": {
       "options": {
         "compiler": "dartk",
@@ -344,7 +350,8 @@
         "runtime": "vm",
         "timeout": 240,
         "use-sdk": true
-    }},
+      }
+    },
     "analyzer-unittest-asserts-(debug|product|release)-(linux|mac|win)": {
       "options": {
         "compiler": "dartk",
@@ -353,7 +360,8 @@
         "timeout": 240,
         "use-sdk": true,
         "builder-tag": "analyzer"
-    }},
+      }
+    },
     "cfe-unittest-asserts-(debug|product|release)-(linux|mac|win)": {
       "options": {
         "compiler": "dartk",
@@ -362,7 +370,8 @@
         "timeout": 240,
         "use-sdk": true,
         "builder-tag": "cfe"
-    }},
+      }
+    },
     "unittest-asserts-no-sdk-(linux|mac|win)": {
       "options": {
         "compiler": "dartk",
@@ -370,208 +379,299 @@
         "mode": "release",
         "runtime": "vm",
         "timeout": 240
-    }},
+      }
+    },
     "unittest-analyzer_use_fasta-(linux|mac|win)": {
       "options": {
         "compiler": "none",
         "runtime": "vm",
         "mode": "release",
         "use-sdk": true,
-        "vm-options": ["-DuseFastaParser=true"],
+        "vm-options": [
+          "-DuseFastaParser=true"
+        ],
         "builder-tag": "analyzer_use_fasta"
-    }},
+      }
+    },
     "dartk-asan-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "builder-tag": "asan",
         "timeout": 240
-    }},
+      }
+    },
     "dartk-lsan-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "builder-tag": "lsan",
         "timeout": 240
-    }},
+      }
+    },
     "dartk-msan-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "builder-tag": "msan",
         "timeout": 240
-    }},
+      }
+    },
     "dartk-tsan-(linux|mac|win)-(debug|product|release)-x64": {
       "options": {
         "builder-tag": "tsan",
         "timeout": 240
-    }},
+      }
+    },
     "dartk-ubsan-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "builder-tag": "ubsan",
         "timeout": 240
-    }},
+      }
+    },
     "dart2js-(linux|mac|win)-chrome": {
       "options": {
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-weak-(linux|mac|win)-x64-d8": {
       "options": {
         "builder-tag": "dart2js-weak",
-        "enable-experiment": ["non-nullable"],
-        "dart2js-options": ["--no-runtime-null-safety"],
+        "enable-experiment": [
+          "non-nullable"
+        ],
+        "dart2js-options": [
+          "--no-runtime-null-safety"
+        ],
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-(linux|win)-firefox": {
       "options": {
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-win-ie11": {
       "options": {
         "use-sdk": true,
         "babel": "{\"presets\":[\"es2015\"]}"
-    }},
+      }
+    },
     "dart2js-win-edge": {
       "options": {
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-mac-safari": {
       "options": {
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-minified-csp-(linux|mac|win)-chrome": {
       "options": {
         "minified": true,
         "csp": true,
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-minified-(linux|mac|win)-d8": {
       "options": {
         "minified": true,
         "use-sdk": true
-    }},
+      }
+    },
     "dart2js-production-(linux|mac|win)-d8": {
       "options": {
         "builder-tag": "dart2js_production",
         "use-sdk": true,
-        "dart2js-options": ["-O3"]
-    }},
+        "dart2js-options": [
+          "-O3"
+        ]
+      }
+    },
     "dart2js-hostasserts-(linux|mac|win)-(ia32|x64)-d8": {
       "options": {
         "host-checked": true
-    }},
+      }
+    },
     "dart2js-hostasserts-weak-(linux|mac|win)-x64-d8": {
       "options": {
         "builder-tag": "dart2js-weak",
-        "enable-experiment": ["non-nullable"],
-        "dart2js-options": ["--no-runtime-null-safety"],
+        "enable-experiment": [
+          "non-nullable"
+        ],
+        "dart2js-options": [
+          "--no-runtime-null-safety"
+        ],
         "host-checked": true
-    }},
+      }
+    },
     "dart2js-old-rti-(linux|mac|win)-x64-d8": {
       "options": {
         "builder-tag": "old_rti",
-        "dart2js-options": ["--use-old-rti"],
+        "dart2js-options": [
+          "--use-old-rti"
+        ],
         "host-checked": true
-    }},
+      }
+    },
     "dart2js-old-rti-minified-csp-(linux|mac|win)-x64-d8": {
       "options": {
         "builder-tag": "old_rti",
         "csp": true,
-        "dart2js-options": ["--use-old-rti"],
+        "dart2js-options": [
+          "--use-old-rti"
+        ],
         "minified": true,
         "use-sdk": true
-    }},
+      }
+    },
     "dartkp-android-(debug|product|release)-arm_x64": {
       "options": {
         "builder-tag": "crossword",
         "use-elf": true
-    }},
+      }
+    },
     "dartkp-android-(debug|product|release)-(arm|arm64)": {
       "options": {
         "use-elf": true
-    }},
+      }
+    },
     "dartk-android-(debug|product|release)-(arm|arm64)": {},
     "dartkp-(linux|win|mac)-(debug|product|release)-(simarm|simarm64)": {
       "options": {
         "use-blobs": true
-    }},
+      }
+    },
     "dartkp-linux-(debug|product|release)-simarm-crossword": {
       "options": {
         "builder-tag": "crossword"
-    }},
+      }
+    },
     "dartkp-(win|mac)-(debug|product|release)-simarm-crossword": {
       "options": {
         "builder-tag": "crossword",
         "use-blobs": true
-    }},
+      }
+    },
     "dartkp-win-(product|release)-x64": {
       "options": {
         "use-elf": true
-    }},
+      }
+    },
     "dartkp-win-debug-x64": {
       "options": {
         "use-elf": true,
-        "vm-options": ["--no-enable-malloc-hooks"]
-    }},
-    "dartkp-(linux|mac)-(product|release)-x64": { },
+        "vm-options": [
+          "--no-enable-malloc-hooks"
+        ]
+      }
+    },
+    "dartkp-(linux|mac)-(product|release)-x64": {},
     "dartkp-obfuscate-(linux|mac|win)-(debug|product|release)-x64": {
       "options": {
         "builder-tag": "obfuscated",
-        "vm-options": ["--obfuscate"]
-    }},
+        "vm-options": [
+          "--obfuscate"
+        ]
+      }
+    },
     "dartkp-(linux|mac)-debug-x64": {
       "options": {
-        "vm-options": ["--no-enable-malloc-hooks"]
-    }},
+        "vm-options": [
+          "--no-enable-malloc-hooks"
+        ]
+      }
+    },
     "dartkp-no-bare-(linux|mac|win)-(debug|product|release)-x64": {
       "options": {
-        "vm-options": ["--no-enable-malloc-hooks", "--no-use-bare-instructions"]
-    }},
+        "vm-options": [
+          "--no-enable-malloc-hooks",
+          "--no-use-bare-instructions"
+        ]
+      }
+    },
     "dartkp-no-bare-(linux|mac|win)-(debug|product|release)-(simarm|simarm64)": {
       "options": {
-        "vm-options": ["--no-enable-malloc-hooks", "--no-use-bare-instructions"],
+        "vm-options": [
+          "--no-enable-malloc-hooks",
+          "--no-use-bare-instructions"
+        ],
         "use-elf": true
-    }},
-    "dartk-(linux|mac|win)-(debug|product|release)-(ia32|x64)": { },
+      }
+    },
+    "dartk-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {},
     "dartk-weak-asserts-(linux|mac|win)-(debug|product|release)-x64": {
       "options": {
-        "enable-experiment": ["non-nullable"],
+        "enable-experiment": [
+          "non-nullable"
+        ],
         "enable-asserts": true
-    }},
+      }
+    },
     "dartk-(linux|mac|win)-(debug|product|release)-(ia32|simarm|simarm64|x64)-ast": {
       "options": {
         "builder-tag": "ast",
-        "gen-kernel-options": ["--no-gen-bytecode"]
-    }},
+        "gen-kernel-options": [
+          "--no-gen-bytecode"
+        ]
+      }
+    },
     "dartkp-(linux|mac)-(debug|product|release)-x64-ast": {
       "options": {
         "builder-tag": "ast",
-        "gen-kernel-options": ["--no-gen-bytecode"]
-    }},
+        "gen-kernel-options": [
+          "--no-gen-bytecode"
+        ]
+      }
+    },
     "dartkp-(linux|mac)-(debug|product|release)-simarm64-ast": {
-       "options": {
+      "options": {
         "builder-tag": "ast",
         "use-blobs": true,
-        "gen-kernel-options": ["--no-gen-bytecode"]
-    }},
+        "gen-kernel-options": [
+          "--no-gen-bytecode"
+        ]
+      }
+    },
     "dartkp-linux-(debug|product|release)-simarm-crossword-ast": {
       "options": {
         "builder-tag": "crossword_ast",
-        "gen-kernel-options": ["--no-gen-bytecode"]
-    }},
+        "gen-kernel-options": [
+          "--no-gen-bytecode"
+        ]
+      }
+    },
     "dartk-checked-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "enable-asserts": true
-    }},
-    "dartk-(linux|mac|win)-(debug|product|release)-(arm64|simarm|simarm64)": { },
+      }
+    },
+    "dartk-(linux|mac|win)-(debug|product|release)-(arm64|simarm|simarm64)": {},
     "dartk-optcounter-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "builder-tag": "optimization_counter_threshold",
-        "vm-options": ["--optimization-counter-threshold=5", "--random-seed=__RANDOM__"]
-    }},
+        "vm-options": [
+          "--optimization-counter-threshold=5",
+          "--random-seed=__RANDOM__"
+        ]
+      }
+    },
     "dartk-reload-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "hot-reload": true
-    }},
+      }
+    },
     "dartk-reload-rollback-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
       "options": {
         "hot-reload-rollback": true
-    }},
-    "app_jitk-(linux|mac|win)-(debug|product|release)-(ia32|x64)": { },
+      }
+    },
+    "dartk-linux-(debug|product|release)-arm-qemu": {
+      "options": {
+        "use-qemu": true
+      }
+    },
+    "dartkp-linux-(debug|product|release)-arm-qemu": {
+      "options": {
+        "use-qemu": true
+      }
+    },
+    "app_jitk-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {},
     "dartkb-interpret-(linux|mac|win)-product-(ia32|x64|arm|arm64|simarm|simarm64)": {
       "options": {
         "builder-tag": "bytecode_interpreter",
@@ -580,8 +680,12 @@
           "--drop-ast",
           "--bytecode-options=source-positions,annotations"
         ],
-        "vm-options": ["--enable_interpreter", "--compilation-counter-threshold=-1"]
-    }},
+        "vm-options": [
+          "--enable_interpreter",
+          "--compilation-counter-threshold=-1"
+        ]
+      }
+    },
     "dartkb-interpret-(linux|mac|win)-(debug|release)-(ia32|x64|arm|arm64|simarm|simarm64)": {
       "options": {
         "builder-tag": "bytecode_interpreter",
@@ -590,8 +694,12 @@
           "--drop-ast",
           "--bytecode-options=source-positions,annotations,local-var-info,debugger-stops"
         ],
-        "vm-options": ["--enable_interpreter", "--compilation-counter-threshold=-1"]
-    }},
+        "vm-options": [
+          "--enable_interpreter",
+          "--compilation-counter-threshold=-1"
+        ]
+      }
+    },
     "dartkb-mixed-(linux|mac|win)-(debug|release)-(ia32|x64|arm|arm64|simarm|simarm64)": {
       "options": {
         "builder-tag": "bytecode_mixed",
@@ -600,8 +708,11 @@
           "--drop-ast",
           "--bytecode-options=source-positions,annotations,local-var-info,debugger-stops"
         ],
-        "vm-options": ["--enable_interpreter"]
-    }},
+        "vm-options": [
+          "--enable_interpreter"
+        ]
+      }
+    },
     "dartkb-mixed-(linux|mac|win)-product-(ia32|x64|arm|arm64|simarm|simarm64)": {
       "options": {
         "builder-tag": "bytecode_mixed",
@@ -610,63 +721,83 @@
           "--drop-ast",
           "--bytecode-options=source-positions,annotations"
         ],
-        "vm-options": ["--enable_interpreter"]
-    }},
+        "vm-options": [
+          "--enable_interpreter"
+        ]
+      }
+    },
     "dartdevk-checked-(linux|mac|win)-(debug|product|release)-(chrome|firefox)": {
       "options": {
         "checked": true,
         "use-sdk": true
-    }},
+      }
+    },
     "dartdevk-strong-linux-release-chrome": {
       "options": {
         "checked": true,
         "use-sdk": true,
-        "enable-experiment": ["non-nullable"],
+        "enable-experiment": [
+          "non-nullable"
+        ],
         "enable-asserts": true
-
-    }},
+      }
+    },
     "dartdevk-weak-linux-release-chrome": {
       "options": {
         "checked": true,
         "use-sdk": true,
-        "enable-experiment": ["non-nullable"],
+        "enable-experiment": [
+          "non-nullable"
+        ],
         "enable-asserts": true
-    }},
+      }
+    },
     "cfe-(linux|mac|win)": {
       "options": {
         "compiler": "fasta"
-    }},
+      }
+    },
     "cfe-weak-(linux|mac|win)": {
       "options": {
         "compiler": "fasta",
-        "enable-experiment": ["non-nullable"]
+        "enable-experiment": [
+          "non-nullable"
+        ]
       }
     },
     "analyzer-(linux|mac|win)": {
       "options": {
         "compiler": "dart2analyzer",
         "use-sdk": true
-    }},
+      }
+    },
     "analyzer-asserts-(linux|mac|win)": {
       "options": {
         "compiler": "dart2analyzer",
         "enable-asserts": true,
         "use-sdk": true
-    }},
+      }
+    },
     "analyzer-asserts-strong-(linux|mac|win)": {
       "options": {
         "compiler": "dart2analyzer",
         "enable-asserts": true,
         "use-sdk": true,
-        "enable-experiment": ["non-nullable"]
-    }},
+        "enable-experiment": [
+          "non-nullable"
+        ]
+      }
+    },
     "analyzer-asserts-weak-(linux|mac|win)": {
       "options": {
         "compiler": "dart2analyzer",
         "enable-asserts": true,
         "use-sdk": true,
-        "enable-experiment": ["non-nullable"]
-    }}
+        "enable-experiment": [
+          "non-nullable"
+        ]
+      }
+    }
   },
   "builder_configurations": [
     {
@@ -700,7 +831,9 @@
         },
         {
           "name": "sdk tests",
-          "arguments": ["-ncfe-${system}"],
+          "arguments": [
+            "-ncfe-${system}"
+          ],
           "fileset": "front-end",
           "shards": 5
         },
@@ -708,7 +841,7 @@
           "name": "unit tests",
           "arguments": [
             "-ncfe-unittest-asserts-${mode}-${system}",
-             "pkg/(kernel|front_end|fasta)"
+            "pkg/(kernel|front_end|fasta)"
           ]
         },
         {
@@ -746,8 +879,9 @@
           "name": "weak sdk tests",
           "arguments": [
             "-ncfe-weak-${system}",
-            "language",
             "corelib",
+            "ffi",
+            "language",
             "lib"
           ],
           "fileset": "front-end",
@@ -764,7 +898,9 @@
         },
         {
           "name": "legacy sdk tests",
-          "arguments": ["-ncfe-weak-${system}"],
+          "arguments": [
+            "-ncfe-weak-${system}"
+          ],
           "fileset": "front-end",
           "shards": 5
         },
@@ -851,19 +987,24 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--arch=ia32,x64", "runtime"]
+          "arguments": [
+            "--arch=ia32,x64",
+            "runtime"
+          ]
         },
         {
           "name": "vm ia32 tests",
           "arguments": [
             "-ndartk-linux-debug-ia32",
-            "vm"]
+            "vm"
+          ]
         },
         {
           "name": "vm x64 tests",
           "arguments": [
             "-ndartk-linux-debug-x64",
-            "vm"]
+            "vm"
+          ]
         }
       ]
     },
@@ -922,7 +1063,7 @@
           "name": "ffi tests",
           "arguments": [
             "-ndartk-android-${mode}-${arch}",
-            "ffi"
+            "ffi_2"
           ],
           "fileset": "vm-kernel",
           "shards": 1
@@ -1072,7 +1213,9 @@
         },
         {
           "name": "vm tests",
-          "arguments": ["-ndartk-asan-linux-release-${arch}"],
+          "arguments": [
+            "-ndartk-asan-linux-release-${arch}"
+          ],
           "environment": {
             "ASAN_OPTIONS": "handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
             "ASAN_SYMBOLIZER_PATH": "buildtools/linux-x64/clang/bin/llvm-symbolizer"
@@ -1112,7 +1255,9 @@
         },
         {
           "name": "vm tests",
-          "arguments": ["-ndartk-lsan-linux-release-${arch}"],
+          "arguments": [
+            "-ndartk-lsan-linux-release-${arch}"
+          ],
           "environment": {
             "ASAN_OPTIONS": "handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
             "ASAN_SYMBOLIZER_PATH": "buildtools/linux-x64/clang/bin/llvm-symbolizer"
@@ -1153,7 +1298,8 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-msan-linux-release-${arch}"],
+            "-ndartk-msan-linux-release-${arch}"
+          ],
           "environment": {
             "MSAN_OPTIONS": "handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
             "MSAN_SYMBOLIZER_PATH": "buildtools/linux-x64/clang/bin/llvm-symbolizer"
@@ -1192,7 +1338,9 @@
         },
         {
           "name": "vm tests",
-          "arguments": ["-ndartk-tsan-linux-release-${arch}"],
+          "arguments": [
+            "-ndartk-tsan-linux-release-${arch}"
+          ],
           "environment": {
             "TSAN_OPTIONS": "handle_segv=0:disable_coredump=0:abort_on_error=1",
             "TSAN_SYMBOLIZER_PATH": "buildtools/linux-x64/clang/bin/llvm-symbolizer"
@@ -1231,7 +1379,9 @@
         },
         {
           "name": "vm tests",
-          "arguments": ["-ndartk-ubsan-linux-release-${arch}"],
+          "arguments": [
+            "-ndartk-ubsan-linux-release-${arch}"
+          ],
           "environment": {
             "UBSAN_OPTIONS": "handle_segv=0:disable_coredump=0:abort_on_error=1"
           }
@@ -1256,12 +1406,15 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
+          "arguments": [
+            "runtime_kernel"
+          ]
         },
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-${system}-${mode}-${arch}"],
+            "-ndartk-${system}-${mode}-${arch}"
+          ],
           "fileset": "vm-kernel",
           "shards": 10
         }
@@ -1281,15 +1434,18 @@
           "script": "tools/build.py",
           "arguments": [
             "--nnbd",
-            "create_sdk"
+            "create_sdk",
+            "runtime_kernel"
           ]
         },
         {
           "name": "vm weak tests with asserts",
           "arguments": [
             "-ndartk-weak-asserts-${system}-${mode}-${arch}",
+            "ffi",
             "language",
-            "lib/mirrors"
+            "lib/mirrors",
+            "standalone/io"
           ]
         }
       ]
@@ -1311,12 +1467,15 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
+          "arguments": [
+            "runtime_kernel"
+          ]
         },
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-${system}-${mode}-${arch}"],
+            "-ndartk-${system}-${mode}-${arch}"
+          ],
           "fileset": "vm-kernel",
           "shards": 10
         },
@@ -1342,12 +1501,15 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
+          "arguments": [
+            "runtime_kernel"
+          ]
         },
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-checked-linux-release-x64"],
+            "-ndartk-checked-linux-release-x64"
+          ],
           "fileset": "vm-kernel",
           "shards": 10
         }
@@ -1364,11 +1526,15 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
+          "arguments": [
+            "runtime_kernel"
+          ]
         },
         {
           "name": "vm tests",
-          "arguments": ["-ndartk-${system}-${mode}-${arch}"],
+          "arguments": [
+            "-ndartk-${system}-${mode}-${arch}"
+          ],
           "fileset": "vm-kernel",
           "shards": 1
         }
@@ -1394,7 +1560,8 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-napp_jitk-linux-${mode}-x64"],
+            "-napp_jitk-linux-${mode}-x64"
+          ],
           "shards": 6,
           "fileset": "vm-kernel"
         }
@@ -1412,7 +1579,10 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["dart2js_bot", "dartdevc_test"]
+          "arguments": [
+            "dart2js_bot",
+            "dartdevc_test"
+          ]
         },
         {
           "name": "ddk co19_2 tests",
@@ -1493,7 +1663,10 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["dart2js_bot", "dartdevc_test"]
+          "arguments": [
+            "dart2js_bot",
+            "dartdevc_test"
+          ]
         },
         {
           "name": "ddk co19_2 tests",
@@ -1527,7 +1700,10 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--nnbd", "dartdevc_test"]
+          "arguments": [
+            "--nnbd",
+            "dartdevc_test"
+          ]
         },
         {
           "name": "check dart nnbd sdk for static errors",
@@ -1561,6 +1737,15 @@
           "fileset": "dart2js_nnbd"
         },
         {
+          "name": "ddc legacy weak co19 tests",
+          "arguments": [
+            "-ndartdevk-weak-linux-release-chrome",
+            "co19_2"
+          ],
+          "shards": 6,
+          "fileset": "dart2js_nnbd"
+        },
+        {
           "name": "ddc nnbd strong tests",
           "arguments": [
             "-ndartdevk-strong-linux-release-chrome",
@@ -1590,7 +1775,10 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["dart2js_bot", "dartdevc_test"]
+          "arguments": [
+            "dart2js_bot",
+            "dartdevc_test"
+          ]
         },
         {
           "name": "ddc kernel tests",
@@ -1670,7 +1858,8 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-optcounter-linux-release-${arch}"],
+            "-ndartk-optcounter-linux-release-${arch}"
+          ],
           "fileset": "vm-kernel",
           "shards": 10
         }
@@ -1688,15 +1877,18 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
+          "arguments": [
+            "runtime_kernel"
+          ]
         },
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-reload-${system}-${mode}-${arch}"],
-            "fileset": "vm-kernel",
-            "shards": 10
-          }
+            "-ndartk-reload-${system}-${mode}-${arch}"
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
+        }
       ]
     },
     {
@@ -1711,15 +1903,18 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["runtime_kernel"]
+          "arguments": [
+            "runtime_kernel"
+          ]
         },
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-reload-rollback-linux-${mode}-x64"],
-            "fileset": "vm-kernel",
-            "shards": 10
-          }
+            "-ndartk-reload-rollback-linux-${mode}-x64"
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
+        }
       ]
     },
     {
@@ -1733,7 +1928,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "dart2js modular tests",
@@ -1767,7 +1964,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["dart2js_bot"]
+          "arguments": [
+            "dart2js_bot"
+          ]
         },
         {
           "name": "dart2js tests",
@@ -1827,7 +2026,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["dart2js_bot"]
+          "arguments": [
+            "dart2js_bot"
+          ]
         },
         {
           "name": "dart2js old-rti tests",
@@ -1875,7 +2076,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "dart2js tests",
@@ -1930,7 +2133,9 @@
       ]
     },
     {
-      "builders": ["dart2js-minified-strong-linux-x64-d8"],
+      "builders": [
+        "dart2js-minified-strong-linux-x64-d8"
+      ],
       "meta": {
         "description": "dart2js tests for Dart 2.0."
       },
@@ -1938,7 +2143,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "dart2js tests",
@@ -1997,7 +2204,9 @@
       ]
     },
     {
-      "builders": ["dart2js-csp-minified-linux-x64-chrome"],
+      "builders": [
+        "dart2js-csp-minified-linux-x64-chrome"
+      ],
       "meta": {
         "description": "dart2js tests in csp and minified mode."
       },
@@ -2005,7 +2214,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "dart2js tests",
@@ -2048,7 +2259,9 @@
       ]
     },
     {
-      "builders": ["dart2js-nnbd-linux-x64-chrome"],
+      "builders": [
+        "dart2js-nnbd-linux-x64-chrome"
+      ],
       "meta": {
         "description": "dart2js tests for NNBD."
       },
@@ -2069,7 +2282,7 @@
             "--enable-experiment=non-nullable",
             "pkg/dev_compiler/tool/check_nnbd_sdk.dart",
             "--target",
-            "dart2js_server"
+            "dart2js"
           ]
         },
         {
@@ -2098,20 +2311,31 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--arch=ia32,x64,arm,arm64",
-                        "--mode=release", "create_sdk"]
+          "arguments": [
+            "--arch=ia32,x64,arm,arm64",
+            "--mode=release",
+            "create_sdk"
+          ]
         },
         {
           "name": "build gen_kernel.dart.snapshot",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64,arm,arm64", "--mode=release",
-                        "copy_gen_kernel_snapshot"]
+          "arguments": [
+            "--arch=x64,arm,arm64",
+            "--mode=release",
+            "copy_gen_kernel_snapshot"
+          ]
         },
         {
           "name": "build gen_snapshot and dartaotruntime",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64,arm,arm64", "--mode=product",
-                        "copy_gen_snapshot", "copy_dartaotruntime", "copy_vm_dill_files"]
+          "arguments": [
+            "--arch=x64,arm,arm64",
+            "--mode=product",
+            "copy_gen_snapshot",
+            "copy_dartaotruntime",
+            "copy_vm_dill_files"
+          ]
         },
         {
           "name": "upload sdk",
@@ -2127,7 +2351,9 @@
         {
           "name": "build api docs",
           "script": "tools/bots/dart_sdk.py",
-          "arguments": [ "api_docs" ]
+          "arguments": [
+            "api_docs"
+          ]
         },
         {
           "name": "upload abi dills",
@@ -2140,7 +2366,9 @@
       ]
     },
     {
-      "builders": ["dart-sdk-mac"],
+      "builders": [
+        "dart-sdk-mac"
+      ],
       "meta": {
         "description": "This configuration is used by the sdk-builders for MacOS."
       },
@@ -2148,20 +2376,31 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64",
-                        "--mode=release", "create_sdk"]
+          "arguments": [
+            "--arch=x64",
+            "--mode=release",
+            "create_sdk"
+          ]
         },
         {
           "name": "build gen_kernel.dart.snapshot",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64", "--mode=release",
-                        "copy_gen_kernel_snapshot"]
+          "arguments": [
+            "--arch=x64",
+            "--mode=release",
+            "copy_gen_kernel_snapshot"
+          ]
         },
         {
           "name": "build gen_snapshot and dartaotruntime",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64", "--mode=product",
-                        "copy_gen_snapshot", "copy_dartaotruntime", "copy_vm_dill_files"]
+          "arguments": [
+            "--arch=x64",
+            "--mode=product",
+            "copy_gen_snapshot",
+            "copy_dartaotruntime",
+            "copy_vm_dill_files"
+          ]
         },
         {
           "name": "upload sdk",
@@ -2177,7 +2416,9 @@
       ]
     },
     {
-      "builders": ["dart-sdk-win"],
+      "builders": [
+        "dart-sdk-win"
+      ],
       "meta": {
         "description": "This configuration is used by the sdk-builders for Windows. It also adds CQ coverage for building on Windows."
       },
@@ -2185,20 +2426,32 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--arch=ia32,x64",
-                        "--mode=release", "create_sdk", "runtime_kernel"]
+          "arguments": [
+            "--arch=ia32,x64",
+            "--mode=release",
+            "create_sdk",
+            "runtime_kernel"
+          ]
         },
         {
           "name": "build gen_kernel.dart.snapshot",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64", "--mode=release",
-                        "copy_gen_kernel_snapshot"]
+          "arguments": [
+            "--arch=x64",
+            "--mode=release",
+            "copy_gen_kernel_snapshot"
+          ]
         },
         {
           "name": "build gen_snapshot and dartaotruntime",
           "script": "tools/build.py",
-          "arguments": ["--arch=x64", "--mode=product",
-                        "copy_gen_snapshot", "copy_dartaotruntime", "copy_vm_dill_files"]
+          "arguments": [
+            "--arch=x64",
+            "--mode=product",
+            "copy_gen_snapshot",
+            "copy_dartaotruntime",
+            "copy_vm_dill_files"
+          ]
         },
         {
           "name": "upload sdk",
@@ -2214,7 +2467,9 @@
       ]
     },
     {
-      "builders": ["debianpackage-linux"],
+      "builders": [
+        "debianpackage-linux"
+      ],
       "meta": {
         "description": "This configuration is used by the debianpackage-builder."
       },
@@ -2232,7 +2487,9 @@
       ]
     },
     {
-      "builders": ["versionchecker-linux"],
+      "builders": [
+        "versionchecker-linux"
+      ],
       "meta": {
         "description": "This configuration is used by the versionchecker-builder."
       },
@@ -2260,7 +2517,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "analyzer unit tests",
@@ -2283,7 +2542,8 @@
         {
           "name": "analyze tests enable-asserts",
           "arguments": [
-            "-nanalyzer-asserts-${system}"]
+            "-nanalyzer-asserts-${system}"
+          ]
         },
         {
           "name": "analyze pkg tests enable-asserts",
@@ -2316,7 +2576,9 @@
         {
           "name": "check nnbd sdk (ddc patch) for static errors",
           "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": ["pkg/dev_compiler/tool/check_nnbd_sdk.dart"]
+          "arguments": [
+            "pkg/dev_compiler/tool/check_nnbd_sdk.dart"
+          ]
         }
       ]
     },
@@ -2331,22 +2593,29 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["--nnbd", "create_sdk"]
+          "arguments": [
+            "--nnbd",
+            "create_sdk"
+          ]
         },
         {
           "name": "analyze nnbd strong tests enable-asserts",
           "arguments": [
             "-nanalyzer-asserts-strong-${system}",
+            "ffi",
             "language",
-            "lib/mirrors"
+            "lib/mirrors",
+            "standalone/io"
           ]
         },
         {
           "name": "analyze nnbd weak tests enable-asserts",
           "arguments": [
             "-nanalyzer-asserts-weak-${system}",
+            "ffi",
             "language",
-            "lib/mirrors"
+            "lib/mirrors",
+            "standalone/io"
           ]
         },
         {
@@ -2370,149 +2639,235 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "analyze runtime/tools/dartfuzz",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "runtime/tools/dartfuzz"]
+          "arguments": [
+            "--fatal-warnings",
+            "runtime/tools/dartfuzz"
+          ]
         },
         {
           "name": "analyze pkg/analysis_server",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/analysis_server"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/analysis_server"
+          ]
         },
         {
           "name": "analyze pkg/analysis_server_client",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/analysis_server_client"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/analysis_server_client"
+          ]
         },
         {
           "name": "analyze pkg/analyzer",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/analyzer"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/analyzer"
+          ]
         },
         {
           "name": "analyze pkg/analyzer_cli",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/analyzer_cli"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/analyzer_cli"
+          ]
         },
         {
           "name": "analyze pkg/analyzer_plugin",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/analyzer_plugin"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/analyzer_plugin"
+          ]
         },
         {
           "name": "analyze pkg/async_helper",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/async_helper"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/async_helper"
+          ]
         },
         {
           "name": "analyze pkg/build_integration",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/build_integration"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/build_integration"
+          ]
         },
         {
           "name": "analyze pkg/compiler",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/compiler"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/compiler"
+          ]
         },
         {
           "name": "analyze pkg/dartdev",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/dartdev"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/dartdev"
+          ]
         },
         {
           "name": "analyze pkg/dart2js_tools",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/dart2js_tools"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/dart2js_tools"
+          ]
         },
         {
           "name": "analyze pkg/dart_internal",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/dart_internal"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/dart_internal"
+          ]
         },
         {
           "name": "analyze pkg/dev_compiler",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "--fatal-lints", "pkg/dev_compiler"]
+          "arguments": [
+            "--fatal-warnings",
+            "--fatal-lints",
+            "pkg/dev_compiler"
+          ]
         },
         {
           "name": "analyze pkg/expect",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/expect"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/expect"
+          ]
         },
         {
           "name": "analyze pkg/front_end",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/front_end"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/front_end"
+          ]
         },
         {
           "name": "analyze pkg/js",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/js"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/js"
+          ]
         },
         {
           "name": "analyze pkg/js_ast",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/js_ast"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/js_ast"
+          ]
         },
         {
           "name": "analyze pkg/kernel",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/kernel"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/kernel"
+          ]
         },
         {
           "name": "analyze pkg/meta",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/meta"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/meta"
+          ]
         },
         {
           "name": "analyze pkg/native_stack_traces",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/native_stack_traces"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/native_stack_traces"
+          ]
         },
         {
           "name": "analyze pkg/smith",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/smith"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/smith"
+          ]
         },
         {
           "name": "analyze pkg/sourcemap_testing",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/sourcemap_testing"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/sourcemap_testing"
+          ]
         },
         {
           "name": "analyze pkg/status_file",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/status_file"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/status_file"
+          ]
         },
         {
           "name": "analyze pkg/telemetry",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/telemetry"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/telemetry"
+          ]
         },
         {
           "name": "analyze pkg/test_runner",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/test_runner"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/test_runner"
+          ]
         },
         {
           "name": "analyze pkg/testing",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/testing"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/testing"
+          ]
         },
         {
           "name": "analyze pkg/vm",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/vm"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/vm"
+          ]
         },
         {
           "name": "analyze pkg/vm_service",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "pkg/vm_service"]
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/vm_service"
+          ]
         },
-
         {
           "name": "analyze runtime/observatory",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
@@ -2525,12 +2880,16 @@
         {
           "name": "analyze tools/gardening",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": ["--fatal-warnings", "tools/gardening"]
+          "arguments": [
+            "--fatal-warnings",
+            "tools/gardening"
+          ]
         },
         {
           "name": "dartanalyzer --batch tests",
           "arguments": [
-            "-nanalyzer-${system}"]
+            "-nanalyzer-${system}"
+          ]
         },
         {
           "name": "dartanalyzer --batch pkg tests",
@@ -2542,9 +2901,11 @@
       ]
     },
     {
-      "builders": ["pkg-linux-release",
-                   "pkg-win-release",
-                   "pkg-mac-release"],
+      "builders": [
+        "pkg-linux-release",
+        "pkg-win-release",
+        "pkg-mac-release"
+      ],
       "meta": {
         "description": "This configuration is used by the release pkg builders."
       },
@@ -2552,7 +2913,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "package unit tests",
@@ -2578,7 +2941,9 @@
       ]
     },
     {
-      "builders": ["pkg-linux-debug"],
+      "builders": [
+        "pkg-linux-debug"
+      ],
       "meta": {
         "description": "This configuration is used by the debug pkg builders."
       },
@@ -2586,7 +2951,9 @@
         {
           "name": "build dart",
           "script": "tools/build.py",
-          "arguments": ["create_sdk"]
+          "arguments": [
+            "create_sdk"
+          ]
         },
         {
           "name": "package unit tests",
@@ -2612,7 +2979,9 @@
       ]
     },
     {
-      "builders": ["benchmark-linux"],
+      "builders": [
+        "benchmark-linux"
+      ],
       "meta": {
         "description": "Verify benchmarks build and run correctly.",
         "owner": "sortie@google.com"
@@ -2621,12 +2990,16 @@
         {
           "name": "see this step for details on what this bot does",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["noop"]
+          "arguments": [
+            "noop"
+          ]
         },
         {
           "name": "remove out directory to do a clean linux-ia32 build",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["clean"]
+          "arguments": [
+            "clean"
+          ]
         },
         {
           "name": "build linux-ia32 for benchmarking",
@@ -2635,22 +3008,29 @@
             "--mode=release",
             "--arch=ia32",
             "create_sdk",
-            "runtime"]
+            "runtime"
+          ]
         },
         {
           "name": "archive linux-ia32 for benchmarking",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["linux-ia32-archive"]
+          "arguments": [
+            "linux-ia32-archive"
+          ]
         },
         {
           "name": "try linux-ia32 benchmarking",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["linux-ia32-benchmark"]
+          "arguments": [
+            "linux-ia32-benchmark"
+          ]
         },
         {
           "name": "remove out directory to do a clean linux-x64 build",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["clean"]
+          "arguments": [
+            "clean"
+          ]
         },
         {
           "name": "build linux-x64 for benchmarking",
@@ -2661,22 +3041,29 @@
             "create_sdk",
             "runtime",
             "gen_snapshot",
-            "dart_precompiled_runtime"]
+            "dart_precompiled_runtime"
+          ]
         },
         {
           "name": "archive linux-x64 for benchmarking",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["linux-x64-archive"]
+          "arguments": [
+            "linux-x64-archive"
+          ]
         },
         {
           "name": "try linux-x64 benchmarking",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["linux-x64-benchmark"]
+          "arguments": [
+            "linux-x64-benchmark"
+          ]
         },
         {
           "name": "remove out directory to do a clean linux-x64-bytecode build",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["clean"]
+          "arguments": [
+            "clean"
+          ]
         },
         {
           "name": "generate ninja for linux-x64-bytecode",
@@ -2684,7 +3071,8 @@
           "arguments": [
             "--mode=release",
             "--arch=x64",
-            "--bytecode"]
+            "--bytecode"
+          ]
         },
         {
           "name": "build linux-x64-bytecode for benchmarking",
@@ -2695,17 +3083,22 @@
             "create_sdk",
             "runtime",
             "gen_snapshot",
-            "dart_precompiled_runtime"]
+            "dart_precompiled_runtime"
+          ]
         },
         {
           "name": "archive linux-x64-bytecode for benchmarking",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["linux-x64-bytecode-archive"]
+          "arguments": [
+            "linux-x64-bytecode-archive"
+          ]
         },
         {
           "name": "try linux-x64-bytecode benchmarking",
           "script": "tools/bots/try_benchmarks.sh",
-          "arguments": ["linux-x64-bytecode-benchmark"]
+          "arguments": [
+            "linux-x64-bytecode-benchmark"
+          ]
         }
       ]
     },
@@ -2751,14 +3144,15 @@
           ]
         },
         {
-
           "name": "compile flutter tests",
           "script": "tools/bots/flutter/compile_flutter.sh"
         }
       ]
     },
     {
-      "builders": ["fuzz-linux"],
+      "builders": [
+        "fuzz-linux"
+      ],
       "meta": {
         "description": "This configuration is used for fuzz testing."
       },
@@ -2880,8 +3274,7 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartkp-${system}-${mode}-simarm-crossword",
-            "--gen-snapshot=${build_root}/gen_snapshot"
+            "-ndartkp-${system}-${mode}-simarm-crossword"
           ],
           "fileset": "vm-kernel",
           "shards": 10
diff --git a/tools/dom/nnbd_src/AttributeMap.dart b/tools/dom/nnbd_src/AttributeMap.dart
new file mode 100644
index 0000000..e8c79aa
--- /dev/null
+++ b/tools/dom/nnbd_src/AttributeMap.dart
@@ -0,0 +1,298 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+abstract class _AttributeMap extends MapBase<String, String> {
+  final Element _element;
+
+  _AttributeMap(this._element);
+
+  void addAll(Map<String, String> other) {
+    other.forEach((k, v) {
+      this[k] = v;
+    });
+  }
+
+  Map<K, V> cast<K, V>() => Map.castFrom<String, String, K, V>(this);
+  bool containsValue(Object? value) {
+    for (var v in this.values) {
+      if (value == v) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  String putIfAbsent(String key, String ifAbsent()) {
+    if (!containsKey(key)) {
+      this[key] = ifAbsent();
+    }
+    return this[key];
+  }
+
+  void clear() {
+    for (var key in keys) {
+      remove(key);
+    }
+  }
+
+  void forEach(void f(String key, String value)) {
+    for (var key in keys) {
+      var value = this[key];
+      f(key, value);
+    }
+  }
+
+  Iterable<String> get keys {
+    // TODO: generate a lazy collection instead.
+    var attributes = _element._attributes;
+    var keys = <String>[];
+    for (int i = 0, len = attributes.length; i < len; i++) {
+      _Attr attr = attributes[i];
+      if (_matches(attr)) {
+        keys.add(attr.name);
+      }
+    }
+    return keys;
+  }
+
+  Iterable<String> get values {
+    // TODO: generate a lazy collection instead.
+    var attributes = _element._attributes;
+    var values = <String>[];
+    for (int i = 0, len = attributes.length; i < len; i++) {
+      _Attr attr = attributes[i];
+      if (_matches(attr)) {
+        values.add(attr.value);
+      }
+    }
+    return values;
+  }
+
+  /**
+   * Returns true if there is no {key, value} pair in the map.
+   */
+  bool get isEmpty {
+    return length == 0;
+  }
+
+  /**
+   * Returns true if there is at least one {key, value} pair in the map.
+   */
+  bool get isNotEmpty => !isEmpty;
+
+  /**
+   * Checks to see if the node should be included in this map.
+   */
+  bool _matches(_Attr node);
+}
+
+/**
+ * Wrapper to expose [Element.attributes] as a typed map.
+ */
+class _ElementAttributeMap extends _AttributeMap {
+  _ElementAttributeMap(Element element) : super(element);
+
+  bool containsKey(Object? key) {
+    return _element._hasAttribute(key);
+  }
+
+  String? operator [](Object? key) {
+    return _element.getAttribute(key);
+  }
+
+  void operator []=(String key, String value) {
+    _element.setAttribute(key, value);
+  }
+
+  @pragma('dart2js:tryInline')
+  String? remove(Object? key) => key is String ? _remove(_element, key) : null;
+
+  /**
+   * The number of {key, value} pairs in the map.
+   */
+  int get length {
+    return keys.length;
+  }
+
+  bool _matches(_Attr node) => node._namespaceUri == null;
+
+  // Inline this because almost all call sites of [remove] do not use [value],
+  // and the annotations on the `getAttribute` call allow it to be removed.
+  @pragma('dart2js:tryInline')
+  static String _remove(Element element, String key) {
+    String value = JS(
+        // throws:null(1) is not accurate since [key] could be malformed, but
+        // [key] is checked again by `removeAttributeNS`.
+        'returns:String|Null;depends:all;effects:none;throws:null(1)',
+        '#.getAttribute(#)',
+        element,
+        key);
+    JS('', '#.removeAttribute(#)', element, key);
+    return value;
+  }
+}
+
+/**
+ * Wrapper to expose namespaced attributes as a typed map.
+ */
+class _NamespacedAttributeMap extends _AttributeMap {
+  final String _namespace;
+
+  _NamespacedAttributeMap(Element element, this._namespace) : super(element);
+
+  bool containsKey(Object? key) {
+    return _element._hasAttributeNS(_namespace, key);
+  }
+
+  String? operator [](Object? key) {
+    return _element.getAttributeNS(_namespace, key);
+  }
+
+  void operator []=(String key, String value) {
+    _element.setAttributeNS(_namespace, key, value);
+  }
+
+  @pragma('dart2js:tryInline')
+  String? remove(Object? key) =>
+      key is String ? _remove(_namespace, _element, key) : null;
+
+  /**
+   * The number of {key, value} pairs in the map.
+   */
+  int get length {
+    return keys.length;
+  }
+
+  bool _matches(_Attr node) => node._namespaceUri == _namespace;
+
+  // Inline this because almost all call sites of [remove] do not use the
+  // returned [value], and the annotations on the `getAttributeNS` call allow it
+  // to be removed.
+  @pragma('dart2js:tryInline')
+  static String _remove(String namespace, Element element, String key) {
+    String value = JS(
+        // throws:null(1) is not accurate since [key] could be malformed, but
+        // [key] is checked again by `removeAttributeNS`.
+        'returns:String|Null;depends:all;effects:none;throws:null(1)',
+        '#.getAttributeNS(#, #)',
+        element,
+        namespace,
+        key);
+    JS('', '#.removeAttributeNS(#, #)', element, namespace, key);
+    return value;
+  }
+}
+
+/**
+ * Provides a Map abstraction on top of data-* attributes, similar to the
+ * dataSet in the old DOM.
+ */
+class _DataAttributeMap extends MapBase<String, String> {
+  final Map<String, String> _attributes;
+
+  _DataAttributeMap(this._attributes);
+
+  // interface Map
+
+  void addAll(Map<String, String> other) {
+    other.forEach((k, v) {
+      this[k] = v;
+    });
+  }
+
+  Map<K, V> cast<K, V>() => Map.castFrom<String, String, K, V>(this);
+  // TODO: Use lazy iterator when it is available on Map.
+  bool containsValue(Object? value) => values.any((v) => v == value);
+
+  bool containsKey(Object? key) => _attributes.containsKey(_attr(key));
+
+  String? operator [](Object? key) => _attributes[_attr(key)];
+
+  void operator []=(String key, String value) {
+    _attributes[_attr(key)] = value;
+  }
+
+  String putIfAbsent(String key, String ifAbsent()) =>
+      _attributes.putIfAbsent(_attr(key), ifAbsent);
+
+  String? remove(Object? key) => _attributes.remove(_attr(key));
+
+  void clear() {
+    // Needs to operate on a snapshot since we are mutating the collection.
+    for (String key in keys) {
+      remove(key);
+    }
+  }
+
+  void forEach(void f(String key, String value)) {
+    _attributes.forEach((String key, String value) {
+      if (_matches(key)) {
+        f(_strip(key), value);
+      }
+    });
+  }
+
+  Iterable<String> get keys {
+    final keys = <String>[];
+    _attributes.forEach((String key, String value) {
+      if (_matches(key)) {
+        keys.add(_strip(key));
+      }
+    });
+    return keys;
+  }
+
+  Iterable<String> get values {
+    final values = <String>[];
+    _attributes.forEach((String key, String value) {
+      if (_matches(key)) {
+        values.add(value);
+      }
+    });
+    return values;
+  }
+
+  int get length => keys.length;
+
+  // TODO: Use lazy iterator when it is available on Map.
+  bool get isEmpty => length == 0;
+
+  bool get isNotEmpty => !isEmpty;
+
+  // Helpers.
+  String _attr(String key) => 'data-${_toHyphenedName(key)}';
+  bool _matches(String key) => key.startsWith('data-');
+  String _strip(String key) => _toCamelCase(key.substring(5));
+
+  /**
+   * Converts a string name with hyphens into an identifier, by removing hyphens
+   * and capitalizing the following letter. Optionally [startUppercase] to
+   * capitalize the first letter.
+   */
+  String _toCamelCase(String hyphenedName, {bool startUppercase: false}) {
+    var segments = hyphenedName.split('-');
+    int start = startUppercase ? 0 : 1;
+    for (int i = start; i < segments.length; i++) {
+      var segment = segments[i];
+      if (segment.length > 0) {
+        // Character between 'a'..'z' mapped to 'A'..'Z'
+        segments[i] = '${segment[0].toUpperCase()}${segment.substring(1)}';
+      }
+    }
+    return segments.join('');
+  }
+
+  /** Reverse of [toCamelCase]. */
+  String _toHyphenedName(String word) {
+    var sb = new StringBuffer();
+    for (int i = 0; i < word.length; i++) {
+      var lower = word[i].toLowerCase();
+      if (word[i] != lower && i > 0) sb.write('-');
+      sb.write(lower);
+    }
+    return sb.toString();
+  }
+}
diff --git a/tools/dom/nnbd_src/CanvasImageSource.dart b/tools/dom/nnbd_src/CanvasImageSource.dart
new file mode 100644
index 0000000..ffcd34a
--- /dev/null
+++ b/tools/dom/nnbd_src/CanvasImageSource.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * An object that can be drawn to a 2D canvas rendering context.
+ *
+ * The image drawn to the canvas depends on the type of this object:
+ *
+ * * If this object is an [ImageElement], then this element's image is
+ * drawn to the canvas. If this element is an animated image, then this
+ * element's poster frame is drawn. If this element has no poster frame, then
+ * the first frame of animation is drawn.
+ *
+ * * If this object is a [VideoElement], then the frame at this element's current
+ * playback position is drawn to the canvas.
+ *
+ * * If this object is a [CanvasElement], then this element's bitmap is drawn to
+ * the canvas.
+ *
+ * **Note:** Currently all versions of Internet Explorer do not support
+ * drawing a video element to a canvas. You may also encounter problems drawing
+ * a video to a canvas in Firefox if the source of the video is a data URL.
+ *
+ * ## See also
+ *
+ * * [CanvasRenderingContext2D.drawImage]
+ * * [CanvasRenderingContext2D.drawImageToRect]
+ * * [CanvasRenderingContext2D.drawImageScaled]
+ * * [CanvasRenderingContext2D.drawImageScaledFromSource]
+ *
+ * ## Other resources
+ *
+ * * [Image sources for 2D rendering
+ *   contexts](https://html.spec.whatwg.org/multipage/scripting.html#image-sources-for-2d-rendering-contexts)
+ *   from WHATWG.
+ * * [Drawing images](https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-drawimage)
+ *   from WHATWG.
+ */
+abstract class CanvasImageSource {}
diff --git a/tools/dom/nnbd_src/CrossFrameTypes.dart b/tools/dom/nnbd_src/CrossFrameTypes.dart
new file mode 100644
index 0000000..a2aa545
--- /dev/null
+++ b/tools/dom/nnbd_src/CrossFrameTypes.dart
@@ -0,0 +1,156 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * Top-level container for a browser tab or window.
+ *
+ * In a web browser, a [WindowBase] object represents any browser window. This
+ * object contains the window's state and its relation to other
+ * windows, such as which window opened this window.
+ *
+ * **Note:** This class represents any window, while [Window] is
+ * used to access the properties and content of the current window or tab.
+ *
+ * ## See also
+ *
+ * * [Window]
+ *
+ * ## Other resources
+ *
+ * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
+ * * [Window](http://www.w3.org/TR/Window/) from the W3C.
+ */
+abstract class WindowBase implements EventTarget {
+  // Fields.
+
+  /**
+   * The current location of this window.
+   *
+   *     Location currentLocation = window.location;
+   *     print(currentLocation.href); // 'http://www.example.com:80/'
+   */
+  LocationBase get location;
+
+  /**
+   * The current session history for this window.
+   *
+   * ## Other resources
+   *
+   * * [Session history and navigation
+   *   specification](https://html.spec.whatwg.org/multipage/browsers.html#history)
+   *   from WHATWG.
+   */
+  HistoryBase get history;
+
+  /**
+   * Indicates whether this window has been closed.
+   *
+   *     print(window.closed); // 'false'
+   *     window.close();
+   *     print(window.closed); // 'true'
+   */
+  bool get closed;
+
+  /**
+   * A reference to the window that opened this one.
+   *
+   *     Window thisWindow = window;
+   *     WindowBase otherWindow = thisWindow.open('http://www.example.com/', 'foo');
+   *     print(otherWindow.opener == thisWindow); // 'true'
+   */
+  WindowBase get opener;
+
+  /**
+   * A reference to the parent of this window.
+   *
+   * If this [WindowBase] has no parent, [parent] will return a reference to
+   * the [WindowBase] itself.
+   *
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *     print(myIframe.contentWindow.parent == window) // 'true'
+   *
+   *     print(window.parent == window) // 'true'
+   */
+  WindowBase get parent;
+
+  /**
+   * A reference to the topmost window in the window hierarchy.
+   *
+   * If this [WindowBase] is the topmost [WindowBase], [top] will return a
+   * reference to the [WindowBase] itself.
+   *
+   *     // Add an IFrame to the current window.
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *
+   *     // Add an IFrame inside of the other IFrame.
+   *     IFrameElement innerIFrame = new IFrameElement();
+   *     myIFrame.elements.add(innerIFrame);
+   *
+   *     print(myIframe.contentWindow.top == window) // 'true'
+   *     print(innerIFrame.contentWindow.top == window) // 'true'
+   *
+   *     print(window.top == window) // 'true'
+   */
+  WindowBase get top;
+
+  // Methods.
+  /**
+   * Closes the window.
+   *
+   * This method should only succeed if the [WindowBase] object is
+   * **script-closeable** and the window calling [close] is allowed to navigate
+   * the window.
+   *
+   * A window is script-closeable if it is either a window
+   * that was opened by another window, or if it is a window with only one
+   * document in its history.
+   *
+   * A window might not be allowed to navigate, and therefore close, another
+   * window due to browser security features.
+   *
+   *     var other = window.open('http://www.example.com', 'foo');
+   *     // Closes other window, as it is script-closeable.
+   *     other.close();
+   *     print(other.closed); // 'true'
+   *
+   *     var newLocation = window.location
+   *         ..href = 'http://www.mysite.com';
+   *     window.location = newLocation;
+   *     // Does not close this window, as the history has changed.
+   *     window.close();
+   *     print(window.closed); // 'false'
+   *
+   * See also:
+   *
+   * * [Window close discussion](http://www.w3.org/TR/html5/browsers.html#dom-window-close) from the W3C
+   */
+  void close();
+
+  /**
+   * Sends a cross-origin message.
+   *
+   * ## Other resources
+   *
+   * * [window.postMessage](https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage)
+   *   from MDN.
+   * * [Cross-document messaging](https://html.spec.whatwg.org/multipage/comms.html#web-messaging)
+   *   from WHATWG.
+   */
+  void postMessage(var message, String targetOrigin,
+      [List<MessagePort> messagePorts]);
+}
+
+abstract class LocationBase {
+  void set href(String val);
+}
+
+abstract class HistoryBase {
+  void back();
+  void forward();
+  void go(int distance);
+}
diff --git a/tools/dom/nnbd_src/CssClassSet.dart b/tools/dom/nnbd_src/CssClassSet.dart
new file mode 100644
index 0000000..d2a28e1
--- /dev/null
+++ b/tools/dom/nnbd_src/CssClassSet.dart
@@ -0,0 +1,111 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/** A Set that stores the CSS class names for an element. */
+abstract class CssClassSet implements Set<String> {
+  /**
+   * Adds the class [value] to the element if it is not on it, removes it if it
+   * is.
+   *
+   * If [shouldAdd] is true, then we always add that [value] to the element. If
+   * [shouldAdd] is false then we always remove [value] from the element.
+   *
+   * If this corresponds to one element, returns `true` if [value] is present
+   * after the operation, and returns `false` if [value] is absent after the
+   * operation.
+   *
+   * If this corresponds to many elements, `null` is always returned.
+   *
+   * [value] must be a valid 'token' representing a single class, i.e. a
+   * non-empty string containing no whitespace.  To toggle multiple classes, use
+   * [toggleAll].
+   */
+  bool toggle(String value, [bool shouldAdd]);
+
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
+  bool get frozen;
+
+  /**
+   * Determine if this element contains the class [value].
+   *
+   * This is the Dart equivalent of jQuery's
+   * [hasClass](http://api.jquery.com/hasClass/).
+   *
+   * [value] must be a valid 'token' representing a single class, i.e. a
+   * non-empty string containing no whitespace.
+   */
+  bool contains(Object? value);
+
+  /**
+   * Add the class [value] to element.
+   *
+   * [add] and [addAll] are the Dart equivalent of jQuery's
+   * [addClass](http://api.jquery.com/addClass/).
+   *
+   * If this CssClassSet corresponds to one element. Returns true if [value] was
+   * added to the set, otherwise false.
+   *
+   * If this corresponds to many elements, `null` is always returned.
+   *
+   * [value] must be a valid 'token' representing a single class, i.e. a
+   * non-empty string containing no whitespace.  To add multiple classes use
+   * [addAll].
+   */
+  bool add(String value);
+
+  /**
+   * Remove the class [value] from element, and return true on successful
+   * removal.
+   *
+   * [remove] and [removeAll] are the Dart equivalent of jQuery's
+   * [removeClass](http://api.jquery.com/removeClass/).
+   *
+   * [value] must be a valid 'token' representing a single class, i.e. a
+   * non-empty string containing no whitespace.  To remove multiple classes, use
+   * [removeAll].
+   */
+  bool remove(Object? value);
+
+  /**
+   * Add all classes specified in [iterable] to element.
+   *
+   * [add] and [addAll] are the Dart equivalent of jQuery's
+   * [addClass](http://api.jquery.com/addClass/).
+   *
+   * Each element of [iterable] must be a valid 'token' representing a single
+   * class, i.e. a non-empty string containing no whitespace.
+   */
+  void addAll(Iterable<String> iterable);
+
+  /**
+   * Remove all classes specified in [iterable] from element.
+   *
+   * [remove] and [removeAll] are the Dart equivalent of jQuery's
+   * [removeClass](http://api.jquery.com/removeClass/).
+   *
+   * Each element of [iterable] must be a valid 'token' representing a single
+   * class, i.e. a non-empty string containing no whitespace.
+   */
+  void removeAll(Iterable<Object?> iterable);
+
+  /**
+   * Toggles all classes specified in [iterable] on element.
+   *
+   * Iterate through [iterable]'s items, and add it if it is not on it, or
+   * remove it if it is. This is the Dart equivalent of jQuery's
+   * [toggleClass](http://api.jquery.com/toggleClass/).
+   * If [shouldAdd] is true, then we always add all the classes in [iterable]
+   * element. If [shouldAdd] is false then we always remove all the classes in
+   * [iterable] from the element.
+   *
+   * Each element of [iterable] must be a valid 'token' representing a single
+   * class, i.e. a non-empty string containing no whitespace.
+   */
+  void toggleAll(Iterable<String> iterable, [bool shouldAdd]);
+}
diff --git a/tools/dom/nnbd_src/CssRectangle.dart b/tools/dom/nnbd_src/CssRectangle.dart
new file mode 100644
index 0000000..9cdef06
--- /dev/null
+++ b/tools/dom/nnbd_src/CssRectangle.dart
@@ -0,0 +1,372 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * A rectangle representing all the content of the element in the
+ * [box model](http://www.w3.org/TR/CSS2/box.html).
+ */
+class _ContentCssRect extends CssRect {
+  _ContentCssRect(Element element) : super(element);
+
+  num get height =>
+      _element.offsetHeight + _addOrSubtractToBoxModel(_HEIGHT, _CONTENT);
+
+  num get width =>
+      _element.offsetWidth + _addOrSubtractToBoxModel(_WIDTH, _CONTENT);
+
+  /**
+   * Set the height to `newHeight`.
+   *
+   * newHeight can be either a [num] representing the height in pixels or a
+   * [Dimension] object. Values of newHeight that are less than zero are
+   * converted to effectively setting the height to 0. This is equivalent to the
+   * `height` function in jQuery and the calculated `height` CSS value,
+   * converted to a num in pixels.
+   */
+  set height(dynamic newHeight) {
+    if (newHeight is Dimension) {
+      Dimension newHeightAsDimension = newHeight;
+      if (newHeightAsDimension.value < 0) newHeight = new Dimension.px(0);
+      _element.style.height = newHeight.toString();
+    } else if (newHeight is num) {
+      if (newHeight < 0) newHeight = 0;
+      _element.style.height = '${newHeight}px';
+    } else {
+      throw new ArgumentError("newHeight is not a Dimension or num");
+    }
+  }
+
+  /**
+   * Set the current computed width in pixels of this element.
+   *
+   * newWidth can be either a [num] representing the width in pixels or a
+   * [Dimension] object. This is equivalent to the `width` function in jQuery
+   * and the calculated
+   * `width` CSS value, converted to a dimensionless num in pixels.
+   */
+  set width(dynamic newWidth) {
+    if (newWidth is Dimension) {
+      Dimension newWidthAsDimension = newWidth;
+      if (newWidthAsDimension.value < 0) newWidth = new Dimension.px(0);
+      _element.style.width = newWidth.toString();
+    } else if (newWidth is num) {
+      if (newWidth < 0) newWidth = 0;
+      _element.style.width = '${newWidth}px';
+    } else {
+      throw new ArgumentError("newWidth is not a Dimension or num");
+    }
+  }
+
+  num get left =>
+      _element.getBoundingClientRect().left -
+      _addOrSubtractToBoxModel(['left'], _CONTENT);
+  num get top =>
+      _element.getBoundingClientRect().top -
+      _addOrSubtractToBoxModel(['top'], _CONTENT);
+}
+
+/**
+ * A list of element content rectangles in the
+ * [box model](http://www.w3.org/TR/CSS2/box.html).
+ */
+class _ContentCssListRect extends _ContentCssRect {
+  List<Element> _elementList;
+
+  _ContentCssListRect(List<Element> elementList) : super(elementList.first) {
+    _elementList = elementList;
+  }
+
+  /**
+   * Set the height to `newHeight`.
+   *
+   * Values of newHeight that are less than zero are converted to effectively
+   * setting the height to 0. This is equivalent to the `height`
+   * function in jQuery and the calculated `height` CSS value, converted to a
+   * num in pixels.
+   */
+  set height(newHeight) {
+    _elementList.forEach((e) => e.contentEdge.height = newHeight);
+  }
+
+  /**
+   * Set the current computed width in pixels of this element.
+   *
+   * This is equivalent to the `width` function in jQuery and the calculated
+   * `width` CSS value, converted to a dimensionless num in pixels.
+   */
+  set width(newWidth) {
+    _elementList.forEach((e) => e.contentEdge.width = newWidth);
+  }
+}
+
+/**
+ * A rectangle representing the dimensions of the space occupied by the
+ * element's content + padding in the
+ * [box model](http://www.w3.org/TR/CSS2/box.html).
+ */
+class _PaddingCssRect extends CssRect {
+  _PaddingCssRect(element) : super(element);
+  num get height =>
+      _element.offsetHeight + _addOrSubtractToBoxModel(_HEIGHT, _PADDING);
+  num get width =>
+      _element.offsetWidth + _addOrSubtractToBoxModel(_WIDTH, _PADDING);
+
+  num get left =>
+      _element.getBoundingClientRect().left -
+      _addOrSubtractToBoxModel(['left'], _PADDING);
+  num get top =>
+      _element.getBoundingClientRect().top -
+      _addOrSubtractToBoxModel(['top'], _PADDING);
+}
+
+/**
+ * A rectangle representing the dimensions of the space occupied by the
+ * element's content + padding + border in the
+ * [box model](http://www.w3.org/TR/CSS2/box.html).
+ */
+class _BorderCssRect extends CssRect {
+  _BorderCssRect(element) : super(element);
+  num get height => _element.offsetHeight;
+  num get width => _element.offsetWidth;
+
+  num get left => _element.getBoundingClientRect().left;
+  num get top => _element.getBoundingClientRect().top;
+}
+
+/**
+ * A rectangle representing the dimensions of the space occupied by the
+ * element's content + padding + border + margin in the
+ * [box model](http://www.w3.org/TR/CSS2/box.html).
+ */
+class _MarginCssRect extends CssRect {
+  _MarginCssRect(element) : super(element);
+  num get height =>
+      _element.offsetHeight + _addOrSubtractToBoxModel(_HEIGHT, _MARGIN);
+  num get width =>
+      _element.offsetWidth + _addOrSubtractToBoxModel(_WIDTH, _MARGIN);
+
+  num get left =>
+      _element.getBoundingClientRect().left -
+      _addOrSubtractToBoxModel(['left'], _MARGIN);
+  num get top =>
+      _element.getBoundingClientRect().top -
+      _addOrSubtractToBoxModel(['top'], _MARGIN);
+}
+
+/**
+ * A class for representing CSS dimensions.
+ *
+ * In contrast to the more general purpose [Rectangle] class, this class's
+ * values are mutable, so one can change the height of an element
+ * programmatically.
+ *
+ * _Important_ _note_: use of these methods will perform CSS calculations that
+ * can trigger a browser reflow. Therefore, use of these properties _during_ an
+ * animation frame is discouraged. See also:
+ * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
+ */
+abstract class CssRect implements Rectangle<num> {
+  Element _element;
+
+  CssRect(this._element);
+
+  num get left;
+
+  num get top;
+
+  /**
+   * The height of this rectangle.
+   *
+   * This is equivalent to the `height` function in jQuery and the calculated
+   * `height` CSS value, converted to a dimensionless num in pixels. Unlike
+   * [getBoundingClientRect], `height` will return the same numerical width if
+   * the element is hidden or not.
+   */
+  num get height;
+
+  /**
+   * The width of this rectangle.
+   *
+   * This is equivalent to the `width` function in jQuery and the calculated
+   * `width` CSS value, converted to a dimensionless num in pixels. Unlike
+   * [getBoundingClientRect], `width` will return the same numerical width if
+   * the element is hidden or not.
+   */
+  num get width;
+
+  /**
+   * Set the height to `newHeight`.
+   *
+   * newHeight can be either a [num] representing the height in pixels or a
+   * [Dimension] object. Values of newHeight that are less than zero are
+   * converted to effectively setting the height to 0. This is equivalent to the
+   * `height` function in jQuery and the calculated `height` CSS value,
+   * converted to a num in pixels.
+   *
+   * Note that only the content height can actually be set via this method.
+   */
+  set height(dynamic newHeight) {
+    throw new UnsupportedError("Can only set height for content rect.");
+  }
+
+  /**
+   * Set the current computed width in pixels of this element.
+   *
+   * newWidth can be either a [num] representing the width in pixels or a
+   * [Dimension] object. This is equivalent to the `width` function in jQuery
+   * and the calculated
+   * `width` CSS value, converted to a dimensionless num in pixels.
+   *
+   * Note that only the content width can be set via this method.
+   */
+  set width(dynamic newWidth) {
+    throw new UnsupportedError("Can only set width for content rect.");
+  }
+
+  /**
+   * Return a value that is used to modify the initial height or width
+   * measurement of an element. Depending on the value (ideally an enum) passed
+   * to augmentingMeasurement, we may need to add or subtract margin, padding,
+   * or border values, depending on the measurement we're trying to obtain.
+   */
+  num _addOrSubtractToBoxModel(
+      List<String> dimensions, String augmentingMeasurement) {
+    // getComputedStyle always returns pixel values (hence, computed), so we're
+    // always dealing with pixels in this method.
+    var styles = _element.getComputedStyle();
+
+    num val = 0;
+
+    for (String measurement in dimensions) {
+      // The border-box and default box model both exclude margin in the regular
+      // height/width calculation, so add it if we want it for this measurement.
+      if (augmentingMeasurement == _MARGIN) {
+        val += new Dimension.css(
+                styles.getPropertyValue('$augmentingMeasurement-$measurement'))
+            .value;
+      }
+
+      // The border-box includes padding and border, so remove it if we want
+      // just the content itself.
+      if (augmentingMeasurement == _CONTENT) {
+        val -= new Dimension.css(
+                styles.getPropertyValue('${_PADDING}-$measurement'))
+            .value;
+      }
+
+      // At this point, we don't wan't to augment with border or margin,
+      // so remove border.
+      if (augmentingMeasurement != _MARGIN) {
+        val -= new Dimension.css(
+                styles.getPropertyValue('border-${measurement}-width'))
+            .value;
+      }
+    }
+    return val;
+  }
+
+  // TODO(jacobr): these methods are duplicated from _RectangleBase in dart:math
+  // Ideally we would provide a RectangleMixin class that provides this
+  // implementation. In an ideal world we would exp
+  /** The x-coordinate of the right edge. */
+  num get right => left + width;
+  /** The y-coordinate of the bottom edge. */
+  num get bottom => top + height;
+
+  String toString() {
+    return 'Rectangle ($left, $top) $width x $height';
+  }
+
+  bool operator ==(other) =>
+      other is Rectangle &&
+      left == other.left &&
+      top == other.top &&
+      right == other.right &&
+      bottom == other.bottom;
+
+  int get hashCode => _JenkinsSmiHash.hash4(
+      left.hashCode, top.hashCode, right.hashCode, bottom.hashCode);
+
+  /**
+   * Computes the intersection of `this` and [other].
+   *
+   * The intersection of two axis-aligned rectangles, if any, is always another
+   * axis-aligned rectangle.
+   *
+   * Returns the intersection of this and `other`, or `null` if they don't
+   * intersect.
+   */
+  Rectangle<num> intersection(Rectangle<num> other) {
+    var x0 = max(left, other.left);
+    var x1 = min(left + width, other.left + other.width);
+
+    if (x0 <= x1) {
+      var y0 = max(top, other.top);
+      var y1 = min(top + height, other.top + other.height);
+
+      if (y0 <= y1) {
+        return new Rectangle<num>(x0, y0, x1 - x0, y1 - y0);
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns true if `this` intersects [other].
+   */
+  bool intersects(Rectangle<num> other) {
+    return (left <= other.left + other.width &&
+        other.left <= left + width &&
+        top <= other.top + other.height &&
+        other.top <= top + height);
+  }
+
+  /**
+   * Returns a new rectangle which completely contains `this` and [other].
+   */
+  Rectangle<num> boundingBox(Rectangle<num> other) {
+    var right = max(this.left + this.width, other.left + other.width);
+    var bottom = max(this.top + this.height, other.top + other.height);
+
+    var left = min(this.left, other.left);
+    var top = min(this.top, other.top);
+
+    return new Rectangle<num>(left, top, right - left, bottom - top);
+  }
+
+  /**
+   * Tests whether `this` entirely contains [another].
+   */
+  bool containsRectangle(Rectangle<num> another) {
+    return left <= another.left &&
+        left + width >= another.left + another.width &&
+        top <= another.top &&
+        top + height >= another.top + another.height;
+  }
+
+  /**
+   * Tests whether [another] is inside or along the edges of `this`.
+   */
+  bool containsPoint(Point<num> another) {
+    return another.x >= left &&
+        another.x <= left + width &&
+        another.y >= top &&
+        another.y <= top + height;
+  }
+
+  Point<num> get topLeft => new Point<num>(this.left, this.top);
+  Point<num> get topRight => new Point<num>(this.left + this.width, this.top);
+  Point<num> get bottomRight =>
+      new Point<num>(this.left + this.width, this.top + this.height);
+  Point<num> get bottomLeft =>
+      new Point<num>(this.left, this.top + this.height);
+}
+
+final _HEIGHT = ['top', 'bottom'];
+final _WIDTH = ['right', 'left'];
+final _CONTENT = 'content';
+final _PADDING = 'padding';
+final _MARGIN = 'margin';
diff --git a/tools/dom/nnbd_src/Dimension.dart b/tools/dom/nnbd_src/Dimension.dart
new file mode 100644
index 0000000..502b68d
--- /dev/null
+++ b/tools/dom/nnbd_src/Dimension.dart
@@ -0,0 +1,82 @@
+part of html;
+
+/**
+ * Class representing a
+ * [length measurement](https://developer.mozilla.org/en-US/docs/Web/CSS/length)
+ * in CSS.
+ */
+class Dimension {
+  num _value;
+  String _unit;
+
+  /** Set this CSS Dimension to a percentage `value`. */
+  Dimension.percent(this._value) : _unit = '%';
+
+  /** Set this CSS Dimension to a pixel `value`. */
+  Dimension.px(this._value) : _unit = 'px';
+
+  /** Set this CSS Dimension to a pica `value`. */
+  Dimension.pc(this._value) : _unit = 'pc';
+
+  /** Set this CSS Dimension to a point `value`. */
+  Dimension.pt(this._value) : _unit = 'pt';
+
+  /** Set this CSS Dimension to an inch `value`. */
+  Dimension.inch(this._value) : _unit = 'in';
+
+  /** Set this CSS Dimension to a centimeter `value`. */
+  Dimension.cm(this._value) : _unit = 'cm';
+
+  /** Set this CSS Dimension to a millimeter `value`. */
+  Dimension.mm(this._value) : _unit = 'mm';
+
+  /**
+   * Set this CSS Dimension to the specified number of ems.
+   *
+   * 1em is equal to the current font size. (So 2ems is equal to double the font
+   * size). This is useful for producing website layouts that scale nicely with
+   * the user's desired font size.
+   */
+  Dimension.em(this._value) : _unit = 'em';
+
+  /**
+   * Set this CSS Dimension to the specified number of x-heights.
+   *
+   * One ex is equal to the x-height of a font's baseline to its mean line,
+   * generally the height of the letter "x" in the font, which is usually about
+   * half the font-size.
+   */
+  Dimension.ex(this._value) : _unit = 'ex';
+
+  /**
+   * Construct a Dimension object from the valid, simple CSS string `cssValue`
+   * that represents a distance measurement.
+   *
+   * This constructor is intended as a convenience method for working with
+   * simplistic CSS length measurements. Non-numeric values such as `auto` or
+   * `inherit` or invalid CSS will cause this constructor to throw a
+   * FormatError.
+   */
+  Dimension.css(String cssValue) {
+    if (cssValue == '') cssValue = '0px';
+    if (cssValue.endsWith('%')) {
+      _unit = '%';
+    } else {
+      _unit = cssValue.substring(cssValue.length - 2);
+    }
+    if (cssValue.contains('.')) {
+      _value =
+          double.parse(cssValue.substring(0, cssValue.length - _unit.length));
+    } else {
+      _value = int.parse(cssValue.substring(0, cssValue.length - _unit.length));
+    }
+  }
+
+  /** Print out the CSS String representation of this value. */
+  String toString() {
+    return '${_value}${_unit}';
+  }
+
+  /** Return a unitless, numerical value of this CSS value. */
+  num get value => this._value;
+}
diff --git a/tools/dom/nnbd_src/EventListener.dart b/tools/dom/nnbd_src/EventListener.dart
new file mode 100644
index 0000000..60b29f1
--- /dev/null
+++ b/tools/dom/nnbd_src/EventListener.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+typedef EventListener(Event event);
diff --git a/tools/dom/nnbd_src/EventStreamProvider.dart b/tools/dom/nnbd_src/EventStreamProvider.dart
new file mode 100644
index 0000000..cb7e69b
--- /dev/null
+++ b/tools/dom/nnbd_src/EventStreamProvider.dart
@@ -0,0 +1,457 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * A factory to expose DOM events as Streams.
+ */
+class EventStreamProvider<T extends Event> {
+  final String _eventType;
+
+  const EventStreamProvider(this._eventType);
+
+  /**
+   * Gets a [Stream] for this event type, on the specified target.
+   *
+   * This will always return a broadcast stream so multiple listeners can be
+   * used simultaneously.
+   *
+   * This may be used to capture DOM events:
+   *
+   *     Element.keyDownEvent.forTarget(element, useCapture: true).listen(...);
+   *
+   *     // Alternate method:
+   *     Element.keyDownEvent.forTarget(element).capture(...);
+   *
+   * Or for listening to an event which will bubble through the DOM tree:
+   *
+   *     MediaElement.pauseEvent.forTarget(document.body).listen(...);
+   *
+   * See also:
+   *
+   * * [EventTarget.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)
+   *   from MDN.
+   */
+  Stream<T> forTarget(EventTarget e, {bool useCapture: false}) =>
+      new _EventStream<T>(e, _eventType, useCapture);
+
+  /**
+   * Gets an [ElementEventStream] for this event type, on the specified element.
+   *
+   * This will always return a broadcast stream so multiple listeners can be
+   * used simultaneously.
+   *
+   * This may be used to capture DOM events:
+   *
+   *     Element.keyDownEvent.forElement(element, useCapture: true).listen(...);
+   *
+   *     // Alternate method:
+   *     Element.keyDownEvent.forElement(element).capture(...);
+   *
+   * Or for listening to an event which will bubble through the DOM tree:
+   *
+   *     MediaElement.pauseEvent.forElement(document.body).listen(...);
+   *
+   * See also:
+   *
+   * * [EventTarget.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)
+   *   from MDN.
+   */
+  ElementStream<T> forElement(Element e, {bool useCapture: false}) {
+    return new _ElementEventStreamImpl<T>(e, _eventType, useCapture);
+  }
+
+  /**
+   * Gets an [ElementEventStream] for this event type, on the list of elements.
+   *
+   * This will always return a broadcast stream so multiple listeners can be
+   * used simultaneously.
+   *
+   * This may be used to capture DOM events:
+   *
+   *     Element.keyDownEvent._forElementList(element, useCapture: true).listen(...);
+   *
+   * See also:
+   *
+   * * [EventTarget.addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)
+   *   from MDN.
+   */
+  ElementStream<T> _forElementList(ElementList<Element> e,
+      {bool useCapture: false}) {
+    return new _ElementListEventStreamImpl<T>(e, _eventType, useCapture);
+  }
+
+  /**
+   * Gets the type of the event which this would listen for on the specified
+   * event target.
+   *
+   * The target is necessary because some browsers may use different event names
+   * for the same purpose and the target allows differentiating browser support.
+   */
+  String getEventType(EventTarget target) {
+    return _eventType;
+  }
+}
+
+/** A specialized Stream available to [Element]s to enable event delegation. */
+abstract class ElementStream<T extends Event> implements Stream<T> {
+  /**
+   * Return a stream that only fires when the particular event fires for
+   * elements matching the specified CSS selector.
+   *
+   * This is the Dart equivalent to jQuery's
+   * [delegate](http://api.jquery.com/delegate/).
+   */
+  Stream<T> matches(String selector);
+
+  /**
+   * Adds a capturing subscription to this stream.
+   *
+   * If the target of the event is a descendant of the element from which this
+   * stream derives then [onData] is called before the event propagates down to
+   * the target. This is the opposite of bubbling behavior, where the event
+   * is first processed for the event target and then bubbles upward.
+   *
+   * ## Other resources
+   *
+   * * [Event Capture](http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-capture)
+   *   from the W3C DOM Events specification.
+   */
+  StreamSubscription<T> capture(void onData(T event));
+}
+
+/**
+ * Adapter for exposing DOM events as Dart streams.
+ */
+class _EventStream<T extends Event> extends Stream<T> {
+  final EventTarget _target;
+  final String _eventType;
+  final bool _useCapture;
+
+  _EventStream(this._target, this._eventType, this._useCapture);
+
+  // DOM events are inherently multi-subscribers.
+  Stream<T> asBroadcastStream(
+          {void onListen(StreamSubscription<T> subscription)?,
+          void onCancel(StreamSubscription<T> subscription)?}) =>
+      this;
+  bool get isBroadcast => true;
+
+  // TODO(9757): Inlining should be smart and inline only when inlining would
+  // enable scalar replacement of an immediately allocated receiver.
+  @pragma('dart2js:tryInline')
+  StreamSubscription<T> listen(void onData(T event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
+    return new _EventStreamSubscription<T>(
+        this._target, this._eventType, onData, this._useCapture);
+  }
+}
+
+bool _matchesWithAncestors(Event event, String selector) {
+  var target = event.target;
+  return target is Element ? target.matchesWithAncestors(selector) : false;
+}
+
+/**
+ * Adapter for exposing DOM Element events as streams, while also allowing
+ * event delegation.
+ */
+class _ElementEventStreamImpl<T extends Event> extends _EventStream<T>
+    implements ElementStream<T> {
+  _ElementEventStreamImpl(target, eventType, useCapture)
+      : super(target, eventType, useCapture);
+
+  Stream<T> matches(String selector) =>
+      this.where((event) => _matchesWithAncestors(event, selector)).map((e) {
+        e._selector = selector;
+        return e;
+      });
+
+  StreamSubscription<T> capture(void onData(T event)) =>
+      new _EventStreamSubscription<T>(
+          this._target, this._eventType, onData, true);
+}
+
+/**
+ * Adapter for exposing events on a collection of DOM Elements as streams,
+ * while also allowing event delegation.
+ */
+class _ElementListEventStreamImpl<T extends Event> extends Stream<T>
+    implements ElementStream<T> {
+  final Iterable<Element> _targetList;
+  final bool _useCapture;
+  final String _eventType;
+
+  _ElementListEventStreamImpl(
+      this._targetList, this._eventType, this._useCapture);
+
+  Stream<T> matches(String selector) =>
+      this.where((event) => _matchesWithAncestors(event, selector)).map((e) {
+        e._selector = selector;
+        return e;
+      });
+
+  // Delegate all regular Stream behavior to a wrapped Stream.
+  StreamSubscription<T> listen(void onData(T event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
+    var pool = new _StreamPool<T>.broadcast();
+    for (var target in _targetList) {
+      pool.add(new _EventStream<T>(target, _eventType, _useCapture));
+    }
+    return pool.stream.listen(onData,
+        onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+  }
+
+  StreamSubscription<T> capture(void onData(T event)) {
+    var pool = new _StreamPool<T>.broadcast();
+    for (var target in _targetList) {
+      pool.add(new _EventStream<T>(target, _eventType, true));
+    }
+    return pool.stream.listen(onData);
+  }
+
+  Stream<T> asBroadcastStream(
+          {void onListen(StreamSubscription<T> subscription)?,
+          void onCancel(StreamSubscription<T> subscription)?}) =>
+      this;
+  bool get isBroadcast => true;
+}
+
+// We would like this to just be EventListener<T> but that typdef cannot
+// use generics until dartbug/26276 is fixed.
+typedef _EventListener<T extends Event>(T event);
+
+class _EventStreamSubscription<T extends Event> extends StreamSubscription<T> {
+  int _pauseCount = 0;
+  EventTarget _target;
+  final String _eventType;
+  EventListener _onData;
+  final bool _useCapture;
+
+  // TODO(leafp): It would be better to write this as
+  // _onData = onData == null ? null :
+  //   onData is void Function(Event)
+  //     ? _wrapZone<Event>(onData)
+  //     : _wrapZone<Event>((e) => onData(e as T))
+  // In order to support existing tests which pass the wrong type of events but
+  // use a more general listener, without causing as much slowdown for things
+  // which are typed correctly.  But this currently runs afoul of restrictions
+  // on is checks for compatibility with the VM.
+  _EventStreamSubscription(
+      this._target, this._eventType, void onData(T event), this._useCapture)
+      : _onData = onData == null
+            ? null
+            : _wrapZone<Event>((e) => (onData as dynamic)(e)) {
+    _tryResume();
+  }
+
+  Future cancel() {
+    if (_canceled) return null;
+
+    _unlisten();
+    // Clear out the target to indicate this is complete.
+    _target = null;
+    _onData = null;
+    return null;
+  }
+
+  bool get _canceled => _target == null;
+
+  void onData(void handleData(T event)?) {
+    if (_canceled) {
+      throw new StateError("Subscription has been canceled.");
+    }
+    // Remove current event listener.
+    _unlisten();
+    _onData = handleData == null
+        ? null
+        : _wrapZone<Event>((e) => (handleData as dynamic)(e));
+    _tryResume();
+  }
+
+  /// Has no effect.
+  void onError(Function? handleError) {}
+
+  /// Has no effect.
+  void onDone(void handleDone()?) {}
+
+  void pause([Future? resumeSignal]) {
+    if (_canceled) return;
+    ++_pauseCount;
+    _unlisten();
+
+    if (resumeSignal != null) {
+      resumeSignal.whenComplete(resume);
+    }
+  }
+
+  bool get isPaused => _pauseCount > 0;
+
+  void resume() {
+    if (_canceled || !isPaused) return;
+    --_pauseCount;
+    _tryResume();
+  }
+
+  void _tryResume() {
+    if (_onData != null && !isPaused) {
+      _target.addEventListener(_eventType, _onData, _useCapture);
+    }
+  }
+
+  void _unlisten() {
+    if (_onData != null) {
+      _target.removeEventListener(_eventType, _onData, _useCapture);
+    }
+  }
+
+  Future<E> asFuture<E>([E? futureValue]) {
+    // We just need a future that will never succeed or fail.
+    var completer = new Completer<E>();
+    return completer.future;
+  }
+}
+
+/**
+ * A stream of custom events, which enables the user to "fire" (add) their own
+ * custom events to a stream.
+ */
+abstract class CustomStream<T extends Event> implements Stream<T> {
+  /**
+   * Add the following custom event to the stream for dispatching to interested
+   * listeners.
+   */
+  void add(T event);
+}
+
+class _CustomEventStreamImpl<T extends Event> extends Stream<T>
+    implements CustomStream<T> {
+  StreamController<T> _streamController;
+  /** The type of event this stream is providing (e.g. "keydown"). */
+  String _type;
+
+  _CustomEventStreamImpl(String type) {
+    _type = type;
+    _streamController = new StreamController.broadcast(sync: true);
+  }
+
+  // Delegate all regular Stream behavior to our wrapped Stream.
+  StreamSubscription<T> listen(void onData(T event)?,
+      {Function? onError, void onDone()?, bool? cancelOnError}) {
+    return _streamController.stream.listen(onData,
+        onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+  }
+
+  Stream<T> asBroadcastStream(
+          {void onListen(StreamSubscription<T> subscription)?,
+          void onCancel(StreamSubscription<T> subscription)?}) =>
+      _streamController.stream;
+
+  bool get isBroadcast => true;
+
+  void add(T event) {
+    if (event.type == _type) _streamController.add(event);
+  }
+}
+
+class _CustomKeyEventStreamImpl extends _CustomEventStreamImpl<KeyEvent>
+    implements CustomStream<KeyEvent> {
+  _CustomKeyEventStreamImpl(String type) : super(type);
+
+  void add(KeyEvent event) {
+    if (event.type == _type) {
+      event.currentTarget.dispatchEvent(event._parent);
+      _streamController.add(event);
+    }
+  }
+}
+
+/**
+ * A pool of streams whose events are unified and emitted through a central
+ * stream.
+ */
+// TODO (efortuna): Remove this when Issue 12218 is addressed.
+class _StreamPool<T> {
+  StreamController<T> _controller;
+
+  /// Subscriptions to the streams that make up the pool.
+  var _subscriptions = new Map<Stream<T>, StreamSubscription<T>>();
+
+  /**
+   * Creates a new stream pool where [stream] can be listened to more than
+   * once.
+   *
+   * Any events from buffered streams in the pool will be emitted immediately,
+   * regardless of whether [stream] has any subscribers.
+   */
+  _StreamPool.broadcast() {
+    _controller =
+        new StreamController<T>.broadcast(sync: true, onCancel: close);
+  }
+
+  /**
+   * The stream through which all events from streams in the pool are emitted.
+   */
+  Stream<T> get stream => _controller.stream;
+
+  /**
+   * Adds [stream] as a member of this pool.
+   *
+   * Any events from [stream] will be emitted through [this.stream]. If
+   * [stream] is sync, they'll be emitted synchronously; if [stream] is async,
+   * they'll be emitted asynchronously.
+   */
+  void add(Stream<T> stream) {
+    if (_subscriptions.containsKey(stream)) return;
+    _subscriptions[stream] = stream.listen(_controller.add,
+        onError: _controller.addError, onDone: () => remove(stream));
+  }
+
+  /** Removes [stream] as a member of this pool. */
+  void remove(Stream<T> stream) {
+    var subscription = _subscriptions.remove(stream);
+    if (subscription != null) subscription.cancel();
+  }
+
+  /** Removes all streams from this pool and closes [stream]. */
+  void close() {
+    for (var subscription in _subscriptions.values) {
+      subscription.cancel();
+    }
+    _subscriptions.clear();
+    _controller.close();
+  }
+}
+
+/**
+ * A factory to expose DOM events as streams, where the DOM event name has to
+ * be determined on the fly (for example, mouse wheel events).
+ */
+class _CustomEventStreamProvider<T extends Event>
+    implements EventStreamProvider<T> {
+  final _eventTypeGetter;
+  const _CustomEventStreamProvider(this._eventTypeGetter);
+
+  Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
+    return new _EventStream<T>(e, _eventTypeGetter(e), useCapture);
+  }
+
+  ElementStream<T> forElement(Element e, {bool useCapture: false}) {
+    return new _ElementEventStreamImpl<T>(e, _eventTypeGetter(e), useCapture);
+  }
+
+  ElementStream<T> _forElementList(ElementList<Element> e,
+      {bool useCapture: false}) {
+    return new _ElementListEventStreamImpl<T>(
+        e, _eventTypeGetter(e), useCapture);
+  }
+
+  String getEventType(EventTarget target) {
+    return _eventTypeGetter(target);
+  }
+
+  String get _eventType =>
+      throw new UnsupportedError('Access type through getEventType method.');
+}
diff --git a/tools/dom/nnbd_src/Html5NodeValidator.dart b/tools/dom/nnbd_src/Html5NodeValidator.dart
new file mode 100644
index 0000000..e6bdede
--- /dev/null
+++ b/tools/dom/nnbd_src/Html5NodeValidator.dart
@@ -0,0 +1,449 @@
+// DO NOT EDIT- this file is generated from running tool/generator.sh.
+
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+/**
+ * A Dart DOM validator generated from Caja whitelists.
+ *
+ * This contains a whitelist of known HTML tagNames and attributes and will only
+ * accept known good values.
+ *
+ * See also:
+ *
+ * * <https://code.google.com/p/google-caja/wiki/CajaWhitelists>
+ */
+class _Html5NodeValidator implements NodeValidator {
+  static final Set<String> _allowedElements = new Set.from([
+    'A',
+    'ABBR',
+    'ACRONYM',
+    'ADDRESS',
+    'AREA',
+    'ARTICLE',
+    'ASIDE',
+    'AUDIO',
+    'B',
+    'BDI',
+    'BDO',
+    'BIG',
+    'BLOCKQUOTE',
+    'BR',
+    'BUTTON',
+    'CANVAS',
+    'CAPTION',
+    'CENTER',
+    'CITE',
+    'CODE',
+    'COL',
+    'COLGROUP',
+    'COMMAND',
+    'DATA',
+    'DATALIST',
+    'DD',
+    'DEL',
+    'DETAILS',
+    'DFN',
+    'DIR',
+    'DIV',
+    'DL',
+    'DT',
+    'EM',
+    'FIELDSET',
+    'FIGCAPTION',
+    'FIGURE',
+    'FONT',
+    'FOOTER',
+    'FORM',
+    'H1',
+    'H2',
+    'H3',
+    'H4',
+    'H5',
+    'H6',
+    'HEADER',
+    'HGROUP',
+    'HR',
+    'I',
+    'IFRAME',
+    'IMG',
+    'INPUT',
+    'INS',
+    'KBD',
+    'LABEL',
+    'LEGEND',
+    'LI',
+    'MAP',
+    'MARK',
+    'MENU',
+    'METER',
+    'NAV',
+    'NOBR',
+    'OL',
+    'OPTGROUP',
+    'OPTION',
+    'OUTPUT',
+    'P',
+    'PRE',
+    'PROGRESS',
+    'Q',
+    'S',
+    'SAMP',
+    'SECTION',
+    'SELECT',
+    'SMALL',
+    'SOURCE',
+    'SPAN',
+    'STRIKE',
+    'STRONG',
+    'SUB',
+    'SUMMARY',
+    'SUP',
+    'TABLE',
+    'TBODY',
+    'TD',
+    'TEXTAREA',
+    'TFOOT',
+    'TH',
+    'THEAD',
+    'TIME',
+    'TR',
+    'TRACK',
+    'TT',
+    'U',
+    'UL',
+    'VAR',
+    'VIDEO',
+    'WBR',
+  ]);
+
+  static const _standardAttributes = const <String>[
+    '*::class',
+    '*::dir',
+    '*::draggable',
+    '*::hidden',
+    '*::id',
+    '*::inert',
+    '*::itemprop',
+    '*::itemref',
+    '*::itemscope',
+    '*::lang',
+    '*::spellcheck',
+    '*::title',
+    '*::translate',
+    'A::accesskey',
+    'A::coords',
+    'A::hreflang',
+    'A::name',
+    'A::shape',
+    'A::tabindex',
+    'A::target',
+    'A::type',
+    'AREA::accesskey',
+    'AREA::alt',
+    'AREA::coords',
+    'AREA::nohref',
+    'AREA::shape',
+    'AREA::tabindex',
+    'AREA::target',
+    'AUDIO::controls',
+    'AUDIO::loop',
+    'AUDIO::mediagroup',
+    'AUDIO::muted',
+    'AUDIO::preload',
+    'BDO::dir',
+    'BODY::alink',
+    'BODY::bgcolor',
+    'BODY::link',
+    'BODY::text',
+    'BODY::vlink',
+    'BR::clear',
+    'BUTTON::accesskey',
+    'BUTTON::disabled',
+    'BUTTON::name',
+    'BUTTON::tabindex',
+    'BUTTON::type',
+    'BUTTON::value',
+    'CANVAS::height',
+    'CANVAS::width',
+    'CAPTION::align',
+    'COL::align',
+    'COL::char',
+    'COL::charoff',
+    'COL::span',
+    'COL::valign',
+    'COL::width',
+    'COLGROUP::align',
+    'COLGROUP::char',
+    'COLGROUP::charoff',
+    'COLGROUP::span',
+    'COLGROUP::valign',
+    'COLGROUP::width',
+    'COMMAND::checked',
+    'COMMAND::command',
+    'COMMAND::disabled',
+    'COMMAND::label',
+    'COMMAND::radiogroup',
+    'COMMAND::type',
+    'DATA::value',
+    'DEL::datetime',
+    'DETAILS::open',
+    'DIR::compact',
+    'DIV::align',
+    'DL::compact',
+    'FIELDSET::disabled',
+    'FONT::color',
+    'FONT::face',
+    'FONT::size',
+    'FORM::accept',
+    'FORM::autocomplete',
+    'FORM::enctype',
+    'FORM::method',
+    'FORM::name',
+    'FORM::novalidate',
+    'FORM::target',
+    'FRAME::name',
+    'H1::align',
+    'H2::align',
+    'H3::align',
+    'H4::align',
+    'H5::align',
+    'H6::align',
+    'HR::align',
+    'HR::noshade',
+    'HR::size',
+    'HR::width',
+    'HTML::version',
+    'IFRAME::align',
+    'IFRAME::frameborder',
+    'IFRAME::height',
+    'IFRAME::marginheight',
+    'IFRAME::marginwidth',
+    'IFRAME::width',
+    'IMG::align',
+    'IMG::alt',
+    'IMG::border',
+    'IMG::height',
+    'IMG::hspace',
+    'IMG::ismap',
+    'IMG::name',
+    'IMG::usemap',
+    'IMG::vspace',
+    'IMG::width',
+    'INPUT::accept',
+    'INPUT::accesskey',
+    'INPUT::align',
+    'INPUT::alt',
+    'INPUT::autocomplete',
+    'INPUT::autofocus',
+    'INPUT::checked',
+    'INPUT::disabled',
+    'INPUT::inputmode',
+    'INPUT::ismap',
+    'INPUT::list',
+    'INPUT::max',
+    'INPUT::maxlength',
+    'INPUT::min',
+    'INPUT::multiple',
+    'INPUT::name',
+    'INPUT::placeholder',
+    'INPUT::readonly',
+    'INPUT::required',
+    'INPUT::size',
+    'INPUT::step',
+    'INPUT::tabindex',
+    'INPUT::type',
+    'INPUT::usemap',
+    'INPUT::value',
+    'INS::datetime',
+    'KEYGEN::disabled',
+    'KEYGEN::keytype',
+    'KEYGEN::name',
+    'LABEL::accesskey',
+    'LABEL::for',
+    'LEGEND::accesskey',
+    'LEGEND::align',
+    'LI::type',
+    'LI::value',
+    'LINK::sizes',
+    'MAP::name',
+    'MENU::compact',
+    'MENU::label',
+    'MENU::type',
+    'METER::high',
+    'METER::low',
+    'METER::max',
+    'METER::min',
+    'METER::value',
+    'OBJECT::typemustmatch',
+    'OL::compact',
+    'OL::reversed',
+    'OL::start',
+    'OL::type',
+    'OPTGROUP::disabled',
+    'OPTGROUP::label',
+    'OPTION::disabled',
+    'OPTION::label',
+    'OPTION::selected',
+    'OPTION::value',
+    'OUTPUT::for',
+    'OUTPUT::name',
+    'P::align',
+    'PRE::width',
+    'PROGRESS::max',
+    'PROGRESS::min',
+    'PROGRESS::value',
+    'SELECT::autocomplete',
+    'SELECT::disabled',
+    'SELECT::multiple',
+    'SELECT::name',
+    'SELECT::required',
+    'SELECT::size',
+    'SELECT::tabindex',
+    'SOURCE::type',
+    'TABLE::align',
+    'TABLE::bgcolor',
+    'TABLE::border',
+    'TABLE::cellpadding',
+    'TABLE::cellspacing',
+    'TABLE::frame',
+    'TABLE::rules',
+    'TABLE::summary',
+    'TABLE::width',
+    'TBODY::align',
+    'TBODY::char',
+    'TBODY::charoff',
+    'TBODY::valign',
+    'TD::abbr',
+    'TD::align',
+    'TD::axis',
+    'TD::bgcolor',
+    'TD::char',
+    'TD::charoff',
+    'TD::colspan',
+    'TD::headers',
+    'TD::height',
+    'TD::nowrap',
+    'TD::rowspan',
+    'TD::scope',
+    'TD::valign',
+    'TD::width',
+    'TEXTAREA::accesskey',
+    'TEXTAREA::autocomplete',
+    'TEXTAREA::cols',
+    'TEXTAREA::disabled',
+    'TEXTAREA::inputmode',
+    'TEXTAREA::name',
+    'TEXTAREA::placeholder',
+    'TEXTAREA::readonly',
+    'TEXTAREA::required',
+    'TEXTAREA::rows',
+    'TEXTAREA::tabindex',
+    'TEXTAREA::wrap',
+    'TFOOT::align',
+    'TFOOT::char',
+    'TFOOT::charoff',
+    'TFOOT::valign',
+    'TH::abbr',
+    'TH::align',
+    'TH::axis',
+    'TH::bgcolor',
+    'TH::char',
+    'TH::charoff',
+    'TH::colspan',
+    'TH::headers',
+    'TH::height',
+    'TH::nowrap',
+    'TH::rowspan',
+    'TH::scope',
+    'TH::valign',
+    'TH::width',
+    'THEAD::align',
+    'THEAD::char',
+    'THEAD::charoff',
+    'THEAD::valign',
+    'TR::align',
+    'TR::bgcolor',
+    'TR::char',
+    'TR::charoff',
+    'TR::valign',
+    'TRACK::default',
+    'TRACK::kind',
+    'TRACK::label',
+    'TRACK::srclang',
+    'UL::compact',
+    'UL::type',
+    'VIDEO::controls',
+    'VIDEO::height',
+    'VIDEO::loop',
+    'VIDEO::mediagroup',
+    'VIDEO::muted',
+    'VIDEO::preload',
+    'VIDEO::width',
+  ];
+
+  static const _uriAttributes = const <String>[
+    'A::href',
+    'AREA::href',
+    'BLOCKQUOTE::cite',
+    'BODY::background',
+    'COMMAND::icon',
+    'DEL::cite',
+    'FORM::action',
+    'IMG::src',
+    'INPUT::src',
+    'INS::cite',
+    'Q::cite',
+    'VIDEO::poster',
+  ];
+
+  final UriPolicy uriPolicy;
+
+  static final Map<String, Function> _attributeValidators = {};
+
+  /**
+   * All known URI attributes will be validated against the UriPolicy, if
+   * [uriPolicy] is null then a default UriPolicy will be used.
+   */
+  _Html5NodeValidator({UriPolicy? uriPolicy})
+      : uriPolicy = uriPolicy ?? UriPolicy() {
+    if (_attributeValidators.isEmpty) {
+      for (var attr in _standardAttributes) {
+        _attributeValidators[attr] = _standardAttributeValidator;
+      }
+
+      for (var attr in _uriAttributes) {
+        _attributeValidators[attr] = _uriAttributeValidator;
+      }
+    }
+  }
+
+  bool allowsElement(Element element) {
+    return _allowedElements.contains(Element._safeTagName(element));
+  }
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    var tagName = Element._safeTagName(element);
+    var validator = _attributeValidators['$tagName::$attributeName'];
+    if (validator == null) {
+      validator = _attributeValidators['*::$attributeName'];
+    }
+    if (validator == null) {
+      return false;
+    }
+    return validator(element, attributeName, value, this);
+  }
+
+  static bool _standardAttributeValidator(Element element, String attributeName,
+      String value, _Html5NodeValidator context) {
+    return true;
+  }
+
+  static bool _uriAttributeValidator(Element element, String attributeName,
+      String value, _Html5NodeValidator context) {
+    return context.uriPolicy.allowsUri(value);
+  }
+}
diff --git a/tools/dom/nnbd_src/ImmutableListMixin.dart b/tools/dom/nnbd_src/ImmutableListMixin.dart
new file mode 100644
index 0000000..9910ebe
--- /dev/null
+++ b/tools/dom/nnbd_src/ImmutableListMixin.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+abstract class ImmutableListMixin<E> implements List<E> {
+  // From Iterable<$E>:
+  Iterator<E> get iterator {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new FixedSizeListIterator<E>(this);
+  }
+
+  // From List<E>:
+  void add(E value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Iterable<E> iterable) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void sort([int compare(E a, E b)?]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  void shuffle([Random? random]) {
+    throw new UnsupportedError("Cannot shuffle immutable List.");
+  }
+
+  void insert(int index, E element) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void insertAll(int index, Iterable<E> iterable) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void setAll(int index, Iterable<E> iterable) {
+    throw new UnsupportedError("Cannot modify an immutable List.");
+  }
+
+  E removeAt(int pos) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  E removeLast() {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  bool remove(Object? object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeWhere(bool test(E element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainWhere(bool test(E element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int end) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void replaceRange(int start, int end, Iterable<E> iterable) {
+    throw new UnsupportedError("Cannot modify an immutable List.");
+  }
+
+  void fillRange(int start, int end, [E? fillValue]) {
+    throw new UnsupportedError("Cannot modify an immutable List.");
+  }
+}
diff --git a/tools/dom/nnbd_src/KeyCode.dart b/tools/dom/nnbd_src/KeyCode.dart
new file mode 100644
index 0000000..a51d062
--- /dev/null
+++ b/tools/dom/nnbd_src/KeyCode.dart
@@ -0,0 +1,331 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * Defines the keycode values for keys that are returned by
+ * KeyboardEvent.keyCode.
+ *
+ * Important note: There is substantial divergence in how different browsers
+ * handle keycodes and their variants in different locales/keyboard layouts. We
+ * provide these constants to help make code processing keys more readable.
+ */
+abstract class KeyCode {
+  // These constant names were borrowed from Closure's Keycode enumeration
+  // class.
+  // https://github.com/google/closure-library/blob/master/closure/goog/events/keycodes.js
+  static const int WIN_KEY_FF_LINUX = 0;
+  static const int MAC_ENTER = 3;
+  static const int BACKSPACE = 8;
+  static const int TAB = 9;
+  /** NUM_CENTER is also NUMLOCK for FF and Safari on Mac. */
+  static const int NUM_CENTER = 12;
+  static const int ENTER = 13;
+  static const int SHIFT = 16;
+  static const int CTRL = 17;
+  static const int ALT = 18;
+  static const int PAUSE = 19;
+  static const int CAPS_LOCK = 20;
+  static const int ESC = 27;
+  static const int SPACE = 32;
+  static const int PAGE_UP = 33;
+  static const int PAGE_DOWN = 34;
+  static const int END = 35;
+  static const int HOME = 36;
+  static const int LEFT = 37;
+  static const int UP = 38;
+  static const int RIGHT = 39;
+  static const int DOWN = 40;
+  static const int NUM_NORTH_EAST = 33;
+  static const int NUM_SOUTH_EAST = 34;
+  static const int NUM_SOUTH_WEST = 35;
+  static const int NUM_NORTH_WEST = 36;
+  static const int NUM_WEST = 37;
+  static const int NUM_NORTH = 38;
+  static const int NUM_EAST = 39;
+  static const int NUM_SOUTH = 40;
+  static const int PRINT_SCREEN = 44;
+  static const int INSERT = 45;
+  static const int NUM_INSERT = 45;
+  static const int DELETE = 46;
+  static const int NUM_DELETE = 46;
+  static const int ZERO = 48;
+  static const int ONE = 49;
+  static const int TWO = 50;
+  static const int THREE = 51;
+  static const int FOUR = 52;
+  static const int FIVE = 53;
+  static const int SIX = 54;
+  static const int SEVEN = 55;
+  static const int EIGHT = 56;
+  static const int NINE = 57;
+  static const int FF_SEMICOLON = 59;
+  static const int FF_EQUALS = 61;
+  /**
+   * CAUTION: The question mark is for US-keyboard layouts. It varies
+   * for other locales and keyboard layouts.
+   */
+  static const int QUESTION_MARK = 63;
+  static const int A = 65;
+  static const int B = 66;
+  static const int C = 67;
+  static const int D = 68;
+  static const int E = 69;
+  static const int F = 70;
+  static const int G = 71;
+  static const int H = 72;
+  static const int I = 73;
+  static const int J = 74;
+  static const int K = 75;
+  static const int L = 76;
+  static const int M = 77;
+  static const int N = 78;
+  static const int O = 79;
+  static const int P = 80;
+  static const int Q = 81;
+  static const int R = 82;
+  static const int S = 83;
+  static const int T = 84;
+  static const int U = 85;
+  static const int V = 86;
+  static const int W = 87;
+  static const int X = 88;
+  static const int Y = 89;
+  static const int Z = 90;
+  static const int META = 91;
+  static const int WIN_KEY_LEFT = 91;
+  static const int WIN_KEY_RIGHT = 92;
+  static const int CONTEXT_MENU = 93;
+  static const int NUM_ZERO = 96;
+  static const int NUM_ONE = 97;
+  static const int NUM_TWO = 98;
+  static const int NUM_THREE = 99;
+  static const int NUM_FOUR = 100;
+  static const int NUM_FIVE = 101;
+  static const int NUM_SIX = 102;
+  static const int NUM_SEVEN = 103;
+  static const int NUM_EIGHT = 104;
+  static const int NUM_NINE = 105;
+  static const int NUM_MULTIPLY = 106;
+  static const int NUM_PLUS = 107;
+  static const int NUM_MINUS = 109;
+  static const int NUM_PERIOD = 110;
+  static const int NUM_DIVISION = 111;
+  static const int F1 = 112;
+  static const int F2 = 113;
+  static const int F3 = 114;
+  static const int F4 = 115;
+  static const int F5 = 116;
+  static const int F6 = 117;
+  static const int F7 = 118;
+  static const int F8 = 119;
+  static const int F9 = 120;
+  static const int F10 = 121;
+  static const int F11 = 122;
+  static const int F12 = 123;
+  static const int NUMLOCK = 144;
+  static const int SCROLL_LOCK = 145;
+
+  // OS-specific media keys like volume controls and browser controls.
+  static const int FIRST_MEDIA_KEY = 166;
+  static const int LAST_MEDIA_KEY = 183;
+
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int SEMICOLON = 186;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int DASH = 189;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int EQUALS = 187;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int COMMA = 188;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int PERIOD = 190;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int SLASH = 191;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int APOSTROPHE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int TILDE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int SINGLE_QUOTE = 222;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int OPEN_SQUARE_BRACKET = 219;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int BACKSLASH = 220;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static const int CLOSE_SQUARE_BRACKET = 221;
+  static const int WIN_KEY = 224;
+  static const int MAC_FF_META = 224;
+  static const int WIN_IME = 229;
+
+  /** A sentinel value if the keycode could not be determined. */
+  static const int UNKNOWN = -1;
+
+  /**
+   * Returns true if the keyCode produces a (US keyboard) character.
+   * Note: This does not (yet) cover characters on non-US keyboards (Russian,
+   * Hebrew, etc.).
+   */
+  static bool isCharacterKey(int keyCode) {
+    if ((keyCode >= ZERO && keyCode <= NINE) ||
+        (keyCode >= NUM_ZERO && keyCode <= NUM_MULTIPLY) ||
+        (keyCode >= A && keyCode <= Z)) {
+      return true;
+    }
+
+    // Safari sends zero key code for non-latin characters.
+    if (Device.isWebKit && keyCode == 0) {
+      return true;
+    }
+
+    return (keyCode == SPACE ||
+        keyCode == QUESTION_MARK ||
+        keyCode == NUM_PLUS ||
+        keyCode == NUM_MINUS ||
+        keyCode == NUM_PERIOD ||
+        keyCode == NUM_DIVISION ||
+        keyCode == SEMICOLON ||
+        keyCode == FF_SEMICOLON ||
+        keyCode == DASH ||
+        keyCode == EQUALS ||
+        keyCode == FF_EQUALS ||
+        keyCode == COMMA ||
+        keyCode == PERIOD ||
+        keyCode == SLASH ||
+        keyCode == APOSTROPHE ||
+        keyCode == SINGLE_QUOTE ||
+        keyCode == OPEN_SQUARE_BRACKET ||
+        keyCode == BACKSLASH ||
+        keyCode == CLOSE_SQUARE_BRACKET);
+  }
+
+  /**
+   * Experimental helper function for converting keyCodes to keyNames for the
+   * keyIdentifier attribute still used in browsers not updated with current
+   * spec. This is an imperfect conversion! It will need to be refined, but
+   * hopefully it can just completely go away once all the browsers update to
+   * follow the DOM3 spec.
+   */
+  static String _convertKeyCodeToKeyName(int keyCode) {
+    switch (keyCode) {
+      case KeyCode.ALT:
+        return _KeyName.ALT;
+      case KeyCode.BACKSPACE:
+        return _KeyName.BACKSPACE;
+      case KeyCode.CAPS_LOCK:
+        return _KeyName.CAPS_LOCK;
+      case KeyCode.CTRL:
+        return _KeyName.CONTROL;
+      case KeyCode.DELETE:
+        return _KeyName.DEL;
+      case KeyCode.DOWN:
+        return _KeyName.DOWN;
+      case KeyCode.END:
+        return _KeyName.END;
+      case KeyCode.ENTER:
+        return _KeyName.ENTER;
+      case KeyCode.ESC:
+        return _KeyName.ESC;
+      case KeyCode.F1:
+        return _KeyName.F1;
+      case KeyCode.F2:
+        return _KeyName.F2;
+      case KeyCode.F3:
+        return _KeyName.F3;
+      case KeyCode.F4:
+        return _KeyName.F4;
+      case KeyCode.F5:
+        return _KeyName.F5;
+      case KeyCode.F6:
+        return _KeyName.F6;
+      case KeyCode.F7:
+        return _KeyName.F7;
+      case KeyCode.F8:
+        return _KeyName.F8;
+      case KeyCode.F9:
+        return _KeyName.F9;
+      case KeyCode.F10:
+        return _KeyName.F10;
+      case KeyCode.F11:
+        return _KeyName.F11;
+      case KeyCode.F12:
+        return _KeyName.F12;
+      case KeyCode.HOME:
+        return _KeyName.HOME;
+      case KeyCode.INSERT:
+        return _KeyName.INSERT;
+      case KeyCode.LEFT:
+        return _KeyName.LEFT;
+      case KeyCode.META:
+        return _KeyName.META;
+      case KeyCode.NUMLOCK:
+        return _KeyName.NUM_LOCK;
+      case KeyCode.PAGE_DOWN:
+        return _KeyName.PAGE_DOWN;
+      case KeyCode.PAGE_UP:
+        return _KeyName.PAGE_UP;
+      case KeyCode.PAUSE:
+        return _KeyName.PAUSE;
+      case KeyCode.PRINT_SCREEN:
+        return _KeyName.PRINT_SCREEN;
+      case KeyCode.RIGHT:
+        return _KeyName.RIGHT;
+      case KeyCode.SCROLL_LOCK:
+        return _KeyName.SCROLL;
+      case KeyCode.SHIFT:
+        return _KeyName.SHIFT;
+      case KeyCode.SPACE:
+        return _KeyName.SPACEBAR;
+      case KeyCode.TAB:
+        return _KeyName.TAB;
+      case KeyCode.UP:
+        return _KeyName.UP;
+      case KeyCode.WIN_IME:
+      case KeyCode.WIN_KEY:
+      case KeyCode.WIN_KEY_LEFT:
+      case KeyCode.WIN_KEY_RIGHT:
+        return _KeyName.WIN;
+      default:
+        return _KeyName.UNIDENTIFIED;
+    }
+    return _KeyName.UNIDENTIFIED;
+  }
+}
diff --git a/tools/dom/nnbd_src/KeyLocation.dart b/tools/dom/nnbd_src/KeyLocation.dart
new file mode 100644
index 0000000..db4c423
--- /dev/null
+++ b/tools/dom/nnbd_src/KeyLocation.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * Defines the standard key locations returned by
+ * KeyboardEvent.getKeyLocation.
+ */
+abstract class KeyLocation {
+  /**
+   * The event key is not distinguished as the left or right version
+   * of the key, and did not originate from the numeric keypad (or did not
+   * originate with a virtual key corresponding to the numeric keypad).
+   */
+  static const int STANDARD = 0;
+
+  /**
+   * The event key is in the left key location.
+   */
+  static const int LEFT = 1;
+
+  /**
+   * The event key is in the right key location.
+   */
+  static const int RIGHT = 2;
+
+  /**
+   * The event key originated on the numeric keypad or with a virtual key
+   * corresponding to the numeric keypad.
+   */
+  static const int NUMPAD = 3;
+
+  /**
+   * The event key originated on a mobile device, either on a physical
+   * keypad or a virtual keyboard.
+   */
+  static const int MOBILE = 4;
+
+  /**
+   * The event key originated on a game controller or a joystick on a mobile
+   * device.
+   */
+  static const int JOYSTICK = 5;
+}
diff --git a/tools/dom/nnbd_src/KeyName.dart b/tools/dom/nnbd_src/KeyName.dart
new file mode 100644
index 0000000..094d57e
--- /dev/null
+++ b/tools/dom/nnbd_src/KeyName.dart
@@ -0,0 +1,494 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * Defines the standard keyboard identifier names for keys that are returned
+ * by KeyboardEvent.getKeyboardIdentifier when the key does not have a direct
+ * unicode mapping.
+ */
+abstract class _KeyName {
+  /** The Accept (Commit, OK) key */
+  static const String ACCEPT = "Accept";
+
+  /** The Add key */
+  static const String ADD = "Add";
+
+  /** The Again key */
+  static const String AGAIN = "Again";
+
+  /** The All Candidates key */
+  static const String ALL_CANDIDATES = "AllCandidates";
+
+  /** The Alphanumeric key */
+  static const String ALPHANUMERIC = "Alphanumeric";
+
+  /** The Alt (Menu) key */
+  static const String ALT = "Alt";
+
+  /** The Alt-Graph key */
+  static const String ALT_GRAPH = "AltGraph";
+
+  /** The Application key */
+  static const String APPS = "Apps";
+
+  /** The ATTN key */
+  static const String ATTN = "Attn";
+
+  /** The Browser Back key */
+  static const String BROWSER_BACK = "BrowserBack";
+
+  /** The Browser Favorites key */
+  static const String BROWSER_FAVORTIES = "BrowserFavorites";
+
+  /** The Browser Forward key */
+  static const String BROWSER_FORWARD = "BrowserForward";
+
+  /** The Browser Home key */
+  static const String BROWSER_NAME = "BrowserHome";
+
+  /** The Browser Refresh key */
+  static const String BROWSER_REFRESH = "BrowserRefresh";
+
+  /** The Browser Search key */
+  static const String BROWSER_SEARCH = "BrowserSearch";
+
+  /** The Browser Stop key */
+  static const String BROWSER_STOP = "BrowserStop";
+
+  /** The Camera key */
+  static const String CAMERA = "Camera";
+
+  /** The Caps Lock (Capital) key */
+  static const String CAPS_LOCK = "CapsLock";
+
+  /** The Clear key */
+  static const String CLEAR = "Clear";
+
+  /** The Code Input key */
+  static const String CODE_INPUT = "CodeInput";
+
+  /** The Compose key */
+  static const String COMPOSE = "Compose";
+
+  /** The Control (Ctrl) key */
+  static const String CONTROL = "Control";
+
+  /** The Crsel key */
+  static const String CRSEL = "Crsel";
+
+  /** The Convert key */
+  static const String CONVERT = "Convert";
+
+  /** The Copy key */
+  static const String COPY = "Copy";
+
+  /** The Cut key */
+  static const String CUT = "Cut";
+
+  /** The Decimal key */
+  static const String DECIMAL = "Decimal";
+
+  /** The Divide key */
+  static const String DIVIDE = "Divide";
+
+  /** The Down Arrow key */
+  static const String DOWN = "Down";
+
+  /** The diagonal Down-Left Arrow key */
+  static const String DOWN_LEFT = "DownLeft";
+
+  /** The diagonal Down-Right Arrow key */
+  static const String DOWN_RIGHT = "DownRight";
+
+  /** The Eject key */
+  static const String EJECT = "Eject";
+
+  /** The End key */
+  static const String END = "End";
+
+  /**
+   * The Enter key. Note: This key value must also be used for the Return
+   *  (Macintosh numpad) key
+   */
+  static const String ENTER = "Enter";
+
+  /** The Erase EOF key */
+  static const String ERASE_EOF = "EraseEof";
+
+  /** The Execute key */
+  static const String EXECUTE = "Execute";
+
+  /** The Exsel key */
+  static const String EXSEL = "Exsel";
+
+  /** The Function switch key */
+  static const String FN = "Fn";
+
+  /** The F1 key */
+  static const String F1 = "F1";
+
+  /** The F2 key */
+  static const String F2 = "F2";
+
+  /** The F3 key */
+  static const String F3 = "F3";
+
+  /** The F4 key */
+  static const String F4 = "F4";
+
+  /** The F5 key */
+  static const String F5 = "F5";
+
+  /** The F6 key */
+  static const String F6 = "F6";
+
+  /** The F7 key */
+  static const String F7 = "F7";
+
+  /** The F8 key */
+  static const String F8 = "F8";
+
+  /** The F9 key */
+  static const String F9 = "F9";
+
+  /** The F10 key */
+  static const String F10 = "F10";
+
+  /** The F11 key */
+  static const String F11 = "F11";
+
+  /** The F12 key */
+  static const String F12 = "F12";
+
+  /** The F13 key */
+  static const String F13 = "F13";
+
+  /** The F14 key */
+  static const String F14 = "F14";
+
+  /** The F15 key */
+  static const String F15 = "F15";
+
+  /** The F16 key */
+  static const String F16 = "F16";
+
+  /** The F17 key */
+  static const String F17 = "F17";
+
+  /** The F18 key */
+  static const String F18 = "F18";
+
+  /** The F19 key */
+  static const String F19 = "F19";
+
+  /** The F20 key */
+  static const String F20 = "F20";
+
+  /** The F21 key */
+  static const String F21 = "F21";
+
+  /** The F22 key */
+  static const String F22 = "F22";
+
+  /** The F23 key */
+  static const String F23 = "F23";
+
+  /** The F24 key */
+  static const String F24 = "F24";
+
+  /** The Final Mode (Final) key used on some asian keyboards */
+  static const String FINAL_MODE = "FinalMode";
+
+  /** The Find key */
+  static const String FIND = "Find";
+
+  /** The Full-Width Characters key */
+  static const String FULL_WIDTH = "FullWidth";
+
+  /** The Half-Width Characters key */
+  static const String HALF_WIDTH = "HalfWidth";
+
+  /** The Hangul (Korean characters) Mode key */
+  static const String HANGUL_MODE = "HangulMode";
+
+  /** The Hanja (Korean characters) Mode key */
+  static const String HANJA_MODE = "HanjaMode";
+
+  /** The Help key */
+  static const String HELP = "Help";
+
+  /** The Hiragana (Japanese Kana characters) key */
+  static const String HIRAGANA = "Hiragana";
+
+  /** The Home key */
+  static const String HOME = "Home";
+
+  /** The Insert (Ins) key */
+  static const String INSERT = "Insert";
+
+  /** The Japanese-Hiragana key */
+  static const String JAPANESE_HIRAGANA = "JapaneseHiragana";
+
+  /** The Japanese-Katakana key */
+  static const String JAPANESE_KATAKANA = "JapaneseKatakana";
+
+  /** The Japanese-Romaji key */
+  static const String JAPANESE_ROMAJI = "JapaneseRomaji";
+
+  /** The Junja Mode key */
+  static const String JUNJA_MODE = "JunjaMode";
+
+  /** The Kana Mode (Kana Lock) key */
+  static const String KANA_MODE = "KanaMode";
+
+  /**
+   * The Kanji (Japanese name for ideographic characters of Chinese origin)
+   * Mode key
+   */
+  static const String KANJI_MODE = "KanjiMode";
+
+  /** The Katakana (Japanese Kana characters) key */
+  static const String KATAKANA = "Katakana";
+
+  /** The Start Application One key */
+  static const String LAUNCH_APPLICATION_1 = "LaunchApplication1";
+
+  /** The Start Application Two key */
+  static const String LAUNCH_APPLICATION_2 = "LaunchApplication2";
+
+  /** The Start Mail key */
+  static const String LAUNCH_MAIL = "LaunchMail";
+
+  /** The Left Arrow key */
+  static const String LEFT = "Left";
+
+  /** The Menu key */
+  static const String MENU = "Menu";
+
+  /**
+   * The Meta key. Note: This key value shall be also used for the Apple
+   * Command key
+   */
+  static const String META = "Meta";
+
+  /** The Media Next Track key */
+  static const String MEDIA_NEXT_TRACK = "MediaNextTrack";
+
+  /** The Media Play Pause key */
+  static const String MEDIA_PAUSE_PLAY = "MediaPlayPause";
+
+  /** The Media Previous Track key */
+  static const String MEDIA_PREVIOUS_TRACK = "MediaPreviousTrack";
+
+  /** The Media Stop key */
+  static const String MEDIA_STOP = "MediaStop";
+
+  /** The Mode Change key */
+  static const String MODE_CHANGE = "ModeChange";
+
+  /** The Next Candidate function key */
+  static const String NEXT_CANDIDATE = "NextCandidate";
+
+  /** The Nonconvert (Don't Convert) key */
+  static const String NON_CONVERT = "Nonconvert";
+
+  /** The Number Lock key */
+  static const String NUM_LOCK = "NumLock";
+
+  /** The Page Down (Next) key */
+  static const String PAGE_DOWN = "PageDown";
+
+  /** The Page Up key */
+  static const String PAGE_UP = "PageUp";
+
+  /** The Paste key */
+  static const String PASTE = "Paste";
+
+  /** The Pause key */
+  static const String PAUSE = "Pause";
+
+  /** The Play key */
+  static const String PLAY = "Play";
+
+  /**
+   * The Power key. Note: Some devices may not expose this key to the
+   * operating environment
+   */
+  static const String POWER = "Power";
+
+  /** The Previous Candidate function key */
+  static const String PREVIOUS_CANDIDATE = "PreviousCandidate";
+
+  /** The Print Screen (PrintScrn, SnapShot) key */
+  static const String PRINT_SCREEN = "PrintScreen";
+
+  /** The Process key */
+  static const String PROCESS = "Process";
+
+  /** The Props key */
+  static const String PROPS = "Props";
+
+  /** The Right Arrow key */
+  static const String RIGHT = "Right";
+
+  /** The Roman Characters function key */
+  static const String ROMAN_CHARACTERS = "RomanCharacters";
+
+  /** The Scroll Lock key */
+  static const String SCROLL = "Scroll";
+
+  /** The Select key */
+  static const String SELECT = "Select";
+
+  /** The Select Media key */
+  static const String SELECT_MEDIA = "SelectMedia";
+
+  /** The Separator key */
+  static const String SEPARATOR = "Separator";
+
+  /** The Shift key */
+  static const String SHIFT = "Shift";
+
+  /** The Soft1 key */
+  static const String SOFT_1 = "Soft1";
+
+  /** The Soft2 key */
+  static const String SOFT_2 = "Soft2";
+
+  /** The Soft3 key */
+  static const String SOFT_3 = "Soft3";
+
+  /** The Soft4 key */
+  static const String SOFT_4 = "Soft4";
+
+  /** The Stop key */
+  static const String STOP = "Stop";
+
+  /** The Subtract key */
+  static const String SUBTRACT = "Subtract";
+
+  /** The Symbol Lock key */
+  static const String SYMBOL_LOCK = "SymbolLock";
+
+  /** The Up Arrow key */
+  static const String UP = "Up";
+
+  /** The diagonal Up-Left Arrow key */
+  static const String UP_LEFT = "UpLeft";
+
+  /** The diagonal Up-Right Arrow key */
+  static const String UP_RIGHT = "UpRight";
+
+  /** The Undo key */
+  static const String UNDO = "Undo";
+
+  /** The Volume Down key */
+  static const String VOLUME_DOWN = "VolumeDown";
+
+  /** The Volume Mute key */
+  static const String VOLUMN_MUTE = "VolumeMute";
+
+  /** The Volume Up key */
+  static const String VOLUMN_UP = "VolumeUp";
+
+  /** The Windows Logo key */
+  static const String WIN = "Win";
+
+  /** The Zoom key */
+  static const String ZOOM = "Zoom";
+
+  /**
+   * The Backspace (Back) key. Note: This key value shall be also used for the
+   * key labeled 'delete' MacOS keyboards when not modified by the 'Fn' key
+   */
+  static const String BACKSPACE = "Backspace";
+
+  /** The Horizontal Tabulation (Tab) key */
+  static const String TAB = "Tab";
+
+  /** The Cancel key */
+  static const String CANCEL = "Cancel";
+
+  /** The Escape (Esc) key */
+  static const String ESC = "Esc";
+
+  /** The Space (Spacebar) key:   */
+  static const String SPACEBAR = "Spacebar";
+
+  /**
+   * The Delete (Del) Key. Note: This key value shall be also used for the key
+   * labeled 'delete' MacOS keyboards when modified by the 'Fn' key
+   */
+  static const String DEL = "Del";
+
+  /** The Combining Grave Accent (Greek Varia, Dead Grave) key */
+  static const String DEAD_GRAVE = "DeadGrave";
+
+  /**
+   * The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute)
+   * key
+   */
+  static const String DEAD_EACUTE = "DeadEacute";
+
+  /** The Combining Circumflex Accent (Hat, Dead Circumflex) key */
+  static const String DEAD_CIRCUMFLEX = "DeadCircumflex";
+
+  /** The Combining Tilde (Dead Tilde) key */
+  static const String DEAD_TILDE = "DeadTilde";
+
+  /** The Combining Macron (Long, Dead Macron) key */
+  static const String DEAD_MACRON = "DeadMacron";
+
+  /** The Combining Breve (Short, Dead Breve) key */
+  static const String DEAD_BREVE = "DeadBreve";
+
+  /** The Combining Dot Above (Derivative, Dead Above Dot) key */
+  static const String DEAD_ABOVE_DOT = "DeadAboveDot";
+
+  /**
+   * The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika,
+   * Double Derivative, Dead Diaeresis) key
+   */
+  static const String DEAD_UMLAUT = "DeadUmlaut";
+
+  /** The Combining Ring Above (Dead Above Ring) key */
+  static const String DEAD_ABOVE_RING = "DeadAboveRing";
+
+  /** The Combining Double Acute Accent (Dead Doubleacute) key */
+  static const String DEAD_DOUBLEACUTE = "DeadDoubleacute";
+
+  /** The Combining Caron (Hacek, V Above, Dead Caron) key */
+  static const String DEAD_CARON = "DeadCaron";
+
+  /** The Combining Cedilla (Dead Cedilla) key */
+  static const String DEAD_CEDILLA = "DeadCedilla";
+
+  /** The Combining Ogonek (Nasal Hook, Dead Ogonek) key */
+  static const String DEAD_OGONEK = "DeadOgonek";
+
+  /**
+   * The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota
+   * Subscript, Dead Iota) key
+   */
+  static const String DEAD_IOTA = "DeadIota";
+
+  /**
+   * The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key
+   */
+  static const String DEAD_VOICED_SOUND = "DeadVoicedSound";
+
+  /**
+   * The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced
+   * Sound) key
+   */
+  static const String DEC_SEMIVOICED_SOUND = "DeadSemivoicedSound";
+
+  /**
+   * Key value used when an implementation is unable to identify another key
+   * value, due to either hardware, platform, or software constraints
+   */
+  static const String UNIDENTIFIED = "Unidentified";
+}
diff --git a/tools/dom/nnbd_src/KeyboardEventStream.dart b/tools/dom/nnbd_src/KeyboardEventStream.dart
new file mode 100644
index 0000000..48f7a68
--- /dev/null
+++ b/tools/dom/nnbd_src/KeyboardEventStream.dart
@@ -0,0 +1,394 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * Internal class that does the actual calculations to determine keyCode and
+ * charCode for keydown, keypress, and keyup events for all browsers.
+ */
+class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
+  // This code inspired by Closure's KeyHandling library.
+  // https://github.com/google/closure-library/blob/master/closure/goog/events/keyhandler.js
+
+  /**
+   * The set of keys that have been pressed down without seeing their
+   * corresponding keyup event.
+   */
+  final List<KeyEvent> _keyDownList = <KeyEvent>[];
+
+  /** The type of KeyEvent we are tracking (keyup, keydown, keypress). */
+  final String _type;
+
+  /** The element we are watching for events to happen on. */
+  final EventTarget _target;
+
+  // The distance to shift from upper case alphabet Roman letters to lower case.
+  static final int _ROMAN_ALPHABET_OFFSET = "a".codeUnits[0] - "A".codeUnits[0];
+
+  /** Custom Stream (Controller) to produce KeyEvents for the stream. */
+  _CustomKeyEventStreamImpl _stream;
+
+  static const _EVENT_TYPE = 'KeyEvent';
+
+  /**
+   * An enumeration of key identifiers currently part of the W3C draft for DOM3
+   * and their mappings to keyCodes.
+   * https://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/keyset.html#KeySet-Set
+   */
+  static const Map<String, int> _keyIdentifier = const {
+    'Up': KeyCode.UP,
+    'Down': KeyCode.DOWN,
+    'Left': KeyCode.LEFT,
+    'Right': KeyCode.RIGHT,
+    'Enter': KeyCode.ENTER,
+    'F1': KeyCode.F1,
+    'F2': KeyCode.F2,
+    'F3': KeyCode.F3,
+    'F4': KeyCode.F4,
+    'F5': KeyCode.F5,
+    'F6': KeyCode.F6,
+    'F7': KeyCode.F7,
+    'F8': KeyCode.F8,
+    'F9': KeyCode.F9,
+    'F10': KeyCode.F10,
+    'F11': KeyCode.F11,
+    'F12': KeyCode.F12,
+    'U+007F': KeyCode.DELETE,
+    'Home': KeyCode.HOME,
+    'End': KeyCode.END,
+    'PageUp': KeyCode.PAGE_UP,
+    'PageDown': KeyCode.PAGE_DOWN,
+    'Insert': KeyCode.INSERT
+  };
+
+  /** Return a stream for KeyEvents for the specified target. */
+  // Note: this actually functions like a factory constructor.
+  CustomStream<KeyEvent> forTarget(EventTarget e, {bool useCapture: false}) {
+    var handler =
+        new _KeyboardEventHandler.initializeAllEventListeners(_type, e);
+    return handler._stream;
+  }
+
+  /**
+   * General constructor, performs basic initialization for our improved
+   * KeyboardEvent controller.
+   */
+  _KeyboardEventHandler(this._type)
+      : _stream = new _CustomKeyEventStreamImpl('event'),
+        _target = null,
+        super(_EVENT_TYPE);
+
+  /**
+   * Hook up all event listeners under the covers so we can estimate keycodes
+   * and charcodes when they are not provided.
+   */
+  _KeyboardEventHandler.initializeAllEventListeners(this._type, this._target)
+      : super(_EVENT_TYPE) {
+    Element.keyDownEvent
+        .forTarget(_target, useCapture: true)
+        .listen(processKeyDown);
+    Element.keyPressEvent
+        .forTarget(_target, useCapture: true)
+        .listen(processKeyPress);
+    Element.keyUpEvent
+        .forTarget(_target, useCapture: true)
+        .listen(processKeyUp);
+    _stream = new _CustomKeyEventStreamImpl(_type);
+  }
+
+  /** Determine if caps lock is one of the currently depressed keys. */
+  bool get _capsLockOn =>
+      _keyDownList.any((var element) => element.keyCode == KeyCode.CAPS_LOCK);
+
+  /**
+   * Given the previously recorded keydown key codes, see if we can determine
+   * the keycode of this keypress [event]. (Generally browsers only provide
+   * charCode information for keypress events, but with a little
+   * reverse-engineering, we can also determine the keyCode.) Returns
+   * KeyCode.UNKNOWN if the keycode could not be determined.
+   */
+  int _determineKeyCodeForKeypress(KeyboardEvent event) {
+    // Note: This function is a work in progress. We'll expand this function
+    // once we get more information about other keyboards.
+    for (var prevEvent in _keyDownList) {
+      if (prevEvent._shadowCharCode == event.charCode) {
+        return prevEvent.keyCode;
+      }
+      if ((event.shiftKey || _capsLockOn) &&
+          event.charCode >= "A".codeUnits[0] &&
+          event.charCode <= "Z".codeUnits[0] &&
+          event.charCode + _ROMAN_ALPHABET_OFFSET ==
+              prevEvent._shadowCharCode) {
+        return prevEvent.keyCode;
+      }
+    }
+    return KeyCode.UNKNOWN;
+  }
+
+  /**
+   * Given the character code returned from a keyDown [event], try to ascertain
+   * and return the corresponding charCode for the character that was pressed.
+   * This information is not shown to the user, but used to help polyfill
+   * keypress events.
+   */
+  int _findCharCodeKeyDown(KeyboardEvent event) {
+    if (event.location == 3) {
+      // Numpad keys.
+      switch (event.keyCode) {
+        case KeyCode.NUM_ZERO:
+          // Even though this function returns _charCodes_, for some cases the
+          // KeyCode == the charCode we want, in which case we use the keycode
+          // constant for readability.
+          return KeyCode.ZERO;
+        case KeyCode.NUM_ONE:
+          return KeyCode.ONE;
+        case KeyCode.NUM_TWO:
+          return KeyCode.TWO;
+        case KeyCode.NUM_THREE:
+          return KeyCode.THREE;
+        case KeyCode.NUM_FOUR:
+          return KeyCode.FOUR;
+        case KeyCode.NUM_FIVE:
+          return KeyCode.FIVE;
+        case KeyCode.NUM_SIX:
+          return KeyCode.SIX;
+        case KeyCode.NUM_SEVEN:
+          return KeyCode.SEVEN;
+        case KeyCode.NUM_EIGHT:
+          return KeyCode.EIGHT;
+        case KeyCode.NUM_NINE:
+          return KeyCode.NINE;
+        case KeyCode.NUM_MULTIPLY:
+          return 42; // Char code for *
+        case KeyCode.NUM_PLUS:
+          return 43; // +
+        case KeyCode.NUM_MINUS:
+          return 45; // -
+        case KeyCode.NUM_PERIOD:
+          return 46; // .
+        case KeyCode.NUM_DIVISION:
+          return 47; // /
+      }
+    } else if (event.keyCode >= 65 && event.keyCode <= 90) {
+      // Set the "char code" for key down as the lower case letter. Again, this
+      // will not show up for the user, but will be helpful in estimating
+      // keyCode locations and other information during the keyPress event.
+      return event.keyCode + _ROMAN_ALPHABET_OFFSET;
+    }
+    switch (event.keyCode) {
+      case KeyCode.SEMICOLON:
+        return KeyCode.FF_SEMICOLON;
+      case KeyCode.EQUALS:
+        return KeyCode.FF_EQUALS;
+      case KeyCode.COMMA:
+        return 44; // Ascii value for ,
+      case KeyCode.DASH:
+        return 45; // -
+      case KeyCode.PERIOD:
+        return 46; // .
+      case KeyCode.SLASH:
+        return 47; // /
+      case KeyCode.APOSTROPHE:
+        return 96; // `
+      case KeyCode.OPEN_SQUARE_BRACKET:
+        return 91; // [
+      case KeyCode.BACKSLASH:
+        return 92; // \
+      case KeyCode.CLOSE_SQUARE_BRACKET:
+        return 93; // ]
+      case KeyCode.SINGLE_QUOTE:
+        return 39; // '
+    }
+    return event.keyCode;
+  }
+
+  /**
+   * Returns true if the key fires a keypress event in the current browser.
+   */
+  bool _firesKeyPressEvent(KeyEvent event) {
+    if (!Device.isIE && !Device.isWebKit) {
+      return true;
+    }
+
+    if (Device.userAgent.contains('Mac') && event.altKey) {
+      return KeyCode.isCharacterKey(event.keyCode);
+    }
+
+    // Alt but not AltGr which is represented as Alt+Ctrl.
+    if (event.altKey && !event.ctrlKey) {
+      return false;
+    }
+
+    // Saves Ctrl or Alt + key for IE and WebKit, which won't fire keypress.
+    if (!event.shiftKey &&
+        (_keyDownList.last.keyCode == KeyCode.CTRL ||
+            _keyDownList.last.keyCode == KeyCode.ALT ||
+            Device.userAgent.contains('Mac') &&
+                _keyDownList.last.keyCode == KeyCode.META)) {
+      return false;
+    }
+
+    // Some keys with Ctrl/Shift do not issue keypress in WebKit.
+    if (Device.isWebKit &&
+        event.ctrlKey &&
+        event.shiftKey &&
+        (event.keyCode == KeyCode.BACKSLASH ||
+            event.keyCode == KeyCode.OPEN_SQUARE_BRACKET ||
+            event.keyCode == KeyCode.CLOSE_SQUARE_BRACKET ||
+            event.keyCode == KeyCode.TILDE ||
+            event.keyCode == KeyCode.SEMICOLON ||
+            event.keyCode == KeyCode.DASH ||
+            event.keyCode == KeyCode.EQUALS ||
+            event.keyCode == KeyCode.COMMA ||
+            event.keyCode == KeyCode.PERIOD ||
+            event.keyCode == KeyCode.SLASH ||
+            event.keyCode == KeyCode.APOSTROPHE ||
+            event.keyCode == KeyCode.SINGLE_QUOTE)) {
+      return false;
+    }
+
+    switch (event.keyCode) {
+      case KeyCode.ENTER:
+        // IE9 does not fire keypress on ENTER.
+        return !Device.isIE;
+      case KeyCode.ESC:
+        return !Device.isWebKit;
+    }
+
+    return KeyCode.isCharacterKey(event.keyCode);
+  }
+
+  /**
+   * Normalize the keycodes to the IE KeyCodes (this is what Chrome, IE, and
+   * Opera all use).
+   */
+  int _normalizeKeyCodes(KeyboardEvent event) {
+    // Note: This may change once we get input about non-US keyboards.
+    if (Device.isFirefox) {
+      switch (event.keyCode) {
+        case KeyCode.FF_EQUALS:
+          return KeyCode.EQUALS;
+        case KeyCode.FF_SEMICOLON:
+          return KeyCode.SEMICOLON;
+        case KeyCode.MAC_FF_META:
+          return KeyCode.META;
+        case KeyCode.WIN_KEY_FF_LINUX:
+          return KeyCode.WIN_KEY;
+      }
+    }
+    return event.keyCode;
+  }
+
+  /** Handle keydown events. */
+  void processKeyDown(KeyboardEvent e) {
+    // Ctrl-Tab and Alt-Tab can cause the focus to be moved to another window
+    // before we've caught a key-up event.  If the last-key was one of these
+    // we reset the state.
+    if (_keyDownList.length > 0 &&
+        (_keyDownList.last.keyCode == KeyCode.CTRL && !e.ctrlKey ||
+            _keyDownList.last.keyCode == KeyCode.ALT && !e.altKey ||
+            Device.userAgent.contains('Mac') &&
+                _keyDownList.last.keyCode == KeyCode.META &&
+                !e.metaKey)) {
+      _keyDownList.clear();
+    }
+
+    var event = new KeyEvent.wrap(e);
+    event._shadowKeyCode = _normalizeKeyCodes(event);
+    // Technically a "keydown" event doesn't have a charCode. This is
+    // calculated nonetheless to provide us with more information in giving
+    // as much information as possible on keypress about keycode and also
+    // charCode.
+    event._shadowCharCode = _findCharCodeKeyDown(event);
+    if (_keyDownList.length > 0 &&
+        event.keyCode != _keyDownList.last.keyCode &&
+        !_firesKeyPressEvent(event)) {
+      // Some browsers have quirks not firing keypress events where all other
+      // browsers do. This makes them more consistent.
+      processKeyPress(e);
+    }
+    _keyDownList.add(event);
+    _stream.add(event);
+  }
+
+  /** Handle keypress events. */
+  void processKeyPress(KeyboardEvent event) {
+    var e = new KeyEvent.wrap(event);
+    // IE reports the character code in the keyCode field for keypress events.
+    // There are two exceptions however, Enter and Escape.
+    if (Device.isIE) {
+      if (e.keyCode == KeyCode.ENTER || e.keyCode == KeyCode.ESC) {
+        e._shadowCharCode = 0;
+      } else {
+        e._shadowCharCode = e.keyCode;
+      }
+    } else if (Device.isOpera) {
+      // Opera reports the character code in the keyCode field.
+      e._shadowCharCode = KeyCode.isCharacterKey(e.keyCode) ? e.keyCode : 0;
+    }
+    // Now we guesstimate about what the keycode is that was actually
+    // pressed, given previous keydown information.
+    e._shadowKeyCode = _determineKeyCodeForKeypress(e);
+
+    // Correct the key value for certain browser-specific quirks.
+    if (e._shadowKeyIdentifier != null &&
+        _keyIdentifier.containsKey(e._shadowKeyIdentifier)) {
+      // This is needed for Safari Windows because it currently doesn't give a
+      // keyCode/which for non printable keys.
+      e._shadowKeyCode = _keyIdentifier[e._shadowKeyIdentifier];
+    }
+    e._shadowAltKey = _keyDownList.any((var element) => element.altKey);
+    _stream.add(e);
+  }
+
+  /** Handle keyup events. */
+  void processKeyUp(KeyboardEvent event) {
+    var e = new KeyEvent.wrap(event);
+    KeyboardEvent toRemove = null;
+    for (var key in _keyDownList) {
+      if (key.keyCode == e.keyCode) {
+        toRemove = key;
+      }
+    }
+    if (toRemove != null) {
+      _keyDownList.removeWhere((element) => element == toRemove);
+    } else if (_keyDownList.length > 0) {
+      // This happens when we've reached some international keyboard case we
+      // haven't accounted for or we haven't correctly eliminated all browser
+      // inconsistencies. Filing bugs on when this is reached is welcome!
+      _keyDownList.removeLast();
+    }
+    _stream.add(e);
+  }
+}
+
+/**
+ * Records KeyboardEvents that occur on a particular element, and provides a
+ * stream of outgoing KeyEvents with cross-browser consistent keyCode and
+ * charCode values despite the fact that a multitude of browsers that have
+ * varying keyboard default behavior.
+ *
+ * Example usage:
+ *
+ *     KeyboardEventStream.onKeyDown(document.body).listen(
+ *         keydownHandlerTest);
+ *
+ * This class is very much a work in progress, and we'd love to get information
+ * on how we can make this class work with as many international keyboards as
+ * possible. Bugs welcome!
+ */
+class KeyboardEventStream {
+  /** Named constructor to produce a stream for onKeyPress events. */
+  static CustomStream<KeyEvent> onKeyPress(EventTarget target) =>
+      new _KeyboardEventHandler('keypress').forTarget(target);
+
+  /** Named constructor to produce a stream for onKeyUp events. */
+  static CustomStream<KeyEvent> onKeyUp(EventTarget target) =>
+      new _KeyboardEventHandler('keyup').forTarget(target);
+
+  /** Named constructor to produce a stream for onKeyDown events. */
+  static CustomStream<KeyEvent> onKeyDown(EventTarget target) =>
+      new _KeyboardEventHandler('keydown').forTarget(target);
+}
diff --git a/tools/dom/nnbd_src/NodeValidatorBuilder.dart b/tools/dom/nnbd_src/NodeValidatorBuilder.dart
new file mode 100644
index 0000000..0c8216f
--- /dev/null
+++ b/tools/dom/nnbd_src/NodeValidatorBuilder.dart
@@ -0,0 +1,454 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+/**
+ * Class which helps construct standard node validation policies.
+ *
+ * By default this will not accept anything, but the 'allow*' functions can be
+ * used to expand what types of elements or attributes are allowed.
+ *
+ * All allow functions are additive- elements will be accepted if they are
+ * accepted by any specific rule.
+ *
+ * It is important to remember that sanitization is not just intended to prevent
+ * cross-site scripting attacks, but also to prevent information from being
+ * displayed in unexpected ways. For example something displaying basic
+ * formatted text may not expect `<video>` tags to appear. In this case an
+ * empty NodeValidatorBuilder with just [allowTextElements] might be
+ * appropriate.
+ */
+class NodeValidatorBuilder implements NodeValidator {
+  final List<NodeValidator> _validators = <NodeValidator>[];
+
+  NodeValidatorBuilder() {}
+
+  /**
+   * Creates a new NodeValidatorBuilder which accepts common constructs.
+   *
+   * By default this will accept HTML5 elements and attributes with the default
+   * [UriPolicy] and templating elements.
+   *
+   * Notable syntax which is filtered:
+   *
+   * * Only known-good HTML5 elements and attributes are allowed.
+   * * All URLs must be same-origin, use [allowNavigation] and [allowImages] to
+   * specify additional URI policies.
+   * * Inline-styles are not allowed.
+   * * Custom element tags are disallowed, use [allowCustomElement].
+   * * Custom tags extensions are disallowed, use [allowTagExtension].
+   * * SVG Elements are not allowed, use [allowSvg].
+   *
+   * For scenarios where the HTML should only contain formatted text
+   * [allowTextElements] is more appropriate.
+   *
+   * Use [allowSvg] to allow SVG elements.
+   */
+  NodeValidatorBuilder.common() {
+    allowHtml5();
+    allowTemplating();
+  }
+
+  /**
+   * Allows navigation elements- Form and Anchor tags, along with common
+   * attributes.
+   *
+   * The UriPolicy can be used to restrict the locations the navigation elements
+   * are allowed to direct to. By default this will use the default [UriPolicy].
+   */
+  void allowNavigation([UriPolicy uriPolicy]) {
+    if (uriPolicy == null) {
+      uriPolicy = new UriPolicy();
+    }
+    add(new _SimpleNodeValidator.allowNavigation(uriPolicy));
+  }
+
+  /**
+   * Allows image elements.
+   *
+   * The UriPolicy can be used to restrict the locations the images may be
+   * loaded from. By default this will use the default [UriPolicy].
+   */
+  void allowImages([UriPolicy uriPolicy]) {
+    if (uriPolicy == null) {
+      uriPolicy = new UriPolicy();
+    }
+    add(new _SimpleNodeValidator.allowImages(uriPolicy));
+  }
+
+  /**
+   * Allow basic text elements.
+   *
+   * This allows a subset of HTML5 elements, specifically just these tags and
+   * no attributes.
+   *
+   * * B
+   * * BLOCKQUOTE
+   * * BR
+   * * EM
+   * * H1
+   * * H2
+   * * H3
+   * * H4
+   * * H5
+   * * H6
+   * * HR
+   * * I
+   * * LI
+   * * OL
+   * * P
+   * * SPAN
+   * * UL
+   */
+  void allowTextElements() {
+    add(new _SimpleNodeValidator.allowTextElements());
+  }
+
+  /**
+   * Allow inline styles on elements.
+   *
+   * If [tagName] is not specified then this allows inline styles on all
+   * elements. Otherwise tagName limits the styles to the specified elements.
+   */
+  void allowInlineStyles({String tagName}) {
+    if (tagName == null) {
+      tagName = '*';
+    } else {
+      tagName = tagName.toUpperCase();
+    }
+    add(new _SimpleNodeValidator(null, allowedAttributes: ['$tagName::style']));
+  }
+
+  /**
+   * Allow common safe HTML5 elements and attributes.
+   *
+   * This list is based off of the Caja whitelists at:
+   * https://code.google.com/p/google-caja/wiki/CajaWhitelists.
+   *
+   * Common things which are not allowed are script elements, style attributes
+   * and any script handlers.
+   */
+  void allowHtml5({UriPolicy uriPolicy}) {
+    add(new _Html5NodeValidator(uriPolicy: uriPolicy));
+  }
+
+  /**
+   * Allow SVG elements and attributes except for known bad ones.
+   */
+  void allowSvg() {
+    add(new _SvgNodeValidator());
+  }
+
+  /**
+   * Allow custom elements with the specified tag name and specified attributes.
+   *
+   * This will allow the elements as custom tags (such as <x-foo></x-foo>),
+   * but will not allow tag extensions. Use [allowTagExtension] to allow
+   * tag extensions.
+   */
+  void allowCustomElement(String tagName,
+      {UriPolicy uriPolicy,
+      Iterable<String>? attributes,
+      Iterable<String> uriAttributes}) {
+    var tagNameUpper = tagName.toUpperCase();
+    var attrs = attributes
+        ?.map<String>((name) => '$tagNameUpper::${name.toLowerCase()}');
+    var uriAttrs = uriAttributes
+        ?.map<String>((name) => '$tagNameUpper::${name.toLowerCase()}');
+    if (uriPolicy == null) {
+      uriPolicy = new UriPolicy();
+    }
+
+    add(new _CustomElementNodeValidator(
+        uriPolicy, [tagNameUpper], attrs, uriAttrs, false, true));
+  }
+
+  /**
+   * Allow custom tag extensions with the specified type name and specified
+   * attributes.
+   *
+   * This will allow tag extensions (such as <div is="x-foo"></div>),
+   * but will not allow custom tags. Use [allowCustomElement] to allow
+   * custom tags.
+   */
+  void allowTagExtension(String tagName, String baseName,
+      {UriPolicy uriPolicy,
+      Iterable<String> attributes,
+      Iterable<String> uriAttributes}) {
+    var baseNameUpper = baseName.toUpperCase();
+    var tagNameUpper = tagName.toUpperCase();
+    var attrs = attributes
+        ?.map<String>((name) => '$baseNameUpper::${name.toLowerCase()}');
+    var uriAttrs = uriAttributes
+        ?.map<String>((name) => '$baseNameUpper::${name.toLowerCase()}');
+    if (uriPolicy == null) {
+      uriPolicy = new UriPolicy();
+    }
+
+    add(new _CustomElementNodeValidator(uriPolicy,
+        [tagNameUpper, baseNameUpper], attrs, uriAttrs, true, false));
+  }
+
+  void allowElement(String tagName,
+      {UriPolicy uriPolicy,
+      Iterable<String> attributes,
+      Iterable<String> uriAttributes}) {
+    allowCustomElement(tagName,
+        uriPolicy: uriPolicy,
+        attributes: attributes,
+        uriAttributes: uriAttributes);
+  }
+
+  /**
+   * Allow templating elements (such as <template> and template-related
+   * attributes.
+   *
+   * This still requires other validators to allow regular attributes to be
+   * bound (such as [allowHtml5]).
+   */
+  void allowTemplating() {
+    add(new _TemplatingNodeValidator());
+  }
+
+  /**
+   * Add an additional validator to the current list of validators.
+   *
+   * Elements and attributes will be accepted if they are accepted by any
+   * validators.
+   */
+  void add(NodeValidator validator) {
+    _validators.add(validator);
+  }
+
+  bool allowsElement(Element element) {
+    return _validators.any((v) => v.allowsElement(element));
+  }
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    return _validators
+        .any((v) => v.allowsAttribute(element, attributeName, value));
+  }
+}
+
+class _SimpleNodeValidator implements NodeValidator {
+  final Set<String> allowedElements = new Set<String>();
+  final Set<String> allowedAttributes = new Set<String>();
+  final Set<String> allowedUriAttributes = new Set<String>();
+  final UriPolicy uriPolicy;
+
+  factory _SimpleNodeValidator.allowNavigation(UriPolicy uriPolicy) {
+    return new _SimpleNodeValidator(uriPolicy, allowedElements: const [
+      'A',
+      'FORM'
+    ], allowedAttributes: const [
+      'A::accesskey',
+      'A::coords',
+      'A::hreflang',
+      'A::name',
+      'A::shape',
+      'A::tabindex',
+      'A::target',
+      'A::type',
+      'FORM::accept',
+      'FORM::autocomplete',
+      'FORM::enctype',
+      'FORM::method',
+      'FORM::name',
+      'FORM::novalidate',
+      'FORM::target',
+    ], allowedUriAttributes: const [
+      'A::href',
+      'FORM::action',
+    ]);
+  }
+
+  factory _SimpleNodeValidator.allowImages(UriPolicy uriPolicy) {
+    return new _SimpleNodeValidator(uriPolicy, allowedElements: const [
+      'IMG'
+    ], allowedAttributes: const [
+      'IMG::align',
+      'IMG::alt',
+      'IMG::border',
+      'IMG::height',
+      'IMG::hspace',
+      'IMG::ismap',
+      'IMG::name',
+      'IMG::usemap',
+      'IMG::vspace',
+      'IMG::width',
+    ], allowedUriAttributes: const [
+      'IMG::src',
+    ]);
+  }
+
+  factory _SimpleNodeValidator.allowTextElements() {
+    return new _SimpleNodeValidator(null, allowedElements: const [
+      'B',
+      'BLOCKQUOTE',
+      'BR',
+      'EM',
+      'H1',
+      'H2',
+      'H3',
+      'H4',
+      'H5',
+      'H6',
+      'HR',
+      'I',
+      'LI',
+      'OL',
+      'P',
+      'SPAN',
+      'UL',
+    ]);
+  }
+
+  /**
+   * Elements must be uppercased tag names. For example `'IMG'`.
+   * Attributes must be uppercased tag name followed by :: followed by
+   * lowercase attribute name. For example `'IMG:src'`.
+   */
+  _SimpleNodeValidator(this.uriPolicy,
+      {Iterable<String> allowedElements,
+      Iterable<String> allowedAttributes,
+      Iterable<String> allowedUriAttributes}) {
+    this.allowedElements.addAll(allowedElements ?? const []);
+    allowedAttributes = allowedAttributes ?? const [];
+    allowedUriAttributes = allowedUriAttributes ?? const [];
+    var legalAttributes = allowedAttributes
+        .where((x) => !_Html5NodeValidator._uriAttributes.contains(x));
+    var extraUriAttributes = allowedAttributes
+        .where((x) => _Html5NodeValidator._uriAttributes.contains(x));
+    this.allowedAttributes.addAll(legalAttributes);
+    this.allowedUriAttributes.addAll(allowedUriAttributes);
+    this.allowedUriAttributes.addAll(extraUriAttributes);
+  }
+
+  bool allowsElement(Element element) {
+    return allowedElements.contains(Element._safeTagName(element));
+  }
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    var tagName = Element._safeTagName(element);
+    if (allowedUriAttributes.contains('$tagName::$attributeName')) {
+      return uriPolicy.allowsUri(value);
+    } else if (allowedUriAttributes.contains('*::$attributeName')) {
+      return uriPolicy.allowsUri(value);
+    } else if (allowedAttributes.contains('$tagName::$attributeName')) {
+      return true;
+    } else if (allowedAttributes.contains('*::$attributeName')) {
+      return true;
+    } else if (allowedAttributes.contains('$tagName::*')) {
+      return true;
+    } else if (allowedAttributes.contains('*::*')) {
+      return true;
+    }
+    return false;
+  }
+}
+
+class _CustomElementNodeValidator extends _SimpleNodeValidator {
+  final bool allowTypeExtension;
+  final bool allowCustomTag;
+
+  _CustomElementNodeValidator(
+      UriPolicy uriPolicy,
+      Iterable<String> allowedElements,
+      Iterable<String> allowedAttributes,
+      Iterable<String> allowedUriAttributes,
+      bool allowTypeExtension,
+      bool allowCustomTag)
+      : this.allowTypeExtension = allowTypeExtension == true,
+        this.allowCustomTag = allowCustomTag == true,
+        super(uriPolicy,
+            allowedElements: allowedElements,
+            allowedAttributes: allowedAttributes,
+            allowedUriAttributes: allowedUriAttributes);
+
+  bool allowsElement(Element element) {
+    if (allowTypeExtension) {
+      var isAttr = element.attributes['is'];
+      if (isAttr != null) {
+        return allowedElements.contains(isAttr.toUpperCase()) &&
+            allowedElements.contains(Element._safeTagName(element));
+      }
+    }
+    return allowCustomTag &&
+        allowedElements.contains(Element._safeTagName(element));
+  }
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    if (allowsElement(element)) {
+      if (allowTypeExtension &&
+          attributeName == 'is' &&
+          allowedElements.contains(value.toUpperCase())) {
+        return true;
+      }
+      return super.allowsAttribute(element, attributeName, value);
+    }
+    return false;
+  }
+}
+
+class _TemplatingNodeValidator extends _SimpleNodeValidator {
+  static const _TEMPLATE_ATTRS = const <String>[
+    'bind',
+    'if',
+    'ref',
+    'repeat',
+    'syntax'
+  ];
+
+  final Set<String> _templateAttrs;
+
+  _TemplatingNodeValidator()
+      : _templateAttrs = new Set<String>.from(_TEMPLATE_ATTRS),
+        super(null,
+            allowedElements: ['TEMPLATE'],
+            allowedAttributes:
+                _TEMPLATE_ATTRS.map((attr) => 'TEMPLATE::$attr')) {}
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    if (super.allowsAttribute(element, attributeName, value)) {
+      return true;
+    }
+
+    if (attributeName == 'template' && value == "") {
+      return true;
+    }
+
+    if (element.attributes['template'] == "") {
+      return _templateAttrs.contains(attributeName);
+    }
+    return false;
+  }
+}
+
+class _SvgNodeValidator implements NodeValidator {
+  bool allowsElement(Element element) {
+    if (element is svg.ScriptElement) {
+      return false;
+    }
+    // Firefox 37 has issues with creating foreign elements inside a
+    // foreignobject tag as SvgElement. We don't want foreignobject contents
+    // anyway, so just remove the whole tree outright. And we can't rely
+    // on IE recognizing the SvgForeignObject type, so go by tagName. Bug 23144
+    if (element is svg.SvgElement &&
+        Element._safeTagName(element) == 'foreignObject') {
+      return false;
+    }
+    if (element is svg.SvgElement) {
+      return true;
+    }
+    return false;
+  }
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    if (attributeName == 'is' || attributeName.startsWith('on')) {
+      return false;
+    }
+    return allowsElement(element);
+  }
+}
diff --git a/tools/dom/nnbd_src/ReadyState.dart b/tools/dom/nnbd_src/ReadyState.dart
new file mode 100644
index 0000000..37c3fdb
--- /dev/null
+++ b/tools/dom/nnbd_src/ReadyState.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * Contains the set of standard values returned by HTMLDocument.getReadyState.
+ */
+abstract class ReadyState {
+  /**
+   * Indicates the document is still loading and parsing.
+   */
+  static const String LOADING = "loading";
+
+  /**
+   * Indicates the document is finished parsing but is still loading
+   * subresources.
+   */
+  static const String INTERACTIVE = "interactive";
+
+  /**
+   * Indicates the document and all subresources have been loaded.
+   */
+  static const String COMPLETE = "complete";
+}
diff --git a/tools/dom/nnbd_src/Validators.dart b/tools/dom/nnbd_src/Validators.dart
new file mode 100644
index 0000000..ac0663d
--- /dev/null
+++ b/tools/dom/nnbd_src/Validators.dart
@@ -0,0 +1,307 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+/**
+ * Interface used to validate that only accepted elements and attributes are
+ * allowed while parsing HTML strings into DOM nodes.
+ *
+ * In general, customization of validation behavior should be done via the
+ * [NodeValidatorBuilder] class to mitigate the chances of incorrectly
+ * implementing validation rules.
+ */
+abstract class NodeValidator {
+  /**
+   * Construct a default NodeValidator which only accepts whitelisted HTML5
+   * elements and attributes.
+   *
+   * If a uriPolicy is not specified then the default uriPolicy will be used.
+   */
+  factory NodeValidator({UriPolicy uriPolicy}) =>
+      new _Html5NodeValidator(uriPolicy: uriPolicy);
+
+  factory NodeValidator.throws(NodeValidator base) =>
+      new _ThrowsNodeValidator(base);
+
+  /**
+   * Returns true if the tagName is an accepted type.
+   */
+  bool allowsElement(Element element);
+
+  /**
+   * Returns true if the attribute is allowed.
+   *
+   * The attributeName parameter will always be in lowercase.
+   *
+   * See [allowsElement] for format of tagName.
+   */
+  bool allowsAttribute(Element element, String attributeName, String value);
+}
+
+/**
+ * Performs sanitization of a node tree after construction to ensure that it
+ * does not contain any disallowed elements or attributes.
+ *
+ * In general custom implementations of this class should not be necessary and
+ * all validation customization should be done in custom NodeValidators, but
+ * custom implementations of this class can be created to perform more complex
+ * tree sanitization.
+ */
+abstract class NodeTreeSanitizer {
+  /**
+   * Constructs a default tree sanitizer which will remove all elements and
+   * attributes which are not allowed by the provided validator.
+   */
+  factory NodeTreeSanitizer(NodeValidator validator) =>
+      new _ValidatingTreeSanitizer(validator);
+
+  /**
+   * Called with the root of the tree which is to be sanitized.
+   *
+   * This method needs to walk the entire tree and either remove elements and
+   * attributes which are not recognized as safe or throw an exception which
+   * will mark the entire tree as unsafe.
+   */
+  void sanitizeTree(Node node);
+
+  /**
+   * A sanitizer for trees that we trust. It does no validation and allows
+   * any elements. It is also more efficient, since it can pass the text
+   * directly through to the underlying APIs without creating a document
+   * fragment to be sanitized.
+   */
+  static const trusted = const _TrustedHtmlTreeSanitizer();
+}
+
+/**
+ * A sanitizer for trees that we trust. It does no validation and allows
+ * any elements.
+ */
+class _TrustedHtmlTreeSanitizer implements NodeTreeSanitizer {
+  const _TrustedHtmlTreeSanitizer();
+
+  sanitizeTree(Node node) {}
+}
+
+/**
+ * Defines the policy for what types of uris are allowed for particular
+ * attribute values.
+ *
+ * This can be used to provide custom rules such as allowing all http:// URIs
+ * for image attributes but only same-origin URIs for anchor tags.
+ */
+abstract class UriPolicy {
+  /**
+   * Constructs the default UriPolicy which is to only allow Uris to the same
+   * origin as the application was launched from.
+   *
+   * This will block all ftp: mailto: URIs. It will also block accessing
+   * https://example.com if the app is running from http://example.com.
+   */
+  factory UriPolicy() => new _SameOriginUriPolicy();
+
+  /**
+   * Checks if the uri is allowed on the specified attribute.
+   *
+   * The uri provided may or may not be a relative path.
+   */
+  bool allowsUri(String uri);
+}
+
+/**
+ * Allows URIs to the same origin as the current application was loaded from
+ * (such as https://example.com:80).
+ */
+class _SameOriginUriPolicy implements UriPolicy {
+  final AnchorElement _hiddenAnchor = new AnchorElement();
+  final Location _loc = window.location;
+
+  bool allowsUri(String uri) {
+    _hiddenAnchor.href = uri;
+    // IE leaves an empty hostname for same-origin URIs.
+    return (_hiddenAnchor.hostname == _loc.hostname &&
+            _hiddenAnchor.port == _loc.port &&
+            _hiddenAnchor.protocol == _loc.protocol) ||
+        (_hiddenAnchor.hostname == '' &&
+            _hiddenAnchor.port == '' &&
+            (_hiddenAnchor.protocol == ':' || _hiddenAnchor.protocol == ''));
+  }
+}
+
+class _ThrowsNodeValidator implements NodeValidator {
+  final NodeValidator validator;
+
+  _ThrowsNodeValidator(this.validator) {}
+
+  bool allowsElement(Element element) {
+    if (!validator.allowsElement(element)) {
+      throw new ArgumentError(Element._safeTagName(element));
+    }
+    return true;
+  }
+
+  bool allowsAttribute(Element element, String attributeName, String value) {
+    if (!validator.allowsAttribute(element, attributeName, value)) {
+      throw new ArgumentError(
+          '${Element._safeTagName(element)}[$attributeName="$value"]');
+    }
+  }
+}
+
+/**
+ * Standard tree sanitizer which validates a node tree against the provided
+ * validator and removes any nodes or attributes which are not allowed.
+ */
+class _ValidatingTreeSanitizer implements NodeTreeSanitizer {
+  NodeValidator validator;
+  _ValidatingTreeSanitizer(this.validator) {}
+
+  void sanitizeTree(Node node) {
+    void walk(Node node, Node parent) {
+      sanitizeNode(node, parent);
+
+      var child = node.lastChild;
+      while (null != child) {
+        var nextChild;
+        try {
+          // Child may be removed during the walk, and we may not
+          // even be able to get its previousNode.
+          nextChild = child.previousNode;
+        } catch (e) {
+          // Child appears bad, remove it. We want to check the rest of the
+          // children of node and, but we have no way of getting to the next
+          // child, so start again from the last child.
+          _removeNode(child, node);
+          child = null;
+          nextChild = node.lastChild;
+        }
+        if (child != null) walk(child, node);
+        child = nextChild;
+      }
+    }
+
+    walk(node, null);
+  }
+
+  /// Aggressively try to remove node.
+  void _removeNode(Node node, Node parent) {
+    // If we have the parent, it's presumably already passed more sanitization
+    // or is the fragment, so ask it to remove the child. And if that fails
+    // try to set the outer html.
+    if (parent == null) {
+      node.remove();
+    } else {
+      parent._removeChild(node);
+    }
+  }
+
+  /// Sanitize the element, assuming we can't trust anything about it.
+  void _sanitizeUntrustedElement(/* Element */ element, Node parent) {
+    // If the _hasCorruptedAttributes does not successfully return false,
+    // then we consider it corrupted and remove.
+    // TODO(alanknight): This is a workaround because on Firefox
+    // embed/object
+    // tags typeof is "function", not "object". We don't recognize them, and
+    // can't call methods. This does mean that you can't explicitly allow an
+    // embed tag. The only thing that will let it through is a null
+    // sanitizer that doesn't traverse the tree at all. But sanitizing while
+    // allowing embeds seems quite unlikely. This is also the reason that we
+    // can't declare the type of element, as an embed won't pass any type
+    // check in dart2js.
+    var corrupted = true;
+    var attrs;
+    var isAttr;
+    try {
+      // If getting/indexing attributes throws, count that as corrupt.
+      attrs = element.attributes;
+      isAttr = attrs['is'];
+      var corruptedTest1 = Element._hasCorruptedAttributes(element);
+
+      // On IE, erratically, the hasCorruptedAttributes test can return false,
+      // even though it clearly is corrupted. A separate copy of the test
+      // inlining just the basic check seems to help.
+      corrupted = corruptedTest1
+          ? true
+          : Element._hasCorruptedAttributesAdditionalCheck(element);
+    } catch (e) {}
+    var elementText = 'element unprintable';
+    try {
+      elementText = element.toString();
+    } catch (e) {}
+    try {
+      var elementTagName = Element._safeTagName(element);
+      _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
+          attrs, isAttr);
+    } on ArgumentError {
+      // Thrown by _ThrowsNodeValidator
+      rethrow;
+    } catch (e) {
+      // Unexpected exception sanitizing -> remove
+      _removeNode(element, parent);
+      window.console.warn('Removing corrupted element $elementText');
+    }
+  }
+
+  /// Having done basic sanity checking on the element, and computed the
+  /// important attributes we want to check, remove it if it's not valid
+  /// or not allowed, either as a whole or particular attributes.
+  void _sanitizeElement(Element element, Node parent, bool corrupted,
+      String text, String tag, Map attrs, String isAttr) {
+    if (false != corrupted) {
+      _removeNode(element, parent);
+      window.console
+          .warn('Removing element due to corrupted attributes on <$text>');
+      return;
+    }
+    if (!validator.allowsElement(element)) {
+      _removeNode(element, parent);
+      window.console.warn('Removing disallowed element <$tag> from $parent');
+      return;
+    }
+
+    if (isAttr != null) {
+      if (!validator.allowsAttribute(element, 'is', isAttr)) {
+        _removeNode(element, parent);
+        window.console.warn('Removing disallowed type extension '
+            '<$tag is="$isAttr">');
+        return;
+      }
+    }
+
+    // TODO(blois): Need to be able to get all attributes, irrespective of
+    // XMLNS.
+    var keys = attrs.keys.toList();
+    for (var i = attrs.length - 1; i >= 0; --i) {
+      var name = keys[i];
+      if (!validator.allowsAttribute(
+          element, name.toLowerCase(), attrs[name])) {
+        window.console.warn('Removing disallowed attribute '
+            '<$tag $name="${attrs[name]}">');
+        attrs.remove(name);
+      }
+    }
+
+    if (element is TemplateElement) {
+      TemplateElement template = element;
+      sanitizeTree(template.content);
+    }
+  }
+
+  /// Sanitize the node and its children recursively.
+  void sanitizeNode(Node node, Node parent) {
+    switch (node.nodeType) {
+      case Node.ELEMENT_NODE:
+        _sanitizeUntrustedElement(node, parent);
+        break;
+      case Node.COMMENT_NODE:
+      case Node.DOCUMENT_FRAGMENT_NODE:
+      case Node.TEXT_NODE:
+      case Node.CDATA_SECTION_NODE:
+        break;
+      default:
+        _removeNode(node, parent);
+    }
+  }
+}
diff --git a/tools/dom/nnbd_src/WrappedList.dart b/tools/dom/nnbd_src/WrappedList.dart
new file mode 100644
index 0000000..6a8d43c
--- /dev/null
+++ b/tools/dom/nnbd_src/WrappedList.dart
@@ -0,0 +1,93 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+/**
+ * A list which just wraps another list, for either intercepting list calls or
+ * retyping the list (for example, from List<A> to List<B> where B extends A).
+ */
+class _WrappedList<E extends Node> extends ListBase<E>
+    implements NodeListWrapper {
+  final List<Node> _list;
+
+  _WrappedList(this._list);
+
+  // Iterable APIs
+
+  Iterator<E> get iterator => new _WrappedIterator<E>(_list.iterator);
+
+  int get length => _list.length;
+
+  // Collection APIs
+
+  void add(E element) {
+    _list.add(element);
+  }
+
+  bool remove(Object? element) => _list.remove(element);
+
+  void clear() {
+    _list.clear();
+  }
+
+  // List APIs
+
+  E operator [](int index) => _list[index];
+
+  void operator []=(int index, E value) {
+    _list[index] = value;
+  }
+
+  set length(int newLength) {
+    _list.length = newLength;
+  }
+
+  void sort([int compare(E a, E b)?]) {
+    // Implicit downcast on argument from Node to E-extends-Node.
+    _list.sort((Node a, Node b) => compare(a, b));
+  }
+
+  int indexOf(Object element, [int start = 0]) => _list.indexOf(element, start);
+
+  int lastIndexOf(Object element, [int? start]) =>
+      _list.lastIndexOf(element, start);
+
+  void insert(int index, E element) => _list.insert(index, element);
+
+  E removeAt(int index) => _list.removeAt(index);
+
+  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
+    _list.setRange(start, end, iterable, skipCount);
+  }
+
+  void removeRange(int start, int end) {
+    _list.removeRange(start, end);
+  }
+
+  void replaceRange(int start, int end, Iterable<E> iterable) {
+    _list.replaceRange(start, end, iterable);
+  }
+
+  void fillRange(int start, int end, [E? fillValue]) {
+    _list.fillRange(start, end, fillValue);
+  }
+
+  List<Node> get rawList => _list;
+}
+
+/**
+ * Iterator wrapper for _WrappedList.
+ */
+class _WrappedIterator<E extends Node> implements Iterator<E> {
+  Iterator<Node> _iterator;
+
+  _WrappedIterator(this._iterator);
+
+  bool moveNext() {
+    return _iterator.moveNext();
+  }
+
+  E get current => _iterator.current as E;
+}
diff --git a/tools/dom/nnbd_src/_HttpRequestUtils.dart b/tools/dom/nnbd_src/_HttpRequestUtils.dart
new file mode 100644
index 0000000..d6e73d7
--- /dev/null
+++ b/tools/dom/nnbd_src/_HttpRequestUtils.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+class _HttpRequestUtils {
+  // Helper for factory HttpRequest.get
+  static HttpRequest get(
+      String url, onComplete(HttpRequest request), bool withCredentials) {
+    final request = new HttpRequest();
+    request.open('GET', url, async: true);
+
+    request.withCredentials = withCredentials;
+
+    request.onReadyStateChange.listen((e) {
+      if (request.readyState == HttpRequest.DONE) {
+        onComplete(request);
+      }
+    });
+
+    request.send();
+
+    return request;
+  }
+}
diff --git a/tools/dom/nnbd_src/_ListIterators.dart b/tools/dom/nnbd_src/_ListIterators.dart
new file mode 100644
index 0000000..0a9080e
--- /dev/null
+++ b/tools/dom/nnbd_src/_ListIterators.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+// Iterator for arrays with fixed size.
+class FixedSizeListIterator<T> implements Iterator<T> {
+  final List<T> _array;
+  final int _length; // Cache array length for faster access.
+  int _position;
+  T _current;
+
+  FixedSizeListIterator(List<T> array)
+      : _array = array,
+        _position = -1,
+        _length = array.length;
+
+  bool moveNext() {
+    int nextPosition = _position + 1;
+    if (nextPosition < _length) {
+      _current = _array[nextPosition];
+      _position = nextPosition;
+      return true;
+    }
+    _current = null;
+    _position = _length;
+    return false;
+  }
+
+  T get current => _current;
+}
+
+// Iterator for arrays with variable size.
+class _VariableSizeListIterator<T> implements Iterator<T> {
+  final List<T> _array;
+  int _position;
+  T _current;
+
+  _VariableSizeListIterator(List<T> array)
+      : _array = array,
+        _position = -1;
+
+  bool moveNext() {
+    int nextPosition = _position + 1;
+    if (nextPosition < _array.length) {
+      _current = _array[nextPosition];
+      _position = nextPosition;
+      return true;
+    }
+    _current = null;
+    _position = _array.length;
+    return false;
+  }
+
+  T get current => _current;
+}
diff --git a/tools/dom/nnbd_src/dart2js_Console.dart b/tools/dom/nnbd_src/dart2js_Console.dart
new file mode 100644
index 0000000..5ed9206
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_Console.dart
@@ -0,0 +1,82 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+class Console {
+  const Console._safe();
+  static const Console _safeConsole = const Console._safe();
+
+  bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
+
+  MemoryInfo get memory =>
+      _isConsoleDefined ? JS('MemoryInfo', 'window.console.memory') : null;
+
+  void assertCondition(bool condition, Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.assertCondition(#, #)', condition, arg)
+      : null;
+
+  void clear(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.clear(#)', arg) : null;
+
+  void count(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.count(#)', arg) : null;
+
+  void debug(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.debug(#)', arg) : null;
+
+  void dir(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.dir(#)', arg) : null;
+
+  void dirxml(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.dirxml(#)', arg) : null;
+
+  void error(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.error(#)', arg) : null;
+
+  void group(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.group(#)', arg) : null;
+
+  void groupCollapsed(Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.groupCollapsed(#)', arg)
+      : null;
+
+  void groupEnd() =>
+      _isConsoleDefined ? JS('void', 'window.console.groupEnd()') : null;
+
+  void info(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.info(#)', arg) : null;
+
+  void log(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.log(#)', arg) : null;
+
+  void markTimeline(Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.markTimeline(#)', arg)
+      : null;
+
+  void profile(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.profile(#)', title) : null;
+
+  void profileEnd(String title) => _isConsoleDefined
+      ? JS('void', 'window.console.profileEnd(#)', title)
+      : null;
+
+  void table(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.table(#)', arg) : null;
+
+  void time(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.time(#)', title) : null;
+
+  void timeEnd(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.timeEnd(#)', title) : null;
+
+  void timeStamp(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.timeStamp(#)', arg) : null;
+
+  void trace(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.trace(#)', arg) : null;
+
+  void warn(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.warn(#)', arg) : null;
+}
diff --git a/tools/dom/nnbd_src/dart2js_Conversions.dart b/tools/dom/nnbd_src/dart2js_Conversions.dart
new file mode 100644
index 0000000..aa78ec1
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_Conversions.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Conversions for Window.  These check if the window is the local
+// window, and if it's not, wraps or unwraps it with a secure wrapper.
+// We need to test for EventTarget here as well as it's a base type.
+// We omit an unwrapper for Window as no methods take a non-local
+// window as a parameter.
+
+part of html;
+
+WindowBase _convertNativeToDart_Window(win) {
+  if (win == null) return null;
+  return _DOMWindowCrossFrame._createSafe(win);
+}
+
+EventTarget _convertNativeToDart_EventTarget(e) {
+  if (e == null) {
+    return null;
+  }
+  // Assume it's a Window if it contains the postMessage property.  It may be
+  // from a different frame - without a patched prototype - so we cannot
+  // rely on Dart type checking.
+  if (JS('bool', r'"postMessage" in #', e)) {
+    var window = _DOMWindowCrossFrame._createSafe(e);
+    // If it's a native window.
+    if (window is EventTarget) {
+      return window;
+    }
+    return null;
+  } else
+    return e;
+}
+
+EventTarget _convertDartToNative_EventTarget(e) {
+  if (e is _DOMWindowCrossFrame) {
+    return e._window;
+  } else {
+    return e;
+  }
+}
+
+_convertNativeToDart_XHR_Response(o) {
+  if (o is Document) {
+    return o;
+  }
+  return convertNativeToDart_SerializedScriptValue(o);
+}
diff --git a/tools/dom/nnbd_src/dart2js_CssClassSet.dart b/tools/dom/nnbd_src/dart2js_CssClassSet.dart
new file mode 100644
index 0000000..0afe6fcf
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_CssClassSet.dart
@@ -0,0 +1,260 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+/**
+ * A set (union) of the CSS classes that are present in a set of elements.
+ * Implemented separately from _ElementCssClassSet for performance.
+ */
+class _MultiElementCssClassSet extends CssClassSetImpl {
+  final Iterable<Element> _elementIterable;
+
+  // TODO(sra): Perhaps we should store the DomTokenList instead.
+  final List<CssClassSetImpl> _sets;
+
+  factory _MultiElementCssClassSet(Iterable<Element> elements) {
+    return new _MultiElementCssClassSet._(elements,
+        new List<CssClassSetImpl>.from(elements.map((Element e) => e.classes)));
+  }
+
+  _MultiElementCssClassSet._(this._elementIterable, this._sets);
+
+  Set<String> readClasses() {
+    var s = new LinkedHashSet<String>();
+    _sets.forEach((CssClassSetImpl e) => s.addAll(e.readClasses()));
+    return s;
+  }
+
+  void writeClasses(Set<String> s) {
+    var classes = s.join(' ');
+    for (Element e in _elementIterable) {
+      e.className = classes;
+    }
+  }
+
+  /**
+   * Helper method used to modify the set of css classes on this element.
+   *
+   *   f - callback with:
+   *   s - a Set of all the css class name currently on this element.
+   *
+   *   After f returns, the modified set is written to the
+   *       className property of this element.
+   */
+  modify(f(Set<String> s)) {
+    _sets.forEach((CssClassSetImpl e) => e.modify(f));
+  }
+
+  /**
+   * Adds the class [value] to the element if it is not on it, removes it if it
+   * is.
+   *
+   * TODO(sra): It seems wrong to collect a 'changed' flag like this when the
+   * underlying toggle returns an 'is set' flag.
+   */
+  bool toggle(String value, [bool? shouldAdd]) => _sets.fold(
+      false,
+      (bool changed, CssClassSetImpl e) =>
+          e.toggle(value, shouldAdd) || changed);
+
+  /**
+   * Remove the class [value] from element, and return true on successful
+   * removal.
+   *
+   * This is the Dart equivalent of jQuery's
+   * [removeClass](http://api.jquery.com/removeClass/).
+   */
+  bool remove(Object? value) => _sets.fold(
+      false, (bool changed, CssClassSetImpl e) => e.remove(value) || changed);
+}
+
+class _ElementCssClassSet extends CssClassSetImpl {
+  final Element _element;
+
+  _ElementCssClassSet(this._element);
+
+  Set<String> readClasses() {
+    var s = new LinkedHashSet<String>();
+    var classname = _element.className;
+
+    for (String name in classname.split(' ')) {
+      String trimmed = name.trim();
+      if (!trimmed.isEmpty) {
+        s.add(trimmed);
+      }
+    }
+    return s;
+  }
+
+  void writeClasses(Set<String> s) {
+    _element.className = s.join(' ');
+  }
+
+  int get length => _classListLength(_classListOf(_element));
+  bool get isEmpty => length == 0;
+  bool get isNotEmpty => length != 0;
+
+  void clear() {
+    _element.className = '';
+  }
+
+  bool contains(Object? value) {
+    return _contains(_element, value);
+  }
+
+  bool add(String value) {
+    return _add(_element, value);
+  }
+
+  bool remove(Object? value) {
+    return value is String && _remove(_element, value);
+  }
+
+  bool toggle(String value, [bool? shouldAdd]) {
+    return _toggle(_element, value, shouldAdd);
+  }
+
+  void addAll(Iterable<String> iterable) {
+    _addAll(_element, iterable);
+  }
+
+  void removeAll(Iterable<Object?> iterable) {
+    _removeAll(_element, iterable);
+  }
+
+  void retainAll(Iterable<Object?> iterable) {
+    _removeWhere(_element, iterable.toSet().contains, false);
+  }
+
+  void removeWhere(bool test(String name)) {
+    _removeWhere(_element, test, true);
+  }
+
+  void retainWhere(bool test(String name)) {
+    _removeWhere(_element, test, false);
+  }
+
+  static bool _contains(Element _element, Object value) {
+    return value is String && _classListContains(_classListOf(_element), value);
+  }
+
+  @pragma('dart2js:tryInline')
+  static bool _add(Element _element, String value) {
+    DomTokenList list = _classListOf(_element);
+    // Compute returned result independently of action upon the set.
+    bool added = !_classListContainsBeforeAddOrRemove(list, value);
+    _classListAdd(list, value);
+    return added;
+  }
+
+  @pragma('dart2js:tryInline')
+  static bool _remove(Element _element, String value) {
+    DomTokenList list = _classListOf(_element);
+    bool removed = _classListContainsBeforeAddOrRemove(list, value);
+    _classListRemove(list, value);
+    return removed;
+  }
+
+  static bool _toggle(Element _element, String value, bool? shouldAdd) {
+    // There is no value that can be passed as the second argument of
+    // DomTokenList.toggle that behaves the same as passing one argument.
+    // `null` is seen as false, meaning 'remove'.
+    return shouldAdd == null
+        ? _toggleDefault(_element, value)
+        : _toggleOnOff(_element, value, shouldAdd);
+  }
+
+  static bool _toggleDefault(Element _element, String value) {
+    DomTokenList list = _classListOf(_element);
+    return _classListToggle1(list, value);
+  }
+
+  static bool _toggleOnOff(Element _element, String value, bool? shouldAdd) {
+    DomTokenList list = _classListOf(_element);
+    // IE's toggle does not take a second parameter. We would prefer:
+    //
+    //    return _classListToggle2(list, value, shouldAdd);
+    //
+    if (shouldAdd ?? false) {
+      _classListAdd(list, value);
+      return true;
+    } else {
+      _classListRemove(list, value);
+      return false;
+    }
+  }
+
+  static void _addAll(Element _element, Iterable<String> iterable) {
+    DomTokenList list = _classListOf(_element);
+    for (String value in iterable) {
+      _classListAdd(list, value);
+    }
+  }
+
+  static void _removeAll(Element _element, Iterable<Object> iterable) {
+    DomTokenList list = _classListOf(_element);
+    for (String value in iterable) {
+      _classListRemove(list, value);
+    }
+  }
+
+  static void _removeWhere(
+      Element _element, bool test(String name), bool doRemove) {
+    DomTokenList list = _classListOf(_element);
+    int i = 0;
+    while (i < _classListLength(list)) {
+      String item = list.item(i);
+      if (doRemove == test(item)) {
+        _classListRemove(list, item);
+      } else {
+        ++i;
+      }
+    }
+  }
+
+  // A collection of static methods for DomTokenList. These methods are a
+  // work-around for the lack of annotations to express the full behaviour of
+  // the DomTokenList methods.
+
+  static DomTokenList _classListOf(Element e) => JS(
+      'returns:DomTokenList;creates:DomTokenList;effects:none;depends:all;',
+      '#.classList',
+      e);
+
+  static int _classListLength(DomTokenList list) =>
+      JS('returns:JSUInt31;effects:none;depends:all;', '#.length', list);
+
+  static bool _classListContains(DomTokenList list, String value) =>
+      JS('returns:bool;effects:none;depends:all', '#.contains(#)', list, value);
+
+  static bool _classListContainsBeforeAddOrRemove(
+          DomTokenList list, String value) =>
+      // 'throws:never' is a lie, since 'contains' will throw on an illegal
+      // token.  However, we always call this function immediately prior to
+      // add/remove/toggle with the same token.  Often the result of 'contains'
+      // is unused and the lie makes it possible for the 'contains' instruction
+      // to be removed.
+      JS('returns:bool;effects:none;depends:all;throws:null(1)',
+          '#.contains(#)', list, value);
+
+  static void _classListAdd(DomTokenList list, String value) {
+    // list.add(value);
+    JS('', '#.add(#)', list, value);
+  }
+
+  static void _classListRemove(DomTokenList list, String value) {
+    // list.remove(value);
+    JS('', '#.remove(#)', list, value);
+  }
+
+  static bool _classListToggle1(DomTokenList list, String value) {
+    return JS('bool', '#.toggle(#)', list, value);
+  }
+
+  static bool _classListToggle2(
+      DomTokenList list, String value, bool? shouldAdd) {
+    return JS('bool', '#.toggle(#, #)', list, value, shouldAdd);
+  }
+}
diff --git a/tools/dom/nnbd_src/dart2js_CustomElementSupport.dart b/tools/dom/nnbd_src/dart2js_CustomElementSupport.dart
new file mode 100644
index 0000000..98c3c24
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_CustomElementSupport.dart
@@ -0,0 +1,214 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+_callConstructor(constructor, interceptor) {
+  return (receiver) {
+    setNativeSubclassDispatchRecord(receiver, interceptor);
+
+    // Mirrors uses the constructor property to cache lookups, so we need it to
+    // be set correctly, including on IE where it is not automatically picked
+    // up from the __proto__.
+    JS('', '#.constructor = #.__proto__.constructor', receiver, receiver);
+    return JS('', '#(#)', constructor, receiver);
+  };
+}
+
+_callAttached(receiver) {
+  return receiver.attached();
+}
+
+_callDetached(receiver) {
+  return receiver.detached();
+}
+
+_callAttributeChanged(receiver, name, oldValue, newValue) {
+  return receiver.attributeChanged(name, oldValue, newValue);
+}
+
+_makeCallbackMethod(callback) {
+  return JS(
+      '',
+      '''((function(invokeCallback) {
+             return function() {
+               return invokeCallback(this);
+             };
+          })(#))''',
+      convertDartClosureToJS(callback, 1));
+}
+
+_makeCallbackMethod3(callback) {
+  return JS(
+      '',
+      '''((function(invokeCallback) {
+             return function(arg1, arg2, arg3) {
+               return invokeCallback(this, arg1, arg2, arg3);
+             };
+          })(#))''',
+      convertDartClosureToJS(callback, 4));
+}
+
+/// Checks whether the given [element] correctly extends from the native class
+/// with the given [baseClassName]. This method will throw if the base class
+/// doesn't match, except when the element extends from `template` and it's base
+/// class is `HTMLUnknownElement`. This exclusion is needed to support extension
+/// of template elements (used heavily in Polymer 1.0) on IE11 when using the
+/// webcomponents-lite.js polyfill.
+void _checkExtendsNativeClassOrTemplate(
+    Element element, String extendsTag, String baseClassName) {
+  if (!JS('bool', '(# instanceof window[#])', element, baseClassName) &&
+      !((extendsTag == 'template' &&
+          JS('bool', '(# instanceof window["HTMLUnknownElement"])',
+              element)))) {
+    throw new UnsupportedError('extendsTag does not match base native class');
+  }
+}
+
+Function _registerCustomElement(context, document, String tag, [Map options]) {
+  // Function follows the same pattern as the following JavaScript code for
+  // registering a custom element.
+  //
+  //    var proto = Object.create(HTMLElement.prototype, {
+  //        createdCallback: {
+  //          value: function() {
+  //            window.console.log('here');
+  //          }
+  //        }
+  //    });
+  //    document.registerElement('x-foo', { prototype: proto });
+  //    ...
+  //    var e = document.createElement('x-foo');
+
+  var extendsTagName = '';
+  Type type;
+  if (options != null) {
+    extendsTagName = options['extends'];
+    type = options['prototype'];
+  }
+
+  var interceptorClass = findInterceptorConstructorForType(type);
+  if (interceptorClass == null) {
+    throw new ArgumentError(type);
+  }
+
+  var interceptor = JS('=Object', '#.prototype', interceptorClass);
+
+  var constructor = findConstructorForNativeSubclassType(type, 'created');
+  if (constructor == null) {
+    throw new ArgumentError("$type has no constructor called 'created'");
+  }
+
+  // Workaround for 13190- use an article element to ensure that HTMLElement's
+  // interceptor is resolved correctly.
+  getNativeInterceptor(new Element.tag('article'));
+
+  String baseClassName = findDispatchTagForInterceptorClass(interceptorClass);
+  if (baseClassName == null) {
+    throw new ArgumentError(type);
+  }
+
+  if (extendsTagName == null) {
+    if (baseClassName != 'HTMLElement') {
+      throw new UnsupportedError('Class must provide extendsTag if base '
+          'native class is not HtmlElement');
+    }
+  } else {
+    var element = document.createElement(extendsTagName);
+    _checkExtendsNativeClassOrTemplate(element, extendsTagName, baseClassName);
+  }
+
+  var baseConstructor = JS('=Object', '#[#]', context, baseClassName);
+
+  var properties = JS('=Object', '{}');
+
+  JS(
+      'void',
+      '#.createdCallback = #',
+      properties,
+      JS('=Object', '{value: #}',
+          _makeCallbackMethod(_callConstructor(constructor, interceptor))));
+  JS('void', '#.attachedCallback = #', properties,
+      JS('=Object', '{value: #}', _makeCallbackMethod(_callAttached)));
+  JS('void', '#.detachedCallback = #', properties,
+      JS('=Object', '{value: #}', _makeCallbackMethod(_callDetached)));
+  JS('void', '#.attributeChangedCallback = #', properties,
+      JS('=Object', '{value: #}', _makeCallbackMethod3(_callAttributeChanged)));
+
+  var baseProto = JS('=Object', '#.prototype', baseConstructor);
+  var proto = JS('=Object', 'Object.create(#, #)', baseProto, properties);
+
+  setNativeSubclassDispatchRecord(proto, interceptor);
+
+  var opts = JS('=Object', '{prototype: #}', proto);
+
+  if (extendsTagName != null) {
+    JS('=Object', '#.extends = #', opts, extendsTagName);
+  }
+
+  return JS(
+      'JavaScriptFunction', '#.registerElement(#, #)', document, tag, opts);
+}
+
+//// Called by Element.created to do validation & initialization.
+void _initializeCustomElement(Element e) {
+  // TODO(blois): Add validation that this is only in response to an upgrade.
+}
+
+/// Dart2JS implementation of ElementUpgrader
+class _JSElementUpgrader implements ElementUpgrader {
+  var _interceptor;
+  var _constructor;
+  var _nativeType;
+
+  _JSElementUpgrader(Document document, Type type, String extendsTag) {
+    var interceptorClass = findInterceptorConstructorForType(type);
+    if (interceptorClass == null) {
+      throw new ArgumentError(type);
+    }
+
+    _constructor = findConstructorForNativeSubclassType(type, 'created');
+    if (_constructor == null) {
+      throw new ArgumentError("$type has no constructor called 'created'");
+    }
+
+    // Workaround for 13190- use an article element to ensure that HTMLElement's
+    // interceptor is resolved correctly.
+    getNativeInterceptor(new Element.tag('article'));
+
+    var baseClassName = findDispatchTagForInterceptorClass(interceptorClass);
+    if (baseClassName == null) {
+      throw new ArgumentError(type);
+    }
+
+    if (extendsTag == null) {
+      if (baseClassName != 'HTMLElement') {
+        throw new UnsupportedError('Class must provide extendsTag if base '
+            'native class is not HtmlElement');
+      }
+      _nativeType = HtmlElement;
+    } else {
+      var element = document.createElement(extendsTag);
+      _checkExtendsNativeClassOrTemplate(element, extendsTag, baseClassName);
+      _nativeType = element.runtimeType;
+    }
+
+    _interceptor = JS('=Object', '#.prototype', interceptorClass);
+  }
+
+  Element upgrade(Element element) {
+    // Only exact type matches are supported- cannot be a subclass.
+    if (element.runtimeType != _nativeType) {
+      // Some browsers may represent non-upgraded elements <x-foo> as
+      // UnknownElement and not a plain HtmlElement.
+      if (_nativeType != HtmlElement || element.runtimeType != UnknownElement) {
+        throw new ArgumentError('element is not subclass of $_nativeType');
+      }
+    }
+
+    setNativeSubclassDispatchRecord(element, _interceptor);
+    JS('', '#(#)', _constructor, element);
+    return element;
+  }
+}
diff --git a/tools/dom/nnbd_src/dart2js_DOMImplementation.dart b/tools/dom/nnbd_src/dart2js_DOMImplementation.dart
new file mode 100644
index 0000000..e45e37c
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_DOMImplementation.dart
@@ -0,0 +1,137 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+// TODO(vsm): Unify with Dartium version.
+class _DOMWindowCrossFrame implements WindowBase {
+  // Private window.  Note, this is a window in another frame, so it
+  // cannot be typed as "Window" as its prototype is not patched
+  // properly.  Its fields and methods can only be accessed via JavaScript.
+  final _window;
+
+  // Fields.
+  HistoryBase get history =>
+      _HistoryCrossFrame._createSafe(JS('HistoryBase', '#.history', _window));
+  LocationBase get location => _LocationCrossFrame._createSafe(
+      JS('LocationBase', '#.location', _window));
+
+  // TODO(vsm): Add frames to navigate subframes.  See 2312.
+
+  bool get closed => JS('bool', '#.closed', _window);
+
+  WindowBase get opener => _createSafe(JS('WindowBase', '#.opener', _window));
+
+  WindowBase get parent => _createSafe(JS('WindowBase', '#.parent', _window));
+
+  WindowBase get top => _createSafe(JS('WindowBase', '#.top', _window));
+
+  // Methods.
+  void close() => JS('void', '#.close()', _window);
+
+  void postMessage(var message, String targetOrigin,
+      [List messagePorts = null]) {
+    if (messagePorts == null) {
+      JS('void', '#.postMessage(#,#)', _window,
+          convertDartToNative_SerializedScriptValue(message), targetOrigin);
+    } else {
+      JS(
+          'void',
+          '#.postMessage(#,#,#)',
+          _window,
+          convertDartToNative_SerializedScriptValue(message),
+          targetOrigin,
+          messagePorts);
+    }
+  }
+
+  // Implementation support.
+  _DOMWindowCrossFrame(this._window);
+
+  static WindowBase _createSafe(w) {
+    if (identical(w, window)) {
+      return w;
+    } else {
+      // TODO(vsm): Cache or implement equality.
+      registerGlobalObject(w);
+      return new _DOMWindowCrossFrame(w);
+    }
+  }
+
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  Events get on => throw new UnsupportedError(
+      'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void _addEventListener(String? type, EventListener? listener,
+          [bool? useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void addEventListener(String type, EventListener listener,
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  bool dispatchEvent(Event event) => throw new UnsupportedError(
+      'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void _removeEventListener(String? type, EventListener? listener,
+          [bool? useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void removeEventListener(String type, EventListener listener,
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+}
+
+class _LocationCrossFrame implements LocationBase {
+  // Private location.  Note, this is a location object in another frame, so it
+  // cannot be typed as "Location" as its prototype is not patched
+  // properly.  Its fields and methods can only be accessed via JavaScript.
+  var _location;
+
+  set href(String val) => _setHref(_location, val);
+  static void _setHref(location, val) {
+    JS('void', '#.href = #', location, val);
+  }
+
+  // Implementation support.
+  _LocationCrossFrame(this._location);
+
+  static LocationBase _createSafe(location) {
+    if (identical(location, window.location)) {
+      return location;
+    } else {
+      // TODO(vsm): Cache or implement equality.
+      return new _LocationCrossFrame(location);
+    }
+  }
+}
+
+class _HistoryCrossFrame implements HistoryBase {
+  // Private history.  Note, this is a history object in another frame, so it
+  // cannot be typed as "History" as its prototype is not patched
+  // properly.  Its fields and methods can only be accessed via JavaScript.
+  var _history;
+
+  void back() => JS('void', '#.back()', _history);
+
+  void forward() => JS('void', '#.forward()', _history);
+
+  void go(int distance) => JS('void', '#.go(#)', _history, distance);
+
+  // Implementation support.
+  _HistoryCrossFrame(this._history);
+
+  static HistoryBase _createSafe(h) {
+    if (identical(h, window.history)) {
+      return h;
+    } else {
+      // TODO(vsm): Cache or implement equality.
+      return new _HistoryCrossFrame(h);
+    }
+  }
+}
diff --git a/tools/dom/nnbd_src/dart2js_KeyEvent.dart b/tools/dom/nnbd_src/dart2js_KeyEvent.dart
new file mode 100644
index 0000000..aca9fd2
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_KeyEvent.dart
@@ -0,0 +1,237 @@
+/**
+ * A custom KeyboardEvent that attempts to eliminate cross-browser
+ * inconsistencies, and also provide both keyCode and charCode information
+ * for all key events (when such information can be determined).
+ *
+ * KeyEvent tries to provide a higher level, more polished keyboard event
+ * information on top of the "raw" [KeyboardEvent].
+ *
+ * The mechanics of using KeyEvents is a little different from the underlying
+ * [KeyboardEvent]. To use KeyEvents, you need to create a stream and then add
+ * KeyEvents to the stream, rather than using the [EventTarget.dispatchEvent].
+ * Here's an example usage:
+ *
+ *     // Initialize a stream for the KeyEvents:
+ *     var stream = KeyEvent.keyPressEvent.forTarget(document.body);
+ *     // Start listening to the stream of KeyEvents.
+ *     stream.listen((keyEvent) =>
+ *         window.console.log('KeyPress event detected ${keyEvent.charCode}'));
+ *     ...
+ *     // Add a new KeyEvent of someone pressing the 'A' key to the stream so
+ *     // listeners can know a KeyEvent happened.
+ *     stream.add(new KeyEvent('keypress', keyCode: 65, charCode: 97));
+ *
+ * This class is very much a work in progress, and we'd love to get information
+ * on how we can make this class work with as many international keyboards as
+ * possible. Bugs welcome!
+ */
+class KeyEvent extends _WrappedEvent implements KeyboardEvent {
+  /** The parent KeyboardEvent that this KeyEvent is wrapping and "fixing". */
+  KeyboardEvent _parent;
+
+  /** The "fixed" value of whether the alt key is being pressed. */
+  bool _shadowAltKey;
+
+  /** Calculated value of what the estimated charCode is for this event. */
+  int _shadowCharCode;
+
+  /** Calculated value of what the estimated keyCode is for this event. */
+  int _shadowKeyCode;
+
+  /** Calculated value of what the estimated keyCode is for this event. */
+  int get keyCode => _shadowKeyCode;
+
+  /** Calculated value of what the estimated charCode is for this event. */
+  int get charCode => this.type == 'keypress' ? _shadowCharCode : 0;
+
+  /** Calculated value of whether the alt key is pressed is for this event. */
+  bool get altKey => _shadowAltKey;
+
+  /** Calculated value of what the estimated keyCode is for this event. */
+  int get which => keyCode;
+
+  /** Accessor to the underlying keyCode value is the parent event. */
+  int get _realKeyCode => JS('int', '#.keyCode', _parent);
+
+  /** Accessor to the underlying charCode value is the parent event. */
+  int get _realCharCode => JS('int', '#.charCode', _parent);
+
+  /** Accessor to the underlying altKey value is the parent event. */
+  bool get _realAltKey => JS('bool', '#.altKey', _parent);
+
+  /** Shadows on top of the parent's currentTarget. */
+  EventTarget _currentTarget;
+
+  final InputDeviceCapabilities sourceCapabilities;
+
+  /**
+   * The value we want to use for this object's dispatch. Created here so it is
+   * only invoked once.
+   */
+  static final _keyboardEventDispatchRecord = _makeRecord();
+
+  /** Helper to statically create the dispatch record. */
+  static _makeRecord() {
+    var interceptor = JS_INTERCEPTOR_CONSTANT(KeyboardEvent);
+    return makeLeafDispatchRecord(interceptor);
+  }
+
+  /** Construct a KeyEvent with [parent] as the event we're emulating. */
+  KeyEvent.wrap(KeyboardEvent parent) : super(parent) {
+    _parent = parent;
+    _shadowAltKey = _realAltKey;
+    _shadowCharCode = _realCharCode;
+    _shadowKeyCode = _realKeyCode;
+    _currentTarget = _parent.currentTarget;
+  }
+
+  /** Programmatically create a new KeyEvent (and KeyboardEvent). */
+  factory KeyEvent(String type,
+      {Window view,
+      bool canBubble: true,
+      bool cancelable: true,
+      int keyCode: 0,
+      int charCode: 0,
+      int location: 1,
+      bool ctrlKey: false,
+      bool altKey: false,
+      bool shiftKey: false,
+      bool metaKey: false,
+      EventTarget currentTarget}) {
+    if (view == null) {
+      view = window;
+    }
+
+    var eventObj;
+
+    // Currently this works on everything but Safari. Safari throws an
+    // "Attempting to change access mechanism for an unconfigurable property"
+    // TypeError when trying to do the Object.defineProperty hack, so we avoid
+    // this branch if possible.
+    // Also, if we want this branch to work in FF, we also need to modify
+    // _initKeyboardEvent to also take charCode and keyCode values to
+    // initialize initKeyEvent.
+
+    eventObj = new Event.eventType('KeyboardEvent', type,
+        canBubble: canBubble, cancelable: cancelable);
+
+    // Chromium Hack
+    JS(
+        'void',
+        "Object.defineProperty(#, 'keyCode', {"
+            "  get : function() { return this.keyCodeVal; } })",
+        eventObj);
+    JS(
+        'void',
+        "Object.defineProperty(#, 'which', {"
+            "  get : function() { return this.keyCodeVal; } })",
+        eventObj);
+    JS(
+        'void',
+        "Object.defineProperty(#, 'charCode', {"
+            "  get : function() { return this.charCodeVal; } })",
+        eventObj);
+
+    var keyIdentifier = _convertToHexString(charCode, keyCode);
+    eventObj._initKeyboardEvent(type, canBubble, cancelable, view,
+        keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey);
+    JS('void', '#.keyCodeVal = #', eventObj, keyCode);
+    JS('void', '#.charCodeVal = #', eventObj, charCode);
+
+    // Tell dart2js that it smells like a KeyboardEvent!
+    setDispatchProperty(eventObj, _keyboardEventDispatchRecord);
+
+    var keyEvent = new KeyEvent.wrap(eventObj);
+    if (keyEvent._currentTarget == null) {
+      keyEvent._currentTarget = currentTarget == null ? window : currentTarget;
+    }
+    return keyEvent;
+  }
+
+  // Currently known to work on all browsers but IE.
+  static bool get canUseDispatchEvent => JS(
+      'bool',
+      '(typeof document.body.dispatchEvent == "function")'
+          '&& document.body.dispatchEvent.length > 0');
+
+  /** The currently registered target for this event. */
+  EventTarget get currentTarget => _currentTarget;
+
+  // This is an experimental method to be sure.
+  static String _convertToHexString(int charCode, int keyCode) {
+    if (charCode != -1) {
+      var hex = charCode.toRadixString(16); // Convert to hexadecimal.
+      StringBuffer sb = new StringBuffer('U+');
+      for (int i = 0; i < 4 - hex.length; i++) sb.write('0');
+      sb.write(hex);
+      return sb.toString();
+    } else {
+      return KeyCode._convertKeyCodeToKeyName(keyCode);
+    }
+  }
+
+  // TODO(efortuna): If KeyEvent is sufficiently successful that we want to make
+  // it the default keyboard event handling, move these methods over to Element.
+  /** Accessor to provide a stream of KeyEvents on the desired target. */
+  static EventStreamProvider<KeyEvent> keyDownEvent =
+      new _KeyboardEventHandler('keydown');
+  /** Accessor to provide a stream of KeyEvents on the desired target. */
+  static EventStreamProvider<KeyEvent> keyUpEvent =
+      new _KeyboardEventHandler('keyup');
+  /** Accessor to provide a stream of KeyEvents on the desired target. */
+  static EventStreamProvider<KeyEvent> keyPressEvent =
+      new _KeyboardEventHandler('keypress');
+
+  String get code => _parent.code;
+  /** True if the ctrl key is pressed during this event. */
+  bool get ctrlKey => _parent.ctrlKey;
+  int get detail => _parent.detail;
+  bool get isComposing => _parent.isComposing;
+  String get key => _parent.key;
+  /**
+   * Accessor to the part of the keyboard that the key was pressed from (one of
+   * KeyLocation.STANDARD, KeyLocation.RIGHT, KeyLocation.LEFT,
+   * KeyLocation.NUMPAD, KeyLocation.MOBILE, KeyLocation.JOYSTICK).
+   */
+  int get location => _parent.location;
+  /** True if the Meta (or Mac command) key is pressed during this event. */
+  bool get metaKey => _parent.metaKey;
+  /** True if the shift key was pressed during this event. */
+  bool get shiftKey => _parent.shiftKey;
+  Window get view => _parent.view;
+  void _initUIEvent(
+      String type, bool canBubble, bool cancelable, Window? view, int detail) {
+    throw new UnsupportedError("Cannot initialize a UI Event from a KeyEvent.");
+  }
+
+  String get _shadowKeyIdentifier => JS('String', '#.keyIdentifier', _parent);
+
+  int get _charCode => charCode;
+  int get _keyCode => keyCode;
+  int get _which => which;
+
+  String get _keyIdentifier {
+    throw new UnsupportedError("keyIdentifier is unsupported.");
+  }
+
+  void _initKeyboardEvent(
+      String type,
+      bool canBubble,
+      bool cancelable,
+      Window view,
+      String keyIdentifier,
+      int location,
+      bool ctrlKey,
+      bool altKey,
+      bool shiftKey,
+      bool metaKey) {
+    throw new UnsupportedError(
+        "Cannot initialize a KeyboardEvent from a KeyEvent.");
+  }
+
+  bool getModifierState(String keyArgument) => throw new UnimplementedError();
+
+  bool get repeat => throw new UnimplementedError();
+  bool get isComposed => throw new UnimplementedError();
+  dynamic get _get_view => throw new UnimplementedError();
+}
diff --git a/tools/dom/nnbd_src/dart2js_Platform.dart b/tools/dom/nnbd_src/dart2js_Platform.dart
new file mode 100644
index 0000000..5988011
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_Platform.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+class Platform {
+  /**
+   * Returns true if dart:typed_data types are supported on this
+   * browser.  If false, using these types will generate a runtime
+   * error.
+   */
+  static final supportsTypedData = JS('bool', '!!(window.ArrayBuffer)');
+
+  /**
+   * Returns true if SIMD types in dart:typed_data types are supported
+   * on this browser.  If false, using these types will generate a runtime
+   * error.
+   */
+  static final supportsSimd = false;
+}
diff --git a/tools/dom/nnbd_src/dart2js_TypedArrayFactoryProvider.dart b/tools/dom/nnbd_src/dart2js_TypedArrayFactoryProvider.dart
new file mode 100644
index 0000000..58112a7
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_TypedArrayFactoryProvider.dart
@@ -0,0 +1,154 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+class _TypedArrayFactoryProvider {
+  static ByteData createByteData(int length) => _B8(length);
+  static ByteData createByteData_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _B8_2(buffer, byteOffset);
+    return _B8_3(buffer, byteOffset, length);
+  }
+
+  static Float32List createFloat32List(int length) => _F32(length);
+  static Float32List createFloat32List_fromList(List<num> list) =>
+      _F32(ensureNative(list));
+  static Float32List createFloat32List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _F32_2(buffer, byteOffset);
+    return _F32_3(buffer, byteOffset, length);
+  }
+
+  static Float64List createFloat64List(int length) => _F64(length);
+  static Float64List createFloat64List_fromList(List<num> list) =>
+      _F64(ensureNative(list));
+  static Float64List createFloat64List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _F64_2(buffer, byteOffset);
+    return _F64_3(buffer, byteOffset, length);
+  }
+
+  static Int8List createInt8List(int length) => _I8(length);
+  static Int8List createInt8List_fromList(List<num> list) =>
+      _I8(ensureNative(list));
+  static Int8List createInt8List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _I8_2(buffer, byteOffset);
+    return _I8_3(buffer, byteOffset, length);
+  }
+
+  static Int16List createInt16List(int length) => _I16(length);
+  static Int16List createInt16List_fromList(List<num> list) =>
+      _I16(ensureNative(list));
+  static Int16List createInt16List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _I16_2(buffer, byteOffset);
+    return _I16_3(buffer, byteOffset, length);
+  }
+
+  static Int32List createInt32List(int length) => _I32(length);
+  static Int32List createInt32List_fromList(List<num> list) =>
+      _I32(ensureNative(list));
+  static Int32List createInt32List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _I32_2(buffer, byteOffset);
+    return _I32_3(buffer, byteOffset, length);
+  }
+
+  static Uint8List createUint8List(int length) => _U8(length);
+  static Uint8List createUint8List_fromList(List<num> list) =>
+      _U8(ensureNative(list));
+  static Uint8List createUint8List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U8_2(buffer, byteOffset);
+    return _U8_3(buffer, byteOffset, length);
+  }
+
+  static Uint16List createUint16List(int length) => _U16(length);
+  static Uint16List createUint16List_fromList(List<num> list) =>
+      _U16(ensureNative(list));
+  static Uint16List createUint16List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U16_2(buffer, byteOffset);
+    return _U16_3(buffer, byteOffset, length);
+  }
+
+  static Uint32List createUint32List(int length) => _U32(length);
+  static Uint32List createUint32List_fromList(List<num> list) =>
+      _U32(ensureNative(list));
+  static Uint32List createUint32List_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U32_2(buffer, byteOffset);
+    return _U32_3(buffer, byteOffset, length);
+  }
+
+  static Uint8ClampedList createUint8ClampedList(int length) => _U8C(length);
+  static Uint8ClampedList createUint8ClampedList_fromList(List<num> list) =>
+      _U8C(ensureNative(list));
+  static Uint8ClampedList createUint8ClampedList_fromBuffer(ByteBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U8C_2(buffer, byteOffset);
+    return _U8C_3(buffer, byteOffset, length);
+  }
+
+  static ByteData _B8(arg) =>
+      JS('ByteData', 'new DataView(new ArrayBuffer(#))', arg);
+  static Float32List _F32(arg) => JS('Float32List', 'new Float32Array(#)', arg);
+  static Float64List _F64(arg) => JS('Float64List', 'new Float64Array(#)', arg);
+  static Int8List _I8(arg) => JS('Int8List', 'new Int8Array(#)', arg);
+  static Int16List _I16(arg) => JS('Int16List', 'new Int16Array(#)', arg);
+  static Int32List _I32(arg) => JS('Int32List', 'new Int32Array(#)', arg);
+  static Uint8List _U8(arg) => JS('Uint8List', 'new Uint8Array(#)', arg);
+  static Uint16List _U16(arg) => JS('Uint16List', 'new Uint16Array(#)', arg);
+  static Uint32List _U32(arg) => JS('Uint32List', 'new Uint32Array(#)', arg);
+  static Uint8ClampedList _U8C(arg) =>
+      JS('Uint8ClampedList', 'new Uint8ClampedArray(#)', arg);
+
+  static ByteData _B8_2(arg1, arg2) =>
+      JS('ByteData', 'new DataView(#, #)', arg1, arg2);
+  static Float32List _F32_2(arg1, arg2) =>
+      JS('Float32List', 'new Float32Array(#, #)', arg1, arg2);
+  static Float64List _F64_2(arg1, arg2) =>
+      JS('Float64List', 'new Float64Array(#, #)', arg1, arg2);
+  static Int8List _I8_2(arg1, arg2) =>
+      JS('Int8List', 'new Int8Array(#, #)', arg1, arg2);
+  static Int16List _I16_2(arg1, arg2) =>
+      JS('Int16List', 'new Int16Array(#, #)', arg1, arg2);
+  static Int32List _I32_2(arg1, arg2) =>
+      JS('Int32List', 'new Int32Array(#, #)', arg1, arg2);
+  static Uint8List _U8_2(arg1, arg2) =>
+      JS('Uint8List', 'new Uint8Array(#, #)', arg1, arg2);
+  static Uint16List _U16_2(arg1, arg2) =>
+      JS('Uint16List', 'new Uint16Array(#, #)', arg1, arg2);
+  static Uint32List _U32_2(arg1, arg2) =>
+      JS('Uint32List', 'new Uint32Array(#, #)', arg1, arg2);
+  static Uint8ClampedList _U8C_2(arg1, arg2) =>
+      JS('Uint8ClampedList', 'new Uint8ClampedArray(#, #)', arg1, arg2);
+
+  static ByteData _B8_3(arg1, arg2, arg3) =>
+      JS('ByteData', 'new DataView(#, #, #)', arg1, arg2, arg3);
+  static Float32List _F32_3(arg1, arg2, arg3) =>
+      JS('Float32List', 'new Float32Array(#, #, #)', arg1, arg2, arg3);
+  static Float64List _F64_3(arg1, arg2, arg3) =>
+      JS('Float64List', 'new Float64Array(#, #, #)', arg1, arg2, arg3);
+  static Int8List _I8_3(arg1, arg2, arg3) =>
+      JS('Int8List', 'new Int8Array(#, #, #)', arg1, arg2, arg3);
+  static Int16List _I16_3(arg1, arg2, arg3) =>
+      JS('Int16List', 'new Int16Array(#, #, #)', arg1, arg2, arg3);
+  static Int32List _I32_3(arg1, arg2, arg3) =>
+      JS('Int32List', 'new Int32Array(#, #, #)', arg1, arg2, arg3);
+  static Uint8List _U8_3(arg1, arg2, arg3) =>
+      JS('Uint8List', 'new Uint8Array(#, #, #)', arg1, arg2, arg3);
+  static Uint16List _U16_3(arg1, arg2, arg3) =>
+      JS('Uint16List', 'new Uint16Array(#, #, #)', arg1, arg2, arg3);
+  static Uint32List _U32_3(arg1, arg2, arg3) =>
+      JS('Uint32List', 'new Uint32Array(#, #, #)', arg1, arg2, arg3);
+  static Uint8ClampedList _U8C_3(arg1, arg2, arg3) => JS(
+      'Uint8ClampedList', 'new Uint8ClampedArray(#, #, #)', arg1, arg2, arg3);
+
+  // Ensures that [list] is a JavaScript Array or a typed array.  If necessary,
+  // copies the list.
+  static ensureNative(List list) => list; // TODO: make sure.
+}
diff --git a/tools/dom/nnbd_src/dart2js_WrappedEvent.dart b/tools/dom/nnbd_src/dart2js_WrappedEvent.dart
new file mode 100644
index 0000000..089b223
--- /dev/null
+++ b/tools/dom/nnbd_src/dart2js_WrappedEvent.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.html;
+
+/**
+ * Helper class to implement custom events which wrap DOM events.
+ */
+class _WrappedEvent implements Event {
+  final Event wrapped;
+
+  /** The CSS selector involved with event delegation. */
+  String _selector;
+
+  _WrappedEvent(this.wrapped);
+
+  bool get bubbles => wrapped.bubbles;
+
+  bool get cancelable => wrapped.cancelable;
+
+  bool get composed => wrapped.composed;
+
+  EventTarget get currentTarget => wrapped.currentTarget;
+
+  bool get defaultPrevented => wrapped.defaultPrevented;
+
+  int get eventPhase => wrapped.eventPhase;
+
+  bool get isTrusted => wrapped.isTrusted;
+
+  EventTarget get target => wrapped.target;
+
+  double get timeStamp => wrapped.timeStamp;
+
+  String get type => wrapped.type;
+
+  void _initEvent(String type, [bool? bubbles, bool? cancelable]) {
+    throw new UnsupportedError('Cannot initialize this Event.');
+  }
+
+  void preventDefault() {
+    wrapped.preventDefault();
+  }
+
+  void stopImmediatePropagation() {
+    wrapped.stopImmediatePropagation();
+  }
+
+  void stopPropagation() {
+    wrapped.stopPropagation();
+  }
+
+  List<EventTarget> composedPath() => wrapped.composedPath();
+
+  /**
+   * A pointer to the element whose CSS selector matched within which an event
+   * was fired. If this Event was not associated with any Event delegation,
+   * accessing this value will throw an [UnsupportedError].
+   */
+  Element get matchingTarget {
+    if (_selector == null) {
+      throw new UnsupportedError('Cannot call matchingTarget if this Event did'
+          ' not arise as a result of event delegation.');
+    }
+    Element currentTarget = this.currentTarget;
+    Element target = this.target;
+    var matchedTarget;
+    do {
+      if (target.matches(_selector)) return target;
+      target = target.parent;
+    } while (target != null && target != currentTarget.parent);
+    throw new StateError('No selector matched for populating matchedTarget.');
+  }
+
+  /**
+   * This event's path, taking into account shadow DOM.
+   *
+   * ## Other resources
+   *
+   * * [Shadow DOM extensions to
+   *   Event](http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-event)
+   *   from W3C.
+   */
+  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
+  List<Node> get path => wrapped.path;
+
+  dynamic get _get_currentTarget => wrapped._get_currentTarget;
+
+  dynamic get _get_target => wrapped._get_target;
+}
diff --git a/tools/dom/nnbd_src/native_DOMImplementation.dart b/tools/dom/nnbd_src/native_DOMImplementation.dart
new file mode 100644
index 0000000..6f197d0
--- /dev/null
+++ b/tools/dom/nnbd_src/native_DOMImplementation.dart
@@ -0,0 +1,1399 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of html;
+
+class _Property {
+  _Property(this.name)
+      : _hasValue = false,
+        writable = false,
+        isMethod = false,
+        isOwn = true,
+        wasThrown = false;
+
+  bool get hasValue => _hasValue;
+  get value => _value;
+  set value(v) {
+    _value = v;
+    _hasValue = true;
+  }
+
+  final String name;
+  Function setter;
+  Function getter;
+  var _value;
+  bool _hasValue;
+  bool writable;
+  bool isMethod;
+  bool isOwn;
+  bool wasThrown;
+}
+
+/**
+ * Manager for navigating between libraries from the devtools console.
+ */
+class _LibraryManager {
+  /**
+   * Current active library
+   */
+  static var _currentLibrary;
+  static var _validCache = false;
+
+  static List<Uri> _libraryUris;
+
+  // List of all maps to check to determine if there is an exact match.
+  static Map<String, List<Uri>> _fastPaths;
+
+  static void _addFastPath(String key, Uri uri) {
+    _fastPaths.putIfAbsent(key, () => <Uri>[]).add(uri);
+  }
+
+  static cache() {
+    if (_validCache) return;
+    _validCache = true;
+    _libraryUris = <Uri>[];
+    _fastPaths = new Map<String, List<Uri>>();
+    var system = currentMirrorSystem();
+    system.libraries.forEach((uri, library) {
+      _libraryUris.add(uri);
+      _addFastPath(uri.toString(), uri);
+      _addFastPath(MirrorSystem.getName(library.simpleName), uri);
+    });
+  }
+
+  static String get currentLibrary {
+    if (_currentLibrary == null) {
+      _currentLibrary =
+          currentMirrorSystem().isolate.rootLibrary.uri.toString();
+    }
+    return _currentLibrary;
+  }
+
+  /**
+   * Find libraries matching a given name.
+   *
+   * Uses heuristics to only return a single match when the user intent is
+   * generally unambiguous.
+   */
+  static List<Uri> findMatches(String name) {
+    cache();
+    var nameAsFile = name.endsWith('.dart') ? name : '${name}.dart';
+    // Perfect match first.
+    var fastPatchMatches = _fastPaths[name];
+    if (fastPatchMatches != null) {
+      return fastPatchMatches.toList();
+    }
+
+    // Exact match for file path.
+    var matches = new LinkedHashSet<Uri>();
+    for (var uri in _libraryUris) {
+      if (uri.path == name || uri.path == nameAsFile) matches.add(uri);
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Exact match for file name.
+    if (name != nameAsFile) {
+      for (var uri in _libraryUris) {
+        if (uri.pathSegments.isNotEmpty &&
+            (uri.pathSegments.last == nameAsFile)) {
+          matches.add(uri);
+        }
+      }
+      if (matches.isNotEmpty) return matches.toList();
+    }
+
+    for (var uri in _libraryUris) {
+      if (uri.pathSegments.isNotEmpty && (uri.pathSegments.last == name)) {
+        matches.add(uri);
+      }
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on path.
+    for (var uri in _libraryUris) {
+      if (uri.path.contains(name)) {
+        matches.add(uri);
+      }
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on entire uri.
+    for (var uri in _libraryUris) {
+      if (uri.toString().contains(name)) {
+        matches.add(uri);
+      }
+    }
+
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on entire uri ignoring case.
+    name = name.toLowerCase();
+    for (var uri in _libraryUris) {
+      if (uri.toString().toLowerCase().contains(name)) {
+        matches.add(uri);
+      }
+    }
+    return matches.toList();
+  }
+
+  static setLibrary([String name]) {
+    // Bust cache in case library list has changed. Ideally we would listen for
+    // when libraries are loaded and invalidate based on that.
+    _validCache = false;
+    cache();
+    if (name == null) {
+      window.console
+        ..group("Current library: $_currentLibrary")
+        ..groupCollapsed("All libraries:");
+      _listLibraries();
+      window.console..groupEnd()..groupEnd();
+      return;
+    }
+    var matches = findMatches(name);
+    if (matches.length != 1) {
+      if (matches.length > 1) {
+        window.console.warn("Ambiguous library name: $name");
+      }
+      showMatches(name, matches);
+      return;
+    }
+    _currentLibrary = matches.first.toString();
+    window.console.log("Set library to $_currentLibrary");
+  }
+
+  static getLibrary() {
+    return currentLibrary;
+  }
+
+  static List<Uri> _sortUris(Iterable<Uri> uris) {
+    return (uris.toList())
+      ..sort((Uri a, Uri b) {
+        if (a.scheme != b.scheme) {
+          if (a.scheme == 'dart') return -1;
+          if (b.scheme == 'dart') return 1;
+          return a.scheme.compareTo(b.scheme);
+        }
+        return a.toString().compareTo(b.toString());
+      });
+  }
+
+  static void listLibraries() {
+    _validCache = false;
+    cache();
+    _listLibraries();
+  }
+
+  static void _listLibraries() {
+    window.console.log(_sortUris(_libraryUris).join("\n"));
+  }
+
+  // Workaround to allow calling console.log with an arbitrary number of
+  // arguments.
+  static void _log(List<String> args) {
+    js.JsNative.callMethod(window.console, 'log', args);
+  }
+
+  static showMatches(String key, Iterable<Uri> uris) {
+    var boldPairs = [];
+    var sb = new StringBuffer();
+    if (uris.isEmpty) {
+      window.console.group("All libraries:");
+      _listLibraries();
+      window.console
+        ..groupEnd()
+        ..error("No library names or URIs match '$key'");
+      return;
+    }
+    sb.write("${uris.length} matches\n");
+    var lowerCaseKey = key.toLowerCase();
+    for (var uri in uris) {
+      var txt = uri.toString();
+      int index = txt.toLowerCase().indexOf(lowerCaseKey);
+      if (index != -1) {
+        // %c enables styling console log messages with css
+        // specified at the end of the console.
+        sb..write(txt.substring(0, index))..write('%c');
+        var matchEnd = index + key.length;
+        sb
+          ..write(txt.substring(index, matchEnd))
+          ..write('%c')
+          ..write(txt.substring(matchEnd))
+          ..write('\n');
+        boldPairs..add('font-weight: bold')..add('font-weight: normal');
+      }
+    }
+    _log([sb.toString()]..addAll(boldPairs));
+  }
+}
+
+class _ConsoleVariables {
+  Map<String, Object> _data = new Map<String, Object>();
+
+  /**
+   * Forward member accesses to the backing JavaScript object.
+   */
+  noSuchMethod(Invocation invocation) {
+    String member = MirrorSystem.getName(invocation.memberName);
+    if (invocation.isGetter) {
+      return _data[member];
+    } else if (invocation.isSetter) {
+      assert(member.endsWith('='));
+      member = member.substring(0, member.length - 1);
+      _data[member] = invocation.positionalArguments[0];
+    } else {
+      return Function.apply(_data[member], invocation.positionalArguments,
+          invocation.namedArguments);
+    }
+  }
+
+  void clear() => _data.clear();
+
+  /**
+   * List all variables currently defined.
+   */
+  List variables() => _data.keys.toList();
+
+  void setVariable(String name, value) {
+    _data[name] = value;
+  }
+}
+
+/**
+ * Base class for invocation trampolines used to closurize methods, getters
+ * and setters.
+ */
+abstract class _Trampoline implements Function {
+  final ObjectMirror _receiver;
+  final MethodMirror _methodMirror;
+  final Symbol _selector;
+
+  _Trampoline(this._receiver, this._methodMirror, this._selector);
+}
+
+class _MethodTrampoline extends _Trampoline {
+  _MethodTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
+
+  noSuchMethod(Invocation msg) {
+    if (msg.memberName != #call) return super.noSuchMethod(msg);
+    return _receiver
+        .invoke(_selector, msg.positionalArguments, msg.namedArguments)
+        .reflectee;
+  }
+}
+
+/**
+ * Invocation trampoline class used to closurize getters.
+ */
+class _GetterTrampoline extends _Trampoline {
+  _GetterTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
+
+  call() => _receiver.getField(_selector).reflectee;
+}
+
+/**
+ * Invocation trampoline class used to closurize setters.
+ */
+class _SetterTrampoline extends _Trampoline {
+  _SetterTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
+
+  call(value) {
+    _receiver.setField(_selector, value);
+  }
+}
+
+class _Utils {
+  static double dateTimeToDouble(DateTime dateTime) =>
+      dateTime.millisecondsSinceEpoch.toDouble();
+  static DateTime doubleToDateTime(double dateTime) {
+    try {
+      return new DateTime.fromMillisecondsSinceEpoch(dateTime.toInt());
+    } catch (_) {
+      // TODO(antonnm): treat exceptions properly in bindings and
+      // find out how to treat NaNs.
+      return null;
+    }
+  }
+
+  static List convertToList(List list) {
+    // FIXME: [possible optimization]: do not copy the array if Dart_IsArray is fine w/ it.
+    final length = list.length;
+    List result = new List(length);
+    result.setRange(0, length, list);
+    return result;
+  }
+
+  static List convertMapToList(Map map) {
+    List result = [];
+    map.forEach((k, v) => result.addAll([k, v]));
+    return result;
+  }
+
+  static int convertCanvasElementGetContextMap(Map map) {
+    int result = 0;
+    if (map['alpha'] == true) result |= 0x01;
+    if (map['depth'] == true) result |= 0x02;
+    if (map['stencil'] == true) result |= 0x4;
+    if (map['antialias'] == true) result |= 0x08;
+    if (map['premultipliedAlpha'] == true) result |= 0x10;
+    if (map['preserveDrawingBuffer'] == true) result |= 0x20;
+
+    return result;
+  }
+
+  static void populateMap(Map result, List list) {
+    for (int i = 0; i < list.length; i += 2) {
+      result[list[i]] = list[i + 1];
+    }
+  }
+
+  static bool isMap(obj) => obj is Map;
+
+  static List toListIfIterable(obj) => obj is Iterable ? obj.toList() : null;
+
+  static Map createMap() => {};
+
+  static parseJson(String jsonSource) =>
+      const JsonDecoder().convert(jsonSource);
+
+  static String getLibraryUrl() => _LibraryManager.currentLibrary;
+
+  static makeUnimplementedError(String fileName, int lineNo) {
+    return new UnsupportedError('[info: $fileName:$lineNo]');
+  }
+
+  static bool isTypeSubclassOf(Type type, Type other) {
+    if (type == other) {
+      return true;
+    }
+    var superclass = reflectClass(type).superclass;
+    if (superclass != null) {
+      return isTypeSubclassOf(superclass.reflectedType, other);
+    }
+    return false;
+  }
+
+  static Element getAndValidateNativeType(Type type, String tagName) {
+    var element = new Element.tag(tagName);
+    if (!isTypeSubclassOf(type, element.runtimeType)) {
+      return null;
+    }
+    return element;
+  }
+
+  static forwardingPrint(String message) =>
+      _blink.Blink_Utils.forwardingPrint(message);
+  static void spawnDomHelper(Function f, int replyTo) =>
+      _blink.Blink_Utils.spawnDomHelper(f, replyTo);
+
+  // TODO(vsm): Make this API compatible with spawnUri.  It should also
+  // return a Future<Isolate>.
+  // TODO(jacobr): IS THIS RIGHT? I worry we have broken conversion from Promise to Future.
+  static spawnDomUri(String uri) => _blink.Blink_Utils.spawnDomUri(uri);
+
+  // The following methods were added for debugger integration to make working
+  // with the Dart C mirrors API simpler.
+  // TODO(jacobr): consider moving them to a separate library.
+  // If Dart supported dynamic code injection, we would only inject this code
+  // when the debugger is invoked.
+
+  /**
+   * Strips the private secret prefix from member names of the form
+   * someName@hash.
+   */
+  static String stripMemberName(String name) {
+    int endIndex = name.indexOf('@');
+    return endIndex > 0 ? name.substring(0, endIndex) : name;
+  }
+
+  /**
+   * Takes a list containing variable names and corresponding values and
+   * returns a map from normalized names to values. Variable names are assumed
+   * to have list offsets 2*n values at offset 2*n+1. This method is required
+   * because Dart_GetLocalVariables returns a list instead of an object that
+   * can be queried to lookup names and values.
+   */
+  static Map<String, dynamic> createLocalVariablesMap(List localVariables) {
+    var map = {};
+    for (int i = 0; i < localVariables.length; i += 2) {
+      map[stripMemberName(localVariables[i])] = localVariables[i + 1];
+    }
+    return map;
+  }
+
+  static _ConsoleVariables _consoleTempVariables = new _ConsoleVariables();
+
+  /**
+   * Takes an [expression] and a list of [local] variable and returns an
+   * expression for a closure with a body matching the original expression
+   * where locals are passed in as arguments. Returns a list containing the
+   * String expression for the closure and the list of arguments that should
+   * be passed to it. The expression should then be evaluated using
+   * Dart_EvaluateExpr which will generate a closure that should be invoked
+   * with the list of arguments passed to this method.
+   *
+   * For example:
+   * <code>
+   * _consoleTempVariables = {'a' : someValue, 'b': someOtherValue}
+   * wrapExpressionAsClosure("foo + bar + a", ["bar", 40, "foo", 2], true)
+   * </code>
+   * will return:
+   * <code>
+   * ["""(final $consoleVariables, final bar, final foo, final a, final b) =>
+   * (foo + bar + a
+   * )""",
+   * [_consoleTempVariables, 40, 2, someValue, someOtherValue]]
+   * </code>
+   */
+  static List wrapExpressionAsClosure(
+      String expression, List locals, bool includeCommandLineAPI) {
+    var args = {};
+    var sb = new StringBuffer("(");
+    addArg(arg, value) {
+      arg = stripMemberName(arg);
+      if (args.containsKey(arg)) return;
+      // We ignore arguments with the name 'this' rather than throwing an
+      // exception because Dart_GetLocalVariables includes 'this' and it
+      // is more convenient to filter it out here than from C++ code.
+      // 'this' needs to be handled by calling Dart_EvaluateExpr with
+      // 'this' as the target rather than by passing it as an argument.
+      if (arg == 'this') return;
+      // Avoid being broken by bogus ':async_op' local passed in when within
+      // an async method.
+      if (arg.startsWith(':')) return;
+      if (args.isNotEmpty) {
+        sb.write(", ");
+      }
+      sb.write("final $arg");
+      args[arg] = value;
+    }
+
+    if (includeCommandLineAPI) {
+      addArg("\$consoleVariables", _consoleTempVariables);
+
+      // FIXME: use a real Dart tokenizer. The following regular expressions
+      // only allow setting variables at the immediate start of the expression
+      // to limit the number of edge cases we have to handle.
+
+      // Match expressions that start with "var x"
+      final _VARIABLE_DECLARATION = new RegExp("^(\\s*)var\\s+(\\w+)");
+      // Match expressions that start with "someExistingConsoleVar ="
+      final _SET_VARIABLE = new RegExp("^(\\s*)(\\w+)(\\s*=)");
+      // Match trailing semicolons.
+      final _ENDING_SEMICOLONS = new RegExp("(;\\s*)*\$");
+      expression = expression.replaceAllMapped(_VARIABLE_DECLARATION, (match) {
+        var variableName = match[2];
+        // Set the console variable if it isn't already set.
+        if (!_consoleTempVariables._data.containsKey(variableName)) {
+          _consoleTempVariables._data[variableName] = null;
+        }
+        return "${match[1]}\$consoleVariables.${variableName}";
+      });
+
+      expression = expression.replaceAllMapped(_SET_VARIABLE, (match) {
+        var variableName = match[2];
+        // Only rewrite if the name matches an existing console variable.
+        if (_consoleTempVariables._data.containsKey(variableName)) {
+          return "${match[1]}\$consoleVariables.${variableName}${match[3]}";
+        } else {
+          return match[0];
+        }
+      });
+
+      // We only allow dart expressions not Dart statements. Silently remove
+      // trailing semicolons the user might have added by accident to reduce the
+      // number of spurious compile errors.
+      expression = expression.replaceFirst(_ENDING_SEMICOLONS, "");
+    }
+
+    if (locals != null) {
+      for (int i = 0; i < locals.length; i += 2) {
+        addArg(locals[i], locals[i + 1]);
+      }
+    }
+    // Inject all the already defined console variables.
+    _consoleTempVariables._data.forEach(addArg);
+
+    // TODO(jacobr): remove the parentheses around the expression once
+    // dartbug.com/13723 is fixed. Currently we wrap expression in parentheses
+    // to ensure only valid Dart expressions are allowed. Otherwise the DartVM
+    // quietly ignores trailing Dart statements resulting in user confusion
+    // when part of an invalid expression they entered is ignored.
+    sb..write(') => (\n$expression\n)');
+    return [sb.toString(), args.values.toList(growable: false)];
+  }
+
+  static String _getShortSymbolName(
+      Symbol symbol, DeclarationMirror declaration) {
+    var name = MirrorSystem.getName(symbol);
+    if (declaration is MethodMirror) {
+      if (declaration.isSetter && name[name.length - 1] == "=") {
+        return name.substring(0, name.length - 1);
+      }
+      if (declaration.isConstructor) {
+        return name.substring(name.indexOf('.') + 1);
+      }
+    }
+    return name;
+  }
+
+  /**
+   * Handle special console commands such as $lib and $libs that should not be
+   * evaluated as Dart expressions and instead should be interpreted directly.
+   * Commands supported:
+   * library <-- shows the current library and lists all libraries.
+   * library "library_uri" <-- select a specific library
+   * library "library_uri_fragment"
+   */
+  static bool maybeHandleSpecialConsoleCommand(String expression) {
+    expression = expression.trim();
+    var setLibraryCommand = r'library ';
+    if (expression == r'library') {
+      _LibraryManager.setLibrary();
+      return true;
+    }
+    if (expression.startsWith(setLibraryCommand)) {
+      expression = expression.substring(setLibraryCommand.length);
+      if (expression.length >= 2) {
+        String start = expression[0];
+        String end = expression[expression.length - 1];
+        // TODO(jacobr): maybe we should require quotes.
+        if ((start == "'" && end == "'") || (start == '"' && end == '"')) {
+          expression = expression.substring(1, expression.length - 1);
+        }
+      }
+
+      _LibraryManager.setLibrary(expression);
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * Returns a list of completions to use if the receiver is o.
+   */
+  static List<String> getCompletions(o) {
+    MirrorSystem system = currentMirrorSystem();
+    var completions = new Set<String>();
+    addAll(Map<Symbol, dynamic> map, bool isStatic) {
+      map.forEach((symbol, mirror) {
+        if (mirror.isStatic == isStatic && !mirror.isPrivate) {
+          var name = MirrorSystem.getName(symbol);
+          if (mirror is MethodMirror && mirror.isSetter)
+            name = name.substring(0, name.length - 1);
+          completions.add(name);
+        }
+      });
+    }
+
+    addForClass(ClassMirror mirror, bool isStatic) {
+      if (mirror == null) return;
+      addAll(mirror.declarations, isStatic);
+      if (mirror.superclass != null) addForClass(mirror.superclass, isStatic);
+      for (var interface in mirror.superinterfaces) {
+        addForClass(interface, isStatic);
+      }
+    }
+
+    if (o is Type) {
+      addForClass(reflectClass(o), true);
+    } else {
+      addForClass(reflect(o).type, false);
+    }
+    return completions.toList(growable: false);
+  }
+
+  /**
+   * Adds all candidate String completions from [declarations] to [output]
+   * filtering based on [staticContext] and [includePrivate].
+   */
+  static void _getCompletionsHelper(ClassMirror classMirror, bool staticContext,
+      LibraryMirror libraryMirror, Set<String> output) {
+    bool includePrivate = libraryMirror == classMirror.owner;
+    classMirror.declarations.forEach((symbol, declaration) {
+      if (!includePrivate && declaration.isPrivate) return;
+      if (declaration is VariableMirror) {
+        if (staticContext != declaration.isStatic) return;
+      } else if (declaration is MethodMirror) {
+        if (declaration.isOperator) return;
+        if (declaration.isConstructor) {
+          if (!staticContext) return;
+          var name = MirrorSystem.getName(declaration.constructorName);
+          if (name.isNotEmpty) output.add(name);
+          return;
+        }
+        if (staticContext != declaration.isStatic) return;
+      } else if (declaration is TypeMirror) {
+        return;
+      }
+      output.add(_getShortSymbolName(symbol, declaration));
+    });
+
+    if (!staticContext) {
+      for (var interface in classMirror.superinterfaces) {
+        _getCompletionsHelper(interface, staticContext, libraryMirror, output);
+      }
+      if (classMirror.superclass != null) {
+        _getCompletionsHelper(
+            classMirror.superclass, staticContext, libraryMirror, output);
+      }
+    }
+  }
+
+  static void _getLibraryCompletionsHelper(
+      LibraryMirror library, bool includePrivate, Set<String> output) {
+    library.declarations.forEach((symbol, declaration) {
+      if (!includePrivate && declaration.isPrivate) return;
+      output.add(_getShortSymbolName(symbol, declaration));
+    });
+  }
+
+  static LibraryMirror getLibraryMirror(String url) =>
+      currentMirrorSystem().libraries[Uri.parse(url)];
+
+  /**
+   * Get code completions for [o] only showing privates from [libraryUrl].
+   */
+  static List<String> getObjectCompletions(o, String libraryUrl) {
+    var classMirror;
+    bool staticContext;
+    if (o is Type) {
+      classMirror = reflectClass(o);
+      staticContext = true;
+    } else {
+      classMirror = reflect(o).type;
+      staticContext = false;
+    }
+    var names = new Set<String>();
+    getClassCompletions(classMirror, names, staticContext, libraryUrl);
+    return names.toList()..sort();
+  }
+
+  static void getClassCompletions(ClassMirror classMirror, Set<String> names,
+      bool staticContext, String libraryUrl) {
+    LibraryMirror libraryMirror = getLibraryMirror(libraryUrl);
+    _getCompletionsHelper(classMirror, staticContext, libraryMirror, names);
+  }
+
+  static List<String> getLibraryCompletions(String url) {
+    var names = new Set<String>();
+    _getLibraryCompletionsHelper(getLibraryMirror(url), true, names);
+    return names.toList();
+  }
+
+  /**
+   * Get valid code completions from within a library and all libraries
+   * imported by that library.
+   */
+  static List<String> getLibraryCompletionsIncludingImports(String url) {
+    var names = new Set<String>();
+    var libraryMirror = getLibraryMirror(url);
+    _getLibraryCompletionsHelper(libraryMirror, true, names);
+    for (var dependency in libraryMirror.libraryDependencies) {
+      if (dependency.isImport) {
+        if (dependency.prefix == null) {
+          _getLibraryCompletionsHelper(dependency.targetLibrary, false, names);
+        } else {
+          names.add(MirrorSystem.getName(dependency.prefix));
+        }
+      }
+    }
+    return names.toList();
+  }
+
+  static final SIDE_EFFECT_FREE_LIBRARIES = new Set<String>()
+    ..add('dart:html')
+    ..add('dart:indexed_db')
+    ..add('dart:svg')
+    ..add('dart:typed_data')
+    ..add('dart:web_audio')
+    ..add('dart:web_gl')
+    ..add('dart:web_sql');
+
+  static LibraryMirror _getLibrary(MethodMirror methodMirror) {
+    var owner = methodMirror.owner;
+    if (owner is ClassMirror) {
+      return owner;
+    } else if (owner is LibraryMirror) {
+      return owner;
+    }
+    return null;
+  }
+
+  /**
+   * For parity with the JavaScript debugger, we treat some getters as if
+   * they are fields so that users can see their values immediately.
+   * This matches JavaScript's behavior for getters on DOM objects.
+   * In the future we should consider adding an annotation to tag getters
+   * in user libraries as side effect free.
+   */
+  static bool _isSideEffectFreeGetter(
+      MethodMirror methodMirror, LibraryMirror libraryMirror) {
+    // This matches JavaScript behavior. We should consider displaying
+    // getters for all dart platform libraries rather than just the DOM
+    // libraries.
+    return libraryMirror.uri.scheme == 'dart' &&
+        SIDE_EFFECT_FREE_LIBRARIES.contains(libraryMirror.uri.toString());
+  }
+
+  /**
+   * Whether we should treat a property as a field for the purposes of the
+   * debugger.
+   */
+  static bool treatPropertyAsField(
+      MethodMirror methodMirror, LibraryMirror libraryMirror) {
+    return (methodMirror.isGetter || methodMirror.isSetter) &&
+        (methodMirror.isSynthetic ||
+            _isSideEffectFreeGetter(methodMirror, libraryMirror));
+  }
+
+  // TODO(jacobr): generate more concise function descriptions instead of
+  // dumping the entire function source.
+  static String describeFunction(function) {
+    if (function is _Trampoline) return function._methodMirror.source;
+    try {
+      var mirror = reflect(function);
+      return mirror.function.source;
+    } catch (e) {
+      return function.toString();
+    }
+  }
+
+  static List getInvocationTrampolineDetails(_Trampoline method) {
+    var loc = method._methodMirror.location;
+    return [
+      loc.line,
+      loc.column,
+      loc.sourceUri.toString(),
+      MirrorSystem.getName(method._selector)
+    ];
+  }
+
+  static List getLibraryProperties(
+      String libraryUrl, bool ownProperties, bool accessorPropertiesOnly) {
+    var properties = new Map<String, _Property>();
+    var libraryMirror = getLibraryMirror(libraryUrl);
+    _addInstanceMirrors(
+        libraryMirror,
+        libraryMirror,
+        libraryMirror.declarations,
+        ownProperties,
+        accessorPropertiesOnly,
+        false,
+        false,
+        properties);
+    if (!accessorPropertiesOnly) {
+      // We need to add class properties for all classes in the library.
+      libraryMirror.declarations.forEach((symbol, declarationMirror) {
+        if (declarationMirror is ClassMirror) {
+          var name = MirrorSystem.getName(symbol);
+          if (declarationMirror.hasReflectedType &&
+              !properties.containsKey(name)) {
+            properties[name] = new _Property(name)
+              ..value = declarationMirror.reflectedType;
+          }
+        }
+      });
+    }
+    return packageProperties(properties);
+  }
+
+  static List getObjectProperties(
+      o, bool ownProperties, bool accessorPropertiesOnly) {
+    var properties = new Map<String, _Property>();
+    var names = new Set<String>();
+    var objectMirror = reflect(o);
+    var classMirror = objectMirror.type;
+    _addInstanceMirrors(
+        objectMirror,
+        classMirror.owner,
+        classMirror.instanceMembers,
+        ownProperties,
+        accessorPropertiesOnly,
+        false,
+        true,
+        properties);
+    return packageProperties(properties);
+  }
+
+  static List getObjectClassProperties(
+      o, bool ownProperties, bool accessorPropertiesOnly) {
+    var properties = new Map<String, _Property>();
+    var objectMirror = reflect(o);
+    var classMirror = objectMirror.type;
+    _addInstanceMirrors(
+        objectMirror,
+        classMirror.owner,
+        classMirror.instanceMembers,
+        ownProperties,
+        accessorPropertiesOnly,
+        true,
+        false,
+        properties);
+    _addStatics(classMirror, properties, accessorPropertiesOnly);
+    return packageProperties(properties);
+  }
+
+  static List getClassProperties(
+      Type t, bool ownProperties, bool accessorPropertiesOnly) {
+    var properties = new Map<String, _Property>();
+    var classMirror = reflectClass(t);
+    _addStatics(classMirror, properties, accessorPropertiesOnly);
+    return packageProperties(properties);
+  }
+
+  static void _addStatics(ClassMirror classMirror,
+      Map<String, _Property> properties, bool accessorPropertiesOnly) {
+    var libraryMirror = classMirror.owner;
+    classMirror.declarations.forEach((symbol, declaration) {
+      var name = _getShortSymbolName(symbol, declaration);
+      if (name.isEmpty) return;
+      if (declaration is VariableMirror) {
+        if (accessorPropertiesOnly) return;
+        if (!declaration.isStatic) return;
+        properties.putIfAbsent(name, () => new _Property(name))
+          ..value = classMirror.getField(symbol).reflectee
+          ..writable = !declaration.isFinal && !declaration.isConst;
+      } else if (declaration is MethodMirror) {
+        MethodMirror methodMirror = declaration;
+        // FIXMEDART: should we display constructors?
+        if (methodMirror.isConstructor) return;
+        if (!methodMirror.isStatic) return;
+        if (accessorPropertiesOnly) {
+          if (methodMirror.isRegularMethod ||
+              treatPropertyAsField(methodMirror, libraryMirror)) {
+            return;
+          }
+        } else if (!methodMirror.isRegularMethod &&
+            !treatPropertyAsField(methodMirror, libraryMirror)) {
+          return;
+        }
+        var property = properties.putIfAbsent(name, () => new _Property(name));
+        _fillMethodMirrorProperty(libraryMirror, classMirror, methodMirror,
+            symbol, accessorPropertiesOnly, property);
+      }
+    });
+  }
+
+  static void _fillMethodMirrorProperty(
+      LibraryMirror libraryMirror,
+      methodOwner,
+      MethodMirror methodMirror,
+      Symbol symbol,
+      bool accessorPropertiesOnly,
+      _Property property) {
+    if (methodMirror.isRegularMethod) {
+      property
+        ..value = new _MethodTrampoline(methodOwner, methodMirror, symbol)
+        ..isMethod = true;
+    } else if (methodMirror.isGetter) {
+      if (treatPropertyAsField(methodMirror, libraryMirror)) {
+        try {
+          property.value = methodOwner.getField(symbol).reflectee;
+        } catch (e) {
+          property
+            ..wasThrown = true
+            ..value = e;
+        }
+      } else if (accessorPropertiesOnly) {
+        property.getter =
+            new _GetterTrampoline(methodOwner, methodMirror, symbol);
+      }
+    } else if (methodMirror.isSetter) {
+      if (accessorPropertiesOnly &&
+          !treatPropertyAsField(methodMirror, libraryMirror)) {
+        property.setter = new _SetterTrampoline(methodOwner, methodMirror,
+            MirrorSystem.getSymbol(property.name, libraryMirror));
+      }
+      property.writable = true;
+    }
+  }
+
+  /**
+   * Helper method that handles collecting up properties from classes
+   * or libraries using the filters [ownProperties], [accessorPropertiesOnly],
+   * [hideFields], and [hideMethods] to determine which properties are
+   * collected. [accessorPropertiesOnly] specifies whether all properties
+   * should be returned or just accessors. [hideFields] specifies whether
+   * fields should be hidden. hideMethods specifies whether methods should be
+   * shown or hidden. [ownProperties] is not currently used but is part of the
+   * Blink devtools API for enumerating properties.
+   */
+  static void _addInstanceMirrors(
+      ObjectMirror objectMirror,
+      LibraryMirror libraryMirror,
+      Map<Symbol, Mirror> declarations,
+      bool ownProperties,
+      bool accessorPropertiesOnly,
+      bool hideFields,
+      bool hideMethods,
+      Map<String, _Property> properties) {
+    declarations.forEach((symbol, declaration) {
+      if (declaration is TypedefMirror || declaration is ClassMirror) return;
+      var name = _getShortSymbolName(symbol, declaration);
+      if (name.isEmpty) return;
+      bool isField = declaration is VariableMirror ||
+          (declaration is MethodMirror &&
+              treatPropertyAsField(declaration, libraryMirror));
+      if ((isField && hideFields) || (hideMethods && !isField)) return;
+      if (accessorPropertiesOnly) {
+        if (declaration is VariableMirror ||
+            declaration.isRegularMethod ||
+            isField) {
+          return;
+        }
+      } else if (declaration is MethodMirror &&
+          (declaration.isGetter || declaration.isSetter) &&
+          !treatPropertyAsField(declaration, libraryMirror)) {
+        return;
+      }
+      var property = properties.putIfAbsent(name, () => new _Property(name));
+      if (declaration is VariableMirror) {
+        property
+          ..value = objectMirror.getField(symbol).reflectee
+          ..writable = !declaration.isFinal && !declaration.isConst;
+        return;
+      }
+      _fillMethodMirrorProperty(libraryMirror, objectMirror, declaration,
+          symbol, accessorPropertiesOnly, property);
+    });
+  }
+
+  /**
+   * Flatten down the properties data structure into a List that is easy to
+   * access from native code.
+   */
+  static List packageProperties(Map<String, _Property> properties) {
+    var ret = [];
+    for (var property in properties.values) {
+      ret.addAll([
+        property.name,
+        property.setter,
+        property.getter,
+        property.value,
+        property.hasValue,
+        property.writable,
+        property.isMethod,
+        property.isOwn,
+        property.wasThrown
+      ]);
+    }
+    return ret;
+  }
+
+  /**
+   * Get a property, returning null if the property does not exist.
+   * For private property names, we attempt to resolve the property in the
+   * context of each library that the property name could be associated with.
+   */
+  static getObjectPropertySafe(o, String propertyName) {
+    var objectMirror = reflect(o);
+    var classMirror = objectMirror.type;
+    if (propertyName.startsWith("_")) {
+      var attemptedLibraries = new Set<LibraryMirror>();
+      while (classMirror != null) {
+        LibraryMirror library = classMirror.owner;
+        if (!attemptedLibraries.contains(library)) {
+          try {
+            return objectMirror
+                .getField(MirrorSystem.getSymbol(propertyName, library))
+                .reflectee;
+          } catch (e) {}
+          attemptedLibraries.add(library);
+        }
+        classMirror = classMirror.superclass;
+      }
+      return null;
+    }
+    try {
+      return objectMirror
+          .getField(MirrorSystem.getSymbol(propertyName))
+          .reflectee;
+    } catch (e) {
+      return null;
+    }
+  }
+
+  /**
+   * Helper to wrap the inspect method on InjectedScriptHost to provide the
+   * inspect method required for the
+   */
+  static List consoleApi(host) {
+    return [
+      "inspect",
+      (o) {
+        js.JsNative.callMethod(host, "_inspect", [o]);
+        return o;
+      },
+      "dir",
+      window.console.dir,
+      "dirxml",
+      window.console.dirxml
+      // FIXME: add copy method.
+    ];
+  }
+
+  static List getMapKeyList(Map map) => map.keys.toList();
+
+  static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError;
+
+  static void register(
+      Document document, String tag, Type type, String extendsTagName) {
+    var nativeClass = _validateCustomType(type);
+
+    if (extendsTagName == null) {
+      if (nativeClass.reflectedType != HtmlElement) {
+        throw new UnsupportedError('Class must provide extendsTag if base '
+            'native class is not HTMLElement');
+      }
+    }
+
+    _register(document, tag, type, extendsTagName);
+  }
+
+  static void _register(Document document, String tag, Type customType,
+          String extendsTagName) =>
+      _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
+
+  static Element createElement(Document document, String tagName) =>
+      _blink.Blink_Utils.createElement(document, tagName);
+}
+
+class _DOMWindowCrossFrame extends DartHtmlDomObject implements WindowBase {
+  _DOMWindowCrossFrame.internal();
+
+  static _createSafe(win) {
+    if (identical(win, window)) {
+      // The current Window object is the only window object that should not
+      // use _DOMWindowCrossFrame.
+      return window;
+    }
+    return win is _DOMWindowCrossFrame
+        ? win
+        : _blink.Blink_Utils.setInstanceInterceptor(win, _DOMWindowCrossFrame);
+  }
+
+  // Fields.
+  HistoryBase get history {
+    var history = _blink.BlinkWindow.instance.history_Getter_(this);
+    return history is _HistoryCrossFrame
+        ? history
+        : _blink.Blink_Utils.setInstanceInterceptor(
+            history, _HistoryCrossFrame);
+  }
+
+  LocationBase get location {
+    var location = _blink.BlinkWindow.instance.location_Getter_(this);
+    return location is _LocationCrossFrame
+        ? location
+        : _blink.Blink_Utils.setInstanceInterceptor(
+            location, _LocationCrossFrame);
+  }
+
+  bool get closed => _blink.BlinkWindow.instance.closed_Getter_(this);
+  WindowBase get opener => _convertNativeToDart_Window(
+      _blink.BlinkWindow.instance.opener_Getter_(this));
+  WindowBase get parent => _convertNativeToDart_Window(
+      _blink.BlinkWindow.instance.parent_Getter_(this));
+  WindowBase get top => _convertNativeToDart_Window(
+      _blink.BlinkWindow.instance.top_Getter_(this));
+
+  // Methods.
+  void close() => _blink.BlinkWindow.instance.close_Callback_0_(this);
+  void postMessage(Object message, String targetOrigin,
+          [List<MessagePort> transfer]) =>
+      _blink.BlinkWindow.instance.postMessage_Callback_3_(
+          this,
+          convertDartToNative_SerializedScriptValue(message),
+          targetOrigin,
+          transfer);
+
+  // Implementation support.
+  String get typeName => "Window";
+
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  Events get on => throw new UnsupportedError(
+      'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void _addEventListener(
+          [String type, EventListener listener, bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void addEventListener(String type, EventListener listener,
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  bool dispatchEvent(Event event) => throw new UnsupportedError(
+      'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void _removeEventListener(
+          [String type, EventListener listener, bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+  // TODO(efortuna): Remove this method. dartbug.com/16814
+  void removeEventListener(String type, EventListener listener,
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
+}
+
+class _HistoryCrossFrame extends DartHtmlDomObject implements HistoryBase {
+  _HistoryCrossFrame.internal();
+
+  // Methods.
+  void back() => _blink.BlinkHistory.instance.back_Callback_0_(this);
+  void forward() => _blink.BlinkHistory.instance.forward_Callback_0_(this);
+  void go([int delta]) {
+    if (delta != null) {
+      _blink.BlinkHistory.instance.go_Callback_1_(this, delta);
+      return;
+    }
+    _blink.BlinkHistory.instance.go_Callback_0_(this);
+    return;
+  }
+
+  // Implementation support.
+  String get typeName => "History";
+}
+
+class _LocationCrossFrame extends DartHtmlDomObject implements LocationBase {
+  _LocationCrossFrame.internal();
+
+  // Fields.
+  set href(String value) =>
+      _blink.BlinkLocation.instance.href_Setter_(this, value);
+
+  // Implementation support.
+  String get typeName => "Location";
+}
+
+// TODO(vsm): Remove DOM isolate code once we have Dartium isolates
+// as workers.  This is only used to support
+// printing and timers in background isolates. As workers they should
+// be able to just do those things natively.
+
+_makeSendPortFuture(spawnRequest) {
+  final completer = new Completer<SendPort>.sync();
+  final port = new ReceivePort();
+  port.listen((result) {
+    completer.complete(result);
+    port.close();
+  });
+  // TODO: SendPort.hashCode is ugly way to access port id.
+  spawnRequest(port.sendPort.hashCode);
+  return completer.future;
+}
+
+Future<SendPort> _spawnDomHelper(Function f) => _makeSendPortFuture((portId) {
+      _Utils.spawnDomHelper(f, portId);
+    });
+
+final Future<SendPort> __HELPER_ISOLATE_PORT =
+    _spawnDomHelper(_helperIsolateMain);
+
+// Tricky part.
+// Once __HELPER_ISOLATE_PORT gets resolved, it will still delay in .then
+// and to delay Timer.run is used. However, Timer.run will try to register
+// another Timer and here we got stuck: event cannot be posted as then
+// callback is not executed because it's delayed with timer.
+// Therefore once future is resolved, it's unsafe to call .then on it
+// in Timer code.
+SendPort __SEND_PORT;
+
+_sendToHelperIsolate(msg, SendPort replyTo) {
+  if (__SEND_PORT != null) {
+    __SEND_PORT.send([msg, replyTo]);
+  } else {
+    __HELPER_ISOLATE_PORT.then((port) {
+      __SEND_PORT = port;
+      __SEND_PORT.send([msg, replyTo]);
+    });
+  }
+}
+
+final _TIMER_REGISTRY = new Map<SendPort, Timer>();
+
+const _NEW_TIMER = 'NEW_TIMER';
+const _CANCEL_TIMER = 'CANCEL_TIMER';
+const _TIMER_PING = 'TIMER_PING';
+const _PRINT = 'PRINT';
+
+_helperIsolateMain(originalSendPort) {
+  var port = new ReceivePort();
+  originalSendPort.send(port.sendPort);
+  port.listen((args) {
+    var msg = args.first;
+    var replyTo = args.last;
+    final cmd = msg[0];
+    if (cmd == _NEW_TIMER) {
+      final duration = new Duration(milliseconds: msg[1]);
+      bool periodic = msg[2];
+      ping() {
+        replyTo.send(_TIMER_PING);
+      }
+
+      ;
+      _TIMER_REGISTRY[replyTo] = periodic
+          ? new Timer.periodic(duration, (_) {
+              ping();
+            })
+          : new Timer(duration, ping);
+    } else if (cmd == _CANCEL_TIMER) {
+      _TIMER_REGISTRY.remove(replyTo).cancel();
+    } else if (cmd == _PRINT) {
+      final message = msg[1];
+      // TODO(antonm): we need somehow identify those isolates.
+      print('[From isolate] $message');
+    }
+  });
+}
+
+final _printClosure = (s) => window.console.log(s);
+final _pureIsolatePrintClosure = (s) {
+  _sendToHelperIsolate([_PRINT, s], null);
+};
+
+final _forwardingPrintClosure = _Utils.forwardingPrint;
+
+final _uriBaseClosure = () => Uri.parse(window.location.href);
+
+final _pureIsolateUriBaseClosure = () {
+  throw new UnimplementedError("Uri.base on a background isolate "
+      "is not supported in the browser");
+};
+
+class _Timer implements Timer {
+  static const int _STATE_TIMEOUT = 0;
+  static const int _STATE_INTERVAL = 1;
+  int _state;
+
+  _Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
+    if (repeating) {
+      _state = (window._setInterval(() {
+                callback(this);
+              }, milliSeconds) <<
+              1) |
+          _STATE_INTERVAL;
+    } else {
+      _state = (window._setTimeout(() {
+                _state = null;
+                callback(this);
+              }, milliSeconds) <<
+              1) |
+          _STATE_TIMEOUT;
+    }
+  }
+
+  void cancel() {
+    if (_state == null) return;
+    int id = _state >> 1;
+    if ((_state & 1) == _STATE_TIMEOUT) {
+      window._clearTimeout(id);
+    } else {
+      window._clearInterval(id);
+    }
+    _state = null;
+  }
+
+  bool get isActive => _state != null;
+}
+
+get _timerFactoryClosure =>
+    (int milliSeconds, void callback(Timer timer), bool repeating) {
+      return new _Timer(milliSeconds, callback, repeating);
+    };
+
+class _PureIsolateTimer implements Timer {
+  bool _isActive = true;
+  final ReceivePort _port = new ReceivePort();
+  SendPort _sendPort; // Effectively final.
+
+  //  static SendPort _SEND_PORT;
+
+  _PureIsolateTimer(int milliSeconds, callback, repeating) {
+    _sendPort = _port.sendPort;
+    _port.listen((msg) {
+      assert(msg == _TIMER_PING);
+      _isActive = repeating;
+      callback(this);
+      if (!repeating) _cancel();
+    });
+
+    _send([_NEW_TIMER, milliSeconds, repeating]);
+  }
+
+  void cancel() {
+    _cancel();
+    _send([_CANCEL_TIMER]);
+  }
+
+  void _cancel() {
+    _isActive = false;
+    _port.close();
+  }
+
+  _send(msg) {
+    _sendToHelperIsolate(msg, _sendPort);
+  }
+
+  bool get isActive => _isActive;
+}
+
+get _pureIsolateTimerFactoryClosure =>
+    ((int milliSeconds, void callback(Timer time), bool repeating) =>
+        new _PureIsolateTimer(milliSeconds, callback, repeating));
+
+class _ScheduleImmediateHelper {
+  MutationObserver _observer;
+  final DivElement _div = new DivElement();
+  Function _callback;
+
+  _ScheduleImmediateHelper() {
+    // Run in the root-zone as the DOM callback would otherwise execute in the
+    // current zone.
+    Zone.root.run(() {
+      // Mutation events get fired as soon as the current event stack is unwound
+      // so we just make a dummy event and listen for that.
+      _observer = new MutationObserver(_handleMutation);
+      _observer.observe(_div, attributes: true);
+    });
+  }
+
+  void _schedule(callback) {
+    if (_callback != null) {
+      throw new StateError(
+          'Only one immediate callback can be scheduled at once');
+    }
+    _callback = callback;
+    // Toggle it to trigger the mutation event.
+    _div.hidden = !_div.hidden;
+  }
+
+  _handleMutation(List<MutationRecord> mutations, MutationObserver observer) {
+    var tmp = _callback;
+    _callback = null;
+    tmp();
+  }
+}
+
+final _ScheduleImmediateHelper _scheduleImmediateHelper =
+    new _ScheduleImmediateHelper();
+
+get _scheduleImmediateClosure => (void callback()) {
+      _scheduleImmediateHelper._schedule(callback);
+    };
+
+get _pureIsolateScheduleImmediateClosure => ((void callback()) =>
+    throw new UnimplementedError("scheduleMicrotask in background isolates "
+        "are not supported in the browser"));
+
+// Class for unsupported native browser 'DOM' objects.
+class _UnsupportedBrowserObject extends DartHtmlDomObject {}
diff --git a/tools/dom/nnbd_src/shared_SVGFactoryProviders.dart b/tools/dom/nnbd_src/shared_SVGFactoryProviders.dart
new file mode 100644
index 0000000..a4aab93
--- /dev/null
+++ b/tools/dom/nnbd_src/shared_SVGFactoryProviders.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.svg;
+
+class _SvgElementFactoryProvider {
+  static SvgElement createSvgElement_tag(String tag) {
+    final Element temp =
+        document.createElementNS("http://www.w3.org/2000/svg", tag);
+    return temp;
+  }
+}
diff --git a/tools/dom/nnbd_src/shared_html.dart b/tools/dom/nnbd_src/shared_html.dart
new file mode 100644
index 0000000..f2aa8a9
--- /dev/null
+++ b/tools/dom/nnbd_src/shared_html.dart
@@ -0,0 +1,66 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+void Function(T) _wrapZone<T>(void Function(T) callback) {
+  // For performance reasons avoid wrapping if we are in the root zone.
+  if (Zone.current == Zone.root) return callback;
+  if (callback == null) return null;
+  return Zone.current.bindUnaryCallbackGuarded(callback);
+}
+
+void Function(T1, T2) _wrapBinaryZone<T1, T2>(void Function(T1, T2) callback) {
+  // For performance reasons avoid wrapping if we are in the root zone.
+  if (Zone.current == Zone.root) return callback;
+  if (callback == null) return null;
+  return Zone.current.bindBinaryCallbackGuarded(callback);
+}
+
+/**
+ * Finds the first descendant element of this document that matches the
+ * specified group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelector]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var element1 = document.querySelector('.className');
+ *     var element2 = document.querySelector('#id');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+Element querySelector(String selectors) => document.querySelector(selectors);
+
+/**
+ * Finds all descendant elements of this document that match the specified
+ * group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelectorAll]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var items = document.querySelectorAll('.itemClassName');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+ElementList<T> querySelectorAll<T extends Element>(String selectors) =>
+    document.querySelectorAll(selectors);
+
+/// A utility for changing the Dart wrapper type for elements.
+abstract class ElementUpgrader {
+  /// Upgrade the specified element to be of the Dart type this was created for.
+  ///
+  /// After upgrading the element passed in is invalid and the returned value
+  /// should be used instead.
+  Element upgrade(Element element);
+}
diff --git a/tools/dom/scripts/css_code_generator.py b/tools/dom/scripts/css_code_generator.py
index 4bf4870..19676e6 100644
--- a/tools/dom/scripts/css_code_generator.py
+++ b/tools/dom/scripts/css_code_generator.py
@@ -157,7 +157,7 @@
   }
 
   String _browserPropertyName(String propertyName) {
-    String name = _readCache(propertyName);
+    String$NULLABLE name = _readCache(propertyName);
     if (name is String) return name;
     name = _supportedBrowserPropertyName(propertyName);
     _writeCache(propertyName, name);
@@ -177,7 +177,7 @@
   }
 
   static final _propertyCache = JS('', '{}');
-  static String _readCache(String key) =>
+  static String$NULLABLE _readCache(String key) =>
     JS('String|Null', '#[#]', _propertyCache, key);
   static void _writeCache(String key, String value) {
     JS('void', '#[#] = #', _propertyCache, key, value);
@@ -192,7 +192,8 @@
         replacedMs);
   }
 
-  void _setPropertyHelper(String propertyName, String value, [String priority]) {
+  void _setPropertyHelper(String propertyName, String$NULLABLE value,
+                          [String$NULLABLE priority]) {
     if (value == null) value = '';
     if (priority == null) priority = '';
     JS('void', '#.setProperty(#, #, #)', this, propertyName, value, priority);
@@ -214,7 +215,7 @@
   String get %s => this._%s;
 
   /** Sets the value of "%s" */
-  set %s(String value) {
+  set %s(String$NULLABLE value) {
     _%s = value == null ? '' : value;
   }
   @Returns('String')
@@ -247,7 +248,7 @@
 """)
 
     class_file.write("""
-  void _setAll(String propertyName, String value) {
+  void _setAll(String propertyName, String$NULLABLE value) {
     value = value == null ? '' : value;
     for (Element element in _elementIterable) {
       JS('void', '#.style[#] = #', element, propertyName, value);
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index b255a8e..7227f3f 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -73,13 +73,14 @@
 class GeneratorOptions(object):
 
     def __init__(self, templates, database, type_registry, renamer, metadata,
-                 dart_js_interop):
+                 dart_js_interop, nnbd):
         self.templates = templates
         self.database = database
         self.type_registry = type_registry
         self.renamer = renamer
         self.metadata = metadata
         self.dart_js_interop = dart_js_interop
+        self.nnbd = nnbd
 
 
 def LoadDatabase(database_dir, use_database_cache):
@@ -95,14 +96,18 @@
                          dart2js_output_dir,
                          update_dom_metadata=False,
                          logging_level=logging.WARNING,
-                         dart_js_interop=False):
+                         dart_js_interop=False,
+                         nnbd=False):
     print '\n ----- Accessing DOM using %s -----\n' % (
         'dart:js' if dart_js_interop else 'C++')
 
     start_time = time.time()
 
     current_dir = os.path.dirname(__file__)
-    auxiliary_dir = os.path.join(current_dir, '..', 'src')
+    if nnbd:
+        auxiliary_dir = os.path.join(current_dir, '..', 'nnbd_src')
+    else:
+        auxiliary_dir = os.path.join(current_dir, '..', 'src')
     template_dir = os.path.join(current_dir, '..', 'templates')
 
     _logger.setLevel(logging_level)
@@ -137,7 +142,7 @@
                      backend_factory, dart_js_interop):
         options = GeneratorOptions(template_loader, webkit_database,
                                    type_registry, renamer, metadata,
-                                   dart_js_interop)
+                                   dart_js_interop, nnbd)
         dart_library_emitter = DartLibraryEmitter(emitters, dart_output_dir,
                                                   dart_libraries)
         event_generator = HtmlEventGenerator(webkit_database, renamer, metadata,
@@ -165,7 +170,7 @@
         })
         backend_options = GeneratorOptions(template_loader, webkit_database,
                                            type_registry, renamer, metadata,
-                                           dart_js_interop)
+                                           dart_js_interop, nnbd)
         backend_factory = lambda interface:\
             Dart2JSBackend(interface, backend_options, logging_level)
 
@@ -173,6 +178,9 @@
         dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader,
                                        'dart2js', dart2js_output_dir,
                                        dart_js_interop)
+        for file in generator._auxiliary_files.values():
+            if file.endswith('darttemplate'):
+                dart_libraries._libraries['html'].AddFile(file)
 
         print '\nGenerating dart2js:\n'
         start_time = time.time()
@@ -259,6 +267,12 @@
         default=None,
         help='Directory to put the generated files')
     parser.add_option(
+        '--nnbd',
+        dest='nnbd',
+        action='store_true',
+        default=False,
+        help='Generate code with non-nullability annotations')
+    parser.add_option(
         '--use-database-cache',
         dest='use_database_cache',
         action='store_true',
@@ -333,26 +347,20 @@
 
     GenerateFromDatabase(database, dart2js_output_dir,
                          options.update_dom_metadata, logging_level,
-                         options.dart_js_interop)
+                         options.dart_js_interop, options.nnbd)
 
     file_generation_start_time = time.time()
 
     if 'htmldart2js' in systems:
         _logger.info('Generating dart2js single files.')
+        sdk_dir = 'sdk_nnbd' if options.nnbd else 'sdk'
 
         for library_name in HTML_LIBRARY_NAMES:
             source = os.path.join(dart2js_output_dir,
                                   '%s_dart2js.dart' % library_name)
             GenerateSingleFile(
-                source,
-                os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js'))
-            # TODO(Issue 38701): We won't need two copies once the NNBD SDK is
-            # unforked.
-            GenerateSingleFile(
-                source,
-                os.path.join('..', '..', '..', 'sdk_nnbd', 'lib', library_name, 'dart2js'),
-                None,
-                '// @dart = 2.5')
+                source, os.path.join('..', '..', '..', sdk_dir, 'lib',
+                                     library_name, 'dart2js'))
 
     print '\nGenerating single file %s seconds' % round(
         time.time() - file_generation_start_time, 2)
diff --git a/tools/dom/scripts/emitter.py b/tools/dom/scripts/emitter.py
index d6d1734..7d45fbe 100755
--- a/tools/dom/scripts/emitter.py
+++ b/tools/dom/scripts/emitter.py
@@ -48,6 +48,12 @@
     named hole in the template.  The holes are filled by emitting to the
     corresponding emitter.
 
+    Subtemplates can be created by using $#NAME(...), where text can be placed
+    inside of the parentheses and will conditionally expand depdending on if
+    NAME is set to True or False. The text inside the parentheses may use
+    further $#NAME and $NAME substitutions, but is not permitted to create
+    holes.
+
     Emit returns either a single Emitter if the template contains one hole or a
     tuple of emitters for several holes, in the order that the holes occur in
     the template.
@@ -60,7 +66,6 @@
     def _Emit(self, template_source, parameters):
         """Implementation of Emit, with map in place of named parameters."""
         template = self._ParseTemplate(template_source)
-
         parameter_bindings = self._bindings.Extend(parameters)
 
         hole_names = template._holes
@@ -76,7 +81,7 @@
         else:
             full_bindings = parameter_bindings
 
-        self._ApplyTemplate(template, full_bindings)
+        self._ApplyTemplate(template, full_bindings, self._items)
 
         # Return None, a singleton or tuple of the hole names.
         if not hole_names:
@@ -96,10 +101,29 @@
             elif isinstance(item, Emitter.DeferredLookup):
                 value = item._environment.Lookup(item._lookup._name,
                                                  item._lookup._value_if_missing)
-                _FlattenTo(value, output)
+                if item._lookup._subtemplate:
+                    _FlattenSubtemplate(item, value, output)
+                else:
+                    _FlattenTo(value, output)
             else:
                 output.append(str(item))
 
+        def _FlattenSubtemplate(item, value, output):
+            """Handles subtemplates created by $#NAME(...)"""
+            if value is True:
+                # Expand items in subtemplate
+                _FlattenTo(item._lookup._subitems, output)
+            elif value is not False:
+                if value != item._lookup._value_if_missing:
+                    raise RuntimeError(
+                        'Value for NAME in $#NAME(...) syntax must be a boolean'
+                    )
+                # Expand it into the string literal composed of $#NAME(,
+                # the values inside the parentheses, and ).
+                _FlattenTo(value, output)
+                _FlattenTo(item._lookup._subitems, output)
+                _FlattenTo(')', output)
+
         output = []
         _FlattenTo(self._items, output)
         return output
@@ -111,7 +135,7 @@
             raise RuntimeError('Cannot have holes in Emitter.Bind')
         bindings = self._bindings.Extend(parameters)
         value = Emitter(bindings)
-        value._ApplyTemplate(template, bindings)
+        value._ApplyTemplate(template, bindings, self._items)
         self._bindings = self._bindings.Extend({var: value._items})
         return value
 
@@ -150,6 +174,35 @@
                 items.append(item)
                 holes.append(name)
                 continue
+            name = match.group(7)                    # $#NAME(...)
+            if name:
+                # Since it's possible for this to nest, find the matching right
+                # paren for this left paren.
+                paren_count = 1
+                curr_pos = pos
+                while curr_pos < len(source):
+                    if source[curr_pos] == ')':
+                        paren_count -= 1
+                        if paren_count == 0:
+                            break
+                    elif source[curr_pos] == '(':
+                        # Account for nested parentheses
+                        paren_count += 1
+                    curr_pos += 1
+                if curr_pos == len(source):
+                    # No matching right paren, so not a lookup. Ignore and
+                    # continue.
+                    items.append(term)
+                    continue
+                matched_template = self._ParseTemplate(source[pos:curr_pos])
+                if len(matched_template._holes) > 0:
+                    raise RuntimeError(
+                        '$#NAME syntax cannot contains holes in its arguments')
+                item = Emitter.Lookup(name, term, term, matched_template)
+                items.append(item)
+                # Continue after the right paren
+                pos = curr_pos + 1
+                continue
             raise RuntimeError('Unexpected group')
 
         if len(holes) != len(set(holes)):
@@ -157,10 +210,11 @@
         return Emitter.Template(items, holes)
 
     _SUBST_RE = re.compile(
-        #  $FOO    $(FOO)      $!FOO    $(!FOO)      $?FOO     $(?FOO)
-        r'\$(\w+)|\$\((\w+)\)|\$!(\w+)|\$\(!(\w+)\)|\$\?(\w+)|\$\(\?(\w+)\)')
+        #  $FOO    $(FOO)      $!FOO    $(!FOO)      $?FOO     $(?FOO)       $#FOO(
+        r'\$(\w+)|\$\((\w+)\)|\$!(\w+)|\$\(!(\w+)\)|\$\?(\w+)|\$\(\?(\w+)\)|\$#(\w+)\('
+    )
 
-    def _ApplyTemplate(self, template, bindings):
+    def _ApplyTemplate(self, template, bindings, items_list):
         """Emits the items from the parsed template."""
         result = []
         for item in template._items:
@@ -171,19 +225,26 @@
                 # Bind lookup to the current environment (bindings)
                 # TODO(sra): More space efficient to do direct lookup.
                 result.append(Emitter.DeferredLookup(item, bindings))
+                # If the item has a subtemplate, apply the subtemplate and save
+                # the result in the item's subitems
+                if item._subtemplate:
+                    self._ApplyTemplate(item._subtemplate, bindings,
+                                        item._subitems)
             else:
                 raise RuntimeError('Unexpected template element')
         # Collected fragments are in a sublist, so self._items contains one element
         # (sublist) per template application.
-        self._items.append(result)
+        items_list.append(result)
 
     class Lookup(object):
         """An element of a parsed template."""
 
-        def __init__(self, name, original, default):
+        def __init__(self, name, original, default, subtemplate=None):
             self._name = name
             self._original = original
             self._value_if_missing = default
+            self._subtemplate = subtemplate
+            self._subitems = []
 
     class DeferredLookup(object):
         """A lookup operation that is deferred until final string generation."""
diff --git a/tools/dom/scripts/emitter_test.py b/tools/dom/scripts/emitter_test.py
index db0e219..f1d168e 100755
--- a/tools/dom/scripts/emitter_test.py
+++ b/tools/dom/scripts/emitter_test.py
@@ -88,6 +88,50 @@
         b.EmitRaw('$D$C')
         self.check(e, '[$A12$C$D][21$B$D$C]12$E  $A$B$C$D')
 
+    def testNestedTemplates(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A(-)-', A=True)
+        self.check(e, '---')
+
+    def testNestedTemplates2(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A( $#B(-$C-) )-', A=True, B=True, C='1')
+        self.check(e, '- -1- -')
+
+    def testNestedTemplatesWithFalse(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A( $B )-', A=False, B='1')
+        self.check(e, '--')
+
+    def testNestedTemplatesWithFalse2(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A( $#B(-$C-) )-', A=False, B=True, C='1')
+        self.check(e, '--')
+
+    def testNestedTemplatesWithFalse3(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A( $#B(-$C-) )-', A=True, B=False, C='1')
+        self.check(e, '-  -')
+
+    def testNestedTemplateMissingBindings(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A(-$#B(-$C-)-)-', C='1')
+        self.check(e, '-$#A(-$#B(-1-)-)-')
+
+    def testNestedTemplateWithNoRightParen(self):
+        e = emitter.Emitter()
+        e.Emit('-$#A(-$B-', A=True, B='1')
+        self.check(e, '-$#A(-1-')
+
+    def testNestedTemplateWithWrongBinding(self):
+        try:
+            e = emitter.Emitter()
+            e.Emit('$#A(-)', A='Invalid')
+            e.Fragments()
+        except RuntimeError, ex:
+            return
+        raise AssertionError('Expected error')
+
     def testFormat(self):
         self.assertEquals(emitter.Format('$A$B', A=1, B=2), '12')
 
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index 65e9e75..a24a711 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -13,6 +13,13 @@
 from htmlrenamer import custom_html_constructors, html_interface_renames, \
     typed_array_renames
 
+# TODO(srujzs): Pass options flag through to emitter functions.
+class GlobalOptionsHack(object):
+    nnbd = False
+
+global_options_hack = GlobalOptionsHack()
+
+
 _pure_interfaces = monitored.Set('generator._pure_interfaces', [
     'AbstractWorker',
     'CanvasPath',
@@ -404,17 +411,27 @@
     is_optional: Parameter optionality.
   """
 
-    def __init__(self, name, type_id, is_optional):
+    def __init__(self, name, type_id, is_optional, is_nullable, default_value,
+                 default_value_is_null):
         self.name = name
         self.type_id = type_id
         self.is_optional = is_optional
+        self.is_nullable = is_nullable
+        self.default_value = default_value
+        self.default_value_is_null = default_value_is_null
 
     def Copy(self):
-        return ParamInfo(self.name, self.type_id, self.is_optional)
+        return ParamInfo(self.name, self.type_id, self.is_optional,
+                         self.is_nullable, self.default_value,
+                         self.default_value_is_null)
 
     def __repr__(self):
-        content = 'name = %s, type_id = %s, is_optional = %s' % (
-            self.name, self.type_id, self.is_optional)
+        content = ('name = %s, type_id = %s, is_optional = %s, '
+                   'is_nullable = %s, default_value = %s, '
+                   'default_value_is_null %s') % (
+                        self.name, self.type_id, self.is_optional,
+                        self.is_nullable, self.default_value,
+                        self.default_value_is_null)
         return '<ParamInfo(%s)>' % content
 
 
@@ -467,21 +484,40 @@
     def OverloadedType(args):
         type_ids = sorted(set(arg.type.id for arg in args))
         if len(set(DartType(arg.type.id) for arg in args)) == 1:
-            return type_ids[0]
+            nullable = False
+            for arg in args:
+                nullable = nullable or getattr(arg.type, 'nullable', False)
+            return (type_ids[0], nullable)
         else:
-            return None
+            return (None, False)
+
+    # Given a list of overloaded default values, choose a suitable one.
+    def OverloadedDefault(args):
+        defaults = sorted(set(arg.default_value for arg in args))
+        if len(set(DartType(arg.type.id) for arg in args)) == 1:
+            null_default = False
+            for arg in args:
+                null_default = null_default or arg.default_value_is_null
+            return (defaults[0], null_default)
+        else:
+            return (None, False)
 
     result = []
 
     is_optional = False
+    # Process overloaded arguments across a set of overloaded operations.
+    # Each tuple in args corresponds to overloaded arguments with the same name.
     for arg_tuple in map(lambda *x: x, *args):
         is_optional = is_optional or any(
             arg is None or IsOptional(arg) for arg in arg_tuple)
 
         filtered = filter(None, arg_tuple)
-        type_id = OverloadedType(filtered)
+        (type_id, is_nullable) = OverloadedType(filtered)
         name = OverloadedName(filtered)
-        result.append(ParamInfo(name, type_id, is_optional))
+        default = OverloadedDefault(filtered)
+        result.append(
+            ParamInfo(name, type_id, is_optional, is_nullable, default[0],
+                      default[1]))
 
     return result
 
@@ -620,18 +656,19 @@
     return name
 
 
-def TypeOrNothing(dart_type, comment=None):
+def TypeOrNothing(dart_type, comment=None, nullable=False):
     """Returns string for declaring something with |dart_type| in a context
   where a type may be omitted.
   The string is empty or has a trailing space.
   """
+    nullability_operator = '?' if global_options_hack.nnbd and nullable else ''
     if dart_type == 'dynamic':
         if comment:
             return '/*%s*/ ' % comment  # Just a comment foo(/*T*/ x)
         else:
             return ''  # foo(x) looks nicer than foo(var|dynamic x)
     else:
-        return dart_type + ' '
+        return dart_type + nullability_operator + ' '
 
 
 def TypeOrVar(dart_type, comment=None):
@@ -692,7 +729,8 @@
             # Special handling for setlike IDL forEach operation.
             if dart_type is None and param.type_id.endswith('ForEachCallback'):
                 dart_type = param.type_id
-            return (TypeOrNothing(dart_type, param.type_id), param.name)
+            return (TypeOrNothing(dart_type, param.type_id, param.is_nullable or
+                                  param.is_optional), param.name)
 
         required = []
         optional = []
@@ -921,9 +959,12 @@
         # conversion function)
         # output_type is the type of the API output (and the result type of the
         # conversion function)
+        # nullsafe_output flags whether the output_type has been converted yet
+        # to a null-safe type i.e. <type>? if nullable and <type> if not
         self.function_name = name
         self.input_type = input_type
         self.output_type = output_type
+        self.nullsafe_output = False
 
 
 #  "TYPE DIRECTION INTERFACE.MEMBER" -> conversion
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 824ec92..1a5387d 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -114,6 +114,7 @@
         for id in sorted(operationsByName.keys()):
             operations = operationsByName[id]
             info = AnalyzeOperation(interface, operations)
+            info.nnbd = self._nnbd
             self.AddOperation(info, declare_only, dart_js_interop)
             if ('%s.%s' % (interface.id,
                            info.declared_name) in convert_to_future_members):
@@ -898,7 +899,8 @@
     def SecureOutputType(self,
                          type_name,
                          is_dart_type=False,
-                         can_narrow_type=False):
+                         can_narrow_type=False,
+                         nullable=False):
         """ Converts the type name to the secure type name for return types.
     Arguments:
       can_narrow_type - True if the output type can be narrowed further than
@@ -918,6 +920,8 @@
         assert (dart_name != 'HistoryBase' and dart_name != 'LocationBase')
         if dart_name == 'Window':
             return _secure_base_types[dart_name]
+        if self._nnbd and nullable:
+            dart_name = dart_name + '?'
         return dart_name
 
     def SecureBaseName(self, type_name):
@@ -1002,9 +1006,9 @@
                                 'Object'
                         ]:
                             param_type = 'dynamic'
-
             target_parameters.append(
-                '%s%s' % (TypeOrNothing(param_type), param_name))
+                '%s%s' % (TypeOrNothing(param_type, nullable=arg.type.nullable),
+                          param_name))
             calling_parameters.append(',%s ' % param_name)
 
         return target_parameters, converted_arguments, calling_parameters
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index ac34feb..600ac3a 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -183,8 +183,15 @@
         info.constructor_name = self.name
         info.js_name = None
         info.type_name = interface_name
-        info.param_infos = map(lambda tXn: ParamInfo(tXn[1], tXn[0], True),
-                               self.opt_params)
+        # optional parameters are always nullable
+        info.param_infos = map(
+            lambda tXn: ParamInfo(
+                name=tXn[1],
+                type_id=tXn[0],
+                is_optional=True,
+                is_nullable=True,
+                default_value=None,
+                default_value_is_null=False), self.opt_params)
         info.requires_named_arguments = True
         info.factory_parameters = ['"%s"' % self.tag]
         info.pure_dart_constructor = True
@@ -594,6 +601,10 @@
         self._template_loader = options.templates
         self._type_registry = options.type_registry
         self._options = options
+        # TODO(srujzs): This sets the nnbd option globally inside generator.py
+        # since there is no options object there.  This should should be cleaned
+        # up and passed as an option instead.
+        global_options_hack.nnbd = options.nnbd
         self._library_emitter = library_emitter
         self._event_generator = event_generator
         self._interface = interface
@@ -805,7 +816,9 @@
             DOMNAME=self._interface.doc_js_name,
             NATIVESPEC=native_spec,
             KEYTYPE=maplikeKeyType,
-            VALUETYPE=maplikeValueType)
+            VALUETYPE=maplikeValueType,
+            NULLABLE='?' if self._options.nnbd else '',
+            NULLSAFECAST=True if self._options.nnbd else False)
         stream_getter_signatures_emitter = None
         element_stream_getters_emitter = None
         if type(implementation_members_emitter) == tuple:
@@ -1154,6 +1167,7 @@
         self._type_registry = options.type_registry
         self._renamer = options.renamer
         self._metadata = options.metadata
+        self._nnbd = options.nnbd
         self._interface_type_info = self._type_registry.TypeInfo(
             self._interface.id)
         self._current_secondary_parent = None
@@ -1229,17 +1243,22 @@
             and not ',' in arguments \
             and not self._HasUnreliableFactoryConstructor():
             return emitter.Format(
-                "JS('returns:$INTERFACE_NAME;creates:$INTERFACE_NAME;new:true',"
+                "JS$CAST("
+                "'returns:$INTERFACE_NAME;creates:$INTERFACE_NAME;new:true',"
                 " '#.$METHOD(#)', $FACTORY, $ARGUMENTS)",
+                CAST='<' + self._interface_type_info.interface_name() +
+                '>' if self._nnbd else '',
                 INTERFACE_NAME=self._interface_type_info.interface_name(),
                 FACTORY=factory,
                 METHOD=method,
                 ARGUMENTS=arguments)
         return emitter.Format(
-            '$FACTORY.$METHOD($ARGUMENTS)',
+            '$FACTORY.$METHOD($ARGUMENTS)$CAST',
             FACTORY=factory,
             METHOD=method,
-            ARGUMENTS=arguments)
+            ARGUMENTS=arguments,
+            CAST=' as ' + self._interface_type_info.interface_name() \
+            if self._nnbd else '')
 
     def _HasUnreliableFactoryConstructor(self):
         return self._interface.doc_js_name in _js_unreliable_element_factories
@@ -1413,10 +1432,19 @@
             self._AddAttributeUsingProperties(attribute, html_name, read_only)
             return
 
-        output_type = self.SecureOutputType(attribute.type.id, False, read_only)
-        input_type = self._NarrowInputType(attribute.type.id)
-        metadata = self._Metadata(attribute.type.id, attribute.id, output_type)
         rename = self._RenamingAnnotation(attribute.id, html_name)
+        output_type = self.SecureOutputType(attribute.type.id,
+                                            is_dart_type=False,
+                                            can_narrow_type=read_only,
+                                            nullable=attribute.type.nullable)
+        metadata = self._Metadata(attribute.type.id, attribute.id, output_type)
+
+        if self._nnbd and not attribute.type.nullable:
+          self._AddAttributeUsingProperties(attribute, html_name, read_only,
+                                            rename, metadata)
+          return
+
+        input_type = self._NarrowInputType(attribute.type.id)
         static_attribute = 'static' if attribute.is_static else ''
         if not read_only:
             if attribute.type.id == 'Promise':
@@ -1467,18 +1495,26 @@
                 ) and html_name == 'length':
                     template = ('\n  $RENAME$(ANNOTATIONS)$TYPE get $NAME => ' +
                                 'JS("$TYPE", "#.$NAME", this);\n')
+                output_type_without_nullability = self.SecureOutputType(
+                    attribute.type.id,
+                    is_dart_type=False,
+                    can_narrow_type=read_only,
+                    nullable=False)
                 self._members_emitter.Emit(
                     template,
                     RENAME=rename,
                     ANNOTATIONS=metadata,
                     STATIC=static_attribute,
                     NAME=html_name,
-                    TYPE=input_type if output_type == 'double' else output_type)
+                    TYPE=input_type
+                    if output_type_without_nullability == 'double' else
+                    output_type)
 
-    def _AddAttributeUsingProperties(self, attribute, html_name, read_only):
-        self._AddRenamingGetter(attribute, html_name)
+    def _AddAttributeUsingProperties(self, attribute, html_name, read_only,
+                                     rename=None, metadata=None):
+        self._AddRenamingGetter(attribute, html_name, rename, metadata)
         if not read_only:
-            self._AddRenamingSetter(attribute, html_name)
+            self._AddRenamingSetter(attribute, html_name, rename, metadata)
 
     def _AddInterfaceAttribute(self, attribute, html_name, read_only):
         self._members_emitter.Emit(
@@ -1488,33 +1524,48 @@
             NAME=html_name,
             TYPE=self.SecureOutputType(attribute.type.id))
 
-    def _AddRenamingGetter(self, attr, html_name):
+    def _AddNullSafetyToConversion(self, attr, conversion):
+        if conversion.nullsafe_output == False:
+            # Convert output type to one that recognizes nullability
+            if (self._nnbd and attr.type.nullable):
+                conversion.output_type += '?'
+            conversion.nullsafe_output = True
 
+    def _AddRenamingGetter(self, attr, html_name, rename, metadata):
         conversion = self._OutputConversion(attr.type.id, attr.id)
         if conversion:
+            self._AddNullSafetyToConversion(attr, conversion)
             return self._AddConvertingGetter(attr, html_name, conversion)
         return_type = self.SecureOutputType(attr.type.id)
         native_type = self._NarrowToImplementationType(attr.type.id)
         self._members_emitter.Emit(
             # TODO(sra): Use metadata to provide native name.
+            '\n  $RENAME'
+            '\n  $METADATA'
             '\n  $TYPE get $HTML_NAME => JS("$NATIVE_TYPE", "#.$NAME", this);'
             '\n',
+            RENAME=rename if rename else '',
+            METADATA=metadata if metadata else '',
             HTML_NAME=html_name,
             NAME=attr.id,
             TYPE=return_type,
             NATIVE_TYPE=native_type)
 
-    def _AddRenamingSetter(self, attr, html_name):
-
+    def _AddRenamingSetter(self, attr, html_name, rename, metadata):
         conversion = self._InputConversion(attr.type.id, attr.id)
         if conversion:
+            self._AddNullSafetyToConversion(attr, conversion)
             return self._AddConvertingSetter(attr, html_name, conversion)
         self._members_emitter.Emit(
             # TODO(sra): Use metadata to provide native name.
+            '\n  $RENAME'
+            '\n  $METADATA'
             '\n  set $HTML_NAME($TYPE value) {'
             '\n    JS("void", "#.$NAME = #", this, value);'
             '\n  }'
             '\n',
+            RENAME=rename if rename else '',
+            METADATA=metadata if metadata else '',
             HTML_NAME=html_name,
             NAME=attr.id,
             TYPE=self._NarrowInputType(attr.type.id))
diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart
index 23fd771..83b8c07 100644
--- a/tools/dom/src/EventStreamProvider.dart
+++ b/tools/dom/src/EventStreamProvider.dart
@@ -265,7 +265,9 @@
     }
     // Remove current event listener.
     _unlisten();
-    _onData = _wrapZone<Event>(handleData);
+    _onData = handleData == null
+        ? null
+        : _wrapZone<Event>((e) => (handleData as dynamic)(e));
     _tryResume();
   }
 
diff --git a/tools/dom/templates/immutable_list_mixin.darttemplate b/tools/dom/templates/html/dart2js/immutable_list_mixin.darttemplate
similarity index 100%
rename from tools/dom/templates/immutable_list_mixin.darttemplate
rename to tools/dom/templates/html/dart2js/immutable_list_mixin.darttemplate
diff --git a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
index d98519b..70ac3c7 100644
--- a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
@@ -17,8 +17,9 @@
     }
   }
 
-  ScriptProcessorNode createScriptProcessor([int bufferSize,
-      int numberOfInputChannels, int numberOfOutputChannels]) {
+  ScriptProcessorNode createScriptProcessor([int$NULLABLE bufferSize,
+      int$NULLABLE numberOfInputChannels,
+      int$NULLABLE numberOfOutputChannels]) {
     var function = JS(
         '=Object',
         '#.createScriptProcessor || '
@@ -46,8 +47,8 @@
       DecodeErrorCallback errorCallback]) native;
 
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
-      [DecodeSuccessCallback successCallback,
-      DecodeErrorCallback errorCallback]) {
+      [DecodeSuccessCallback$NULLABLE successCallback,
+      DecodeErrorCallback$NULLABLE errorCallback]) {
     if (successCallback != null &&  errorCallback != null) {
       return _decodeAudioData(audioData, successCallback, errorCallback);
     }
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 574ef48..be015e6 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -59,7 +59,7 @@
   }
 
   String _browserPropertyName(String propertyName) {
-    String name = _readCache(propertyName);
+    String$NULLABLE name = _readCache(propertyName);
     if (name is String) return name;
     name = _supportedBrowserPropertyName(propertyName);
     _writeCache(propertyName, name);
@@ -79,7 +79,7 @@
   }
 
   static final _propertyCache = JS('', '{}');
-  static String _readCache(String key) =>
+  static String$NULLABLE _readCache(String key) =>
     JS('String|Null', '#[#]', _propertyCache, key);
   static void _writeCache(String key, String value) {
     JS('void', '#[#] = #', _propertyCache, key, value);
@@ -94,7 +94,8 @@
         replacedMs);
   }
 
-  void _setPropertyHelper(String propertyName, String value, [String priority]) {
+  void _setPropertyHelper(String propertyName, String$NULLABLE value,
+                          [String$NULLABLE priority]) {
     if (value == null) value = '';
     if (priority == null) priority = '';
     JS('void', '#.setProperty(#, #, #)', this, propertyName, value, priority);
@@ -112,7 +113,7 @@
   String get background => this._background;
 
   /** Sets the value of "background" */
-  set background(String value) {
+  set background(String$NULLABLE value) {
     _background = value == null ? '' : value;
   }
   @Returns('String')
@@ -123,7 +124,7 @@
   String get backgroundAttachment => this._backgroundAttachment;
 
   /** Sets the value of "background-attachment" */
-  set backgroundAttachment(String value) {
+  set backgroundAttachment(String$NULLABLE value) {
     _backgroundAttachment = value == null ? '' : value;
   }
   @Returns('String')
@@ -134,7 +135,7 @@
   String get backgroundColor => this._backgroundColor;
 
   /** Sets the value of "background-color" */
-  set backgroundColor(String value) {
+  set backgroundColor(String$NULLABLE value) {
     _backgroundColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -145,7 +146,7 @@
   String get backgroundImage => this._backgroundImage;
 
   /** Sets the value of "background-image" */
-  set backgroundImage(String value) {
+  set backgroundImage(String$NULLABLE value) {
     _backgroundImage = value == null ? '' : value;
   }
   @Returns('String')
@@ -156,7 +157,7 @@
   String get backgroundPosition => this._backgroundPosition;
 
   /** Sets the value of "background-position" */
-  set backgroundPosition(String value) {
+  set backgroundPosition(String$NULLABLE value) {
     _backgroundPosition = value == null ? '' : value;
   }
   @Returns('String')
@@ -167,7 +168,7 @@
   String get backgroundRepeat => this._backgroundRepeat;
 
   /** Sets the value of "background-repeat" */
-  set backgroundRepeat(String value) {
+  set backgroundRepeat(String$NULLABLE value) {
     _backgroundRepeat = value == null ? '' : value;
   }
   @Returns('String')
@@ -178,7 +179,7 @@
   String get border => this._border;
 
   /** Sets the value of "border" */
-  set border(String value) {
+  set border(String$NULLABLE value) {
     _border = value == null ? '' : value;
   }
   @Returns('String')
@@ -189,7 +190,7 @@
   String get borderBottom => this._borderBottom;
 
   /** Sets the value of "border-bottom" */
-  set borderBottom(String value) {
+  set borderBottom(String$NULLABLE value) {
     _borderBottom = value == null ? '' : value;
   }
   @Returns('String')
@@ -200,7 +201,7 @@
   String get borderBottomColor => this._borderBottomColor;
 
   /** Sets the value of "border-bottom-color" */
-  set borderBottomColor(String value) {
+  set borderBottomColor(String$NULLABLE value) {
     _borderBottomColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -211,7 +212,7 @@
   String get borderBottomStyle => this._borderBottomStyle;
 
   /** Sets the value of "border-bottom-style" */
-  set borderBottomStyle(String value) {
+  set borderBottomStyle(String$NULLABLE value) {
     _borderBottomStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -222,7 +223,7 @@
   String get borderBottomWidth => this._borderBottomWidth;
 
   /** Sets the value of "border-bottom-width" */
-  set borderBottomWidth(String value) {
+  set borderBottomWidth(String$NULLABLE value) {
     _borderBottomWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -233,7 +234,7 @@
   String get borderCollapse => this._borderCollapse;
 
   /** Sets the value of "border-collapse" */
-  set borderCollapse(String value) {
+  set borderCollapse(String$NULLABLE value) {
     _borderCollapse = value == null ? '' : value;
   }
   @Returns('String')
@@ -244,7 +245,7 @@
   String get borderColor => this._borderColor;
 
   /** Sets the value of "border-color" */
-  set borderColor(String value) {
+  set borderColor(String$NULLABLE value) {
     _borderColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -255,7 +256,7 @@
   String get borderLeft => this._borderLeft;
 
   /** Sets the value of "border-left" */
-  set borderLeft(String value) {
+  set borderLeft(String$NULLABLE value) {
     _borderLeft = value == null ? '' : value;
   }
   @Returns('String')
@@ -266,7 +267,7 @@
   String get borderLeftColor => this._borderLeftColor;
 
   /** Sets the value of "border-left-color" */
-  set borderLeftColor(String value) {
+  set borderLeftColor(String$NULLABLE value) {
     _borderLeftColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -277,7 +278,7 @@
   String get borderLeftStyle => this._borderLeftStyle;
 
   /** Sets the value of "border-left-style" */
-  set borderLeftStyle(String value) {
+  set borderLeftStyle(String$NULLABLE value) {
     _borderLeftStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -288,7 +289,7 @@
   String get borderLeftWidth => this._borderLeftWidth;
 
   /** Sets the value of "border-left-width" */
-  set borderLeftWidth(String value) {
+  set borderLeftWidth(String$NULLABLE value) {
     _borderLeftWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -299,7 +300,7 @@
   String get borderRight => this._borderRight;
 
   /** Sets the value of "border-right" */
-  set borderRight(String value) {
+  set borderRight(String$NULLABLE value) {
     _borderRight = value == null ? '' : value;
   }
   @Returns('String')
@@ -310,7 +311,7 @@
   String get borderRightColor => this._borderRightColor;
 
   /** Sets the value of "border-right-color" */
-  set borderRightColor(String value) {
+  set borderRightColor(String$NULLABLE value) {
     _borderRightColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -321,7 +322,7 @@
   String get borderRightStyle => this._borderRightStyle;
 
   /** Sets the value of "border-right-style" */
-  set borderRightStyle(String value) {
+  set borderRightStyle(String$NULLABLE value) {
     _borderRightStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -332,7 +333,7 @@
   String get borderRightWidth => this._borderRightWidth;
 
   /** Sets the value of "border-right-width" */
-  set borderRightWidth(String value) {
+  set borderRightWidth(String$NULLABLE value) {
     _borderRightWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -343,7 +344,7 @@
   String get borderSpacing => this._borderSpacing;
 
   /** Sets the value of "border-spacing" */
-  set borderSpacing(String value) {
+  set borderSpacing(String$NULLABLE value) {
     _borderSpacing = value == null ? '' : value;
   }
   @Returns('String')
@@ -354,7 +355,7 @@
   String get borderStyle => this._borderStyle;
 
   /** Sets the value of "border-style" */
-  set borderStyle(String value) {
+  set borderStyle(String$NULLABLE value) {
     _borderStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -365,7 +366,7 @@
   String get borderTop => this._borderTop;
 
   /** Sets the value of "border-top" */
-  set borderTop(String value) {
+  set borderTop(String$NULLABLE value) {
     _borderTop = value == null ? '' : value;
   }
   @Returns('String')
@@ -376,7 +377,7 @@
   String get borderTopColor => this._borderTopColor;
 
   /** Sets the value of "border-top-color" */
-  set borderTopColor(String value) {
+  set borderTopColor(String$NULLABLE value) {
     _borderTopColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -387,7 +388,7 @@
   String get borderTopStyle => this._borderTopStyle;
 
   /** Sets the value of "border-top-style" */
-  set borderTopStyle(String value) {
+  set borderTopStyle(String$NULLABLE value) {
     _borderTopStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -398,7 +399,7 @@
   String get borderTopWidth => this._borderTopWidth;
 
   /** Sets the value of "border-top-width" */
-  set borderTopWidth(String value) {
+  set borderTopWidth(String$NULLABLE value) {
     _borderTopWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -409,7 +410,7 @@
   String get borderWidth => this._borderWidth;
 
   /** Sets the value of "border-width" */
-  set borderWidth(String value) {
+  set borderWidth(String$NULLABLE value) {
     _borderWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -420,7 +421,7 @@
   String get bottom => this._bottom;
 
   /** Sets the value of "bottom" */
-  set bottom(String value) {
+  set bottom(String$NULLABLE value) {
     _bottom = value == null ? '' : value;
   }
   @Returns('String')
@@ -431,7 +432,7 @@
   String get captionSide => this._captionSide;
 
   /** Sets the value of "caption-side" */
-  set captionSide(String value) {
+  set captionSide(String$NULLABLE value) {
     _captionSide = value == null ? '' : value;
   }
   @Returns('String')
@@ -442,7 +443,7 @@
   String get clear => this._clear;
 
   /** Sets the value of "clear" */
-  set clear(String value) {
+  set clear(String$NULLABLE value) {
     _clear = value == null ? '' : value;
   }
   @Returns('String')
@@ -453,7 +454,7 @@
   String get clip => this._clip;
 
   /** Sets the value of "clip" */
-  set clip(String value) {
+  set clip(String$NULLABLE value) {
     _clip = value == null ? '' : value;
   }
   @Returns('String')
@@ -464,7 +465,7 @@
   String get color => this._color;
 
   /** Sets the value of "color" */
-  set color(String value) {
+  set color(String$NULLABLE value) {
     _color = value == null ? '' : value;
   }
   @Returns('String')
@@ -475,7 +476,7 @@
   String get content => this._content;
 
   /** Sets the value of "content" */
-  set content(String value) {
+  set content(String$NULLABLE value) {
     _content = value == null ? '' : value;
   }
   @Returns('String')
@@ -486,7 +487,7 @@
   String get cursor => this._cursor;
 
   /** Sets the value of "cursor" */
-  set cursor(String value) {
+  set cursor(String$NULLABLE value) {
     _cursor = value == null ? '' : value;
   }
   @Returns('String')
@@ -497,7 +498,7 @@
   String get direction => this._direction;
 
   /** Sets the value of "direction" */
-  set direction(String value) {
+  set direction(String$NULLABLE value) {
     _direction = value == null ? '' : value;
   }
   @Returns('String')
@@ -508,7 +509,7 @@
   String get display => this._display;
 
   /** Sets the value of "display" */
-  set display(String value) {
+  set display(String$NULLABLE value) {
     _display = value == null ? '' : value;
   }
   @Returns('String')
@@ -519,7 +520,7 @@
   String get emptyCells => this._emptyCells;
 
   /** Sets the value of "empty-cells" */
-  set emptyCells(String value) {
+  set emptyCells(String$NULLABLE value) {
     _emptyCells = value == null ? '' : value;
   }
   @Returns('String')
@@ -530,7 +531,7 @@
   String get font => this._font;
 
   /** Sets the value of "font" */
-  set font(String value) {
+  set font(String$NULLABLE value) {
     _font = value == null ? '' : value;
   }
   @Returns('String')
@@ -541,7 +542,7 @@
   String get fontFamily => this._fontFamily;
 
   /** Sets the value of "font-family" */
-  set fontFamily(String value) {
+  set fontFamily(String$NULLABLE value) {
     _fontFamily = value == null ? '' : value;
   }
   @Returns('String')
@@ -552,7 +553,7 @@
   String get fontSize => this._fontSize;
 
   /** Sets the value of "font-size" */
-  set fontSize(String value) {
+  set fontSize(String$NULLABLE value) {
     _fontSize = value == null ? '' : value;
   }
   @Returns('String')
@@ -563,7 +564,7 @@
   String get fontStyle => this._fontStyle;
 
   /** Sets the value of "font-style" */
-  set fontStyle(String value) {
+  set fontStyle(String$NULLABLE value) {
     _fontStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -574,7 +575,7 @@
   String get fontVariant => this._fontVariant;
 
   /** Sets the value of "font-variant" */
-  set fontVariant(String value) {
+  set fontVariant(String$NULLABLE value) {
     _fontVariant = value == null ? '' : value;
   }
   @Returns('String')
@@ -585,7 +586,7 @@
   String get fontWeight => this._fontWeight;
 
   /** Sets the value of "font-weight" */
-  set fontWeight(String value) {
+  set fontWeight(String$NULLABLE value) {
     _fontWeight = value == null ? '' : value;
   }
   @Returns('String')
@@ -596,7 +597,7 @@
   String get height => this._height;
 
   /** Sets the value of "height" */
-  set height(String value) {
+  set height(String$NULLABLE value) {
     _height = value == null ? '' : value;
   }
   @Returns('String')
@@ -607,7 +608,7 @@
   String get left => this._left;
 
   /** Sets the value of "left" */
-  set left(String value) {
+  set left(String$NULLABLE value) {
     _left = value == null ? '' : value;
   }
   @Returns('String')
@@ -618,7 +619,7 @@
   String get letterSpacing => this._letterSpacing;
 
   /** Sets the value of "letter-spacing" */
-  set letterSpacing(String value) {
+  set letterSpacing(String$NULLABLE value) {
     _letterSpacing = value == null ? '' : value;
   }
   @Returns('String')
@@ -629,7 +630,7 @@
   String get lineHeight => this._lineHeight;
 
   /** Sets the value of "line-height" */
-  set lineHeight(String value) {
+  set lineHeight(String$NULLABLE value) {
     _lineHeight = value == null ? '' : value;
   }
   @Returns('String')
@@ -640,7 +641,7 @@
   String get listStyle => this._listStyle;
 
   /** Sets the value of "list-style" */
-  set listStyle(String value) {
+  set listStyle(String$NULLABLE value) {
     _listStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -651,7 +652,7 @@
   String get listStyleImage => this._listStyleImage;
 
   /** Sets the value of "list-style-image" */
-  set listStyleImage(String value) {
+  set listStyleImage(String$NULLABLE value) {
     _listStyleImage = value == null ? '' : value;
   }
   @Returns('String')
@@ -662,7 +663,7 @@
   String get listStylePosition => this._listStylePosition;
 
   /** Sets the value of "list-style-position" */
-  set listStylePosition(String value) {
+  set listStylePosition(String$NULLABLE value) {
     _listStylePosition = value == null ? '' : value;
   }
   @Returns('String')
@@ -673,7 +674,7 @@
   String get listStyleType => this._listStyleType;
 
   /** Sets the value of "list-style-type" */
-  set listStyleType(String value) {
+  set listStyleType(String$NULLABLE value) {
     _listStyleType = value == null ? '' : value;
   }
   @Returns('String')
@@ -684,7 +685,7 @@
   String get margin => this._margin;
 
   /** Sets the value of "margin" */
-  set margin(String value) {
+  set margin(String$NULLABLE value) {
     _margin = value == null ? '' : value;
   }
   @Returns('String')
@@ -695,7 +696,7 @@
   String get marginBottom => this._marginBottom;
 
   /** Sets the value of "margin-bottom" */
-  set marginBottom(String value) {
+  set marginBottom(String$NULLABLE value) {
     _marginBottom = value == null ? '' : value;
   }
   @Returns('String')
@@ -706,7 +707,7 @@
   String get marginLeft => this._marginLeft;
 
   /** Sets the value of "margin-left" */
-  set marginLeft(String value) {
+  set marginLeft(String$NULLABLE value) {
     _marginLeft = value == null ? '' : value;
   }
   @Returns('String')
@@ -717,7 +718,7 @@
   String get marginRight => this._marginRight;
 
   /** Sets the value of "margin-right" */
-  set marginRight(String value) {
+  set marginRight(String$NULLABLE value) {
     _marginRight = value == null ? '' : value;
   }
   @Returns('String')
@@ -728,7 +729,7 @@
   String get marginTop => this._marginTop;
 
   /** Sets the value of "margin-top" */
-  set marginTop(String value) {
+  set marginTop(String$NULLABLE value) {
     _marginTop = value == null ? '' : value;
   }
   @Returns('String')
@@ -739,7 +740,7 @@
   String get maxHeight => this._maxHeight;
 
   /** Sets the value of "max-height" */
-  set maxHeight(String value) {
+  set maxHeight(String$NULLABLE value) {
     _maxHeight = value == null ? '' : value;
   }
   @Returns('String')
@@ -750,7 +751,7 @@
   String get maxWidth => this._maxWidth;
 
   /** Sets the value of "max-width" */
-  set maxWidth(String value) {
+  set maxWidth(String$NULLABLE value) {
     _maxWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -761,7 +762,7 @@
   String get minHeight => this._minHeight;
 
   /** Sets the value of "min-height" */
-  set minHeight(String value) {
+  set minHeight(String$NULLABLE value) {
     _minHeight = value == null ? '' : value;
   }
   @Returns('String')
@@ -772,7 +773,7 @@
   String get minWidth => this._minWidth;
 
   /** Sets the value of "min-width" */
-  set minWidth(String value) {
+  set minWidth(String$NULLABLE value) {
     _minWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -783,7 +784,7 @@
   String get outline => this._outline;
 
   /** Sets the value of "outline" */
-  set outline(String value) {
+  set outline(String$NULLABLE value) {
     _outline = value == null ? '' : value;
   }
   @Returns('String')
@@ -794,7 +795,7 @@
   String get outlineColor => this._outlineColor;
 
   /** Sets the value of "outline-color" */
-  set outlineColor(String value) {
+  set outlineColor(String$NULLABLE value) {
     _outlineColor = value == null ? '' : value;
   }
   @Returns('String')
@@ -805,7 +806,7 @@
   String get outlineStyle => this._outlineStyle;
 
   /** Sets the value of "outline-style" */
-  set outlineStyle(String value) {
+  set outlineStyle(String$NULLABLE value) {
     _outlineStyle = value == null ? '' : value;
   }
   @Returns('String')
@@ -816,7 +817,7 @@
   String get outlineWidth => this._outlineWidth;
 
   /** Sets the value of "outline-width" */
-  set outlineWidth(String value) {
+  set outlineWidth(String$NULLABLE value) {
     _outlineWidth = value == null ? '' : value;
   }
   @Returns('String')
@@ -827,7 +828,7 @@
   String get overflow => this._overflow;
 
   /** Sets the value of "overflow" */
-  set overflow(String value) {
+  set overflow(String$NULLABLE value) {
     _overflow = value == null ? '' : value;
   }
   @Returns('String')
@@ -838,7 +839,7 @@
   String get padding => this._padding;
 
   /** Sets the value of "padding" */
-  set padding(String value) {
+  set padding(String$NULLABLE value) {
     _padding = value == null ? '' : value;
   }
   @Returns('String')
@@ -849,7 +850,7 @@
   String get paddingBottom => this._paddingBottom;
 
   /** Sets the value of "padding-bottom" */
-  set paddingBottom(String value) {
+  set paddingBottom(String$NULLABLE value) {
     _paddingBottom = value == null ? '' : value;
   }
   @Returns('String')
@@ -860,7 +861,7 @@
   String get paddingLeft => this._paddingLeft;
 
   /** Sets the value of "padding-left" */
-  set paddingLeft(String value) {
+  set paddingLeft(String$NULLABLE value) {
     _paddingLeft = value == null ? '' : value;
   }
   @Returns('String')
@@ -871,7 +872,7 @@
   String get paddingRight => this._paddingRight;
 
   /** Sets the value of "padding-right" */
-  set paddingRight(String value) {
+  set paddingRight(String$NULLABLE value) {
     _paddingRight = value == null ? '' : value;
   }
   @Returns('String')
@@ -882,7 +883,7 @@
   String get paddingTop => this._paddingTop;
 
   /** Sets the value of "padding-top" */
-  set paddingTop(String value) {
+  set paddingTop(String$NULLABLE value) {
     _paddingTop = value == null ? '' : value;
   }
   @Returns('String')
@@ -893,7 +894,7 @@
   String get pageBreakAfter => this._pageBreakAfter;
 
   /** Sets the value of "page-break-after" */
-  set pageBreakAfter(String value) {
+  set pageBreakAfter(String$NULLABLE value) {
     _pageBreakAfter = value == null ? '' : value;
   }
   @Returns('String')
@@ -904,7 +905,7 @@
   String get pageBreakBefore => this._pageBreakBefore;
 
   /** Sets the value of "page-break-before" */
-  set pageBreakBefore(String value) {
+  set pageBreakBefore(String$NULLABLE value) {
     _pageBreakBefore = value == null ? '' : value;
   }
   @Returns('String')
@@ -915,7 +916,7 @@
   String get pageBreakInside => this._pageBreakInside;
 
   /** Sets the value of "page-break-inside" */
-  set pageBreakInside(String value) {
+  set pageBreakInside(String$NULLABLE value) {
     _pageBreakInside = value == null ? '' : value;
   }
   @Returns('String')
@@ -926,7 +927,7 @@
   String get position => this._position;
 
   /** Sets the value of "position" */
-  set position(String value) {
+  set position(String$NULLABLE value) {
     _position = value == null ? '' : value;
   }
   @Returns('String')
@@ -937,7 +938,7 @@
   String get quotes => this._quotes;
 
   /** Sets the value of "quotes" */
-  set quotes(String value) {
+  set quotes(String$NULLABLE value) {
     _quotes = value == null ? '' : value;
   }
   @Returns('String')
@@ -948,7 +949,7 @@
   String get right => this._right;
 
   /** Sets the value of "right" */
-  set right(String value) {
+  set right(String$NULLABLE value) {
     _right = value == null ? '' : value;
   }
   @Returns('String')
@@ -959,7 +960,7 @@
   String get tableLayout => this._tableLayout;
 
   /** Sets the value of "table-layout" */
-  set tableLayout(String value) {
+  set tableLayout(String$NULLABLE value) {
     _tableLayout = value == null ? '' : value;
   }
   @Returns('String')
@@ -970,7 +971,7 @@
   String get textAlign => this._textAlign;
 
   /** Sets the value of "text-align" */
-  set textAlign(String value) {
+  set textAlign(String$NULLABLE value) {
     _textAlign = value == null ? '' : value;
   }
   @Returns('String')
@@ -981,7 +982,7 @@
   String get textDecoration => this._textDecoration;
 
   /** Sets the value of "text-decoration" */
-  set textDecoration(String value) {
+  set textDecoration(String$NULLABLE value) {
     _textDecoration = value == null ? '' : value;
   }
   @Returns('String')
@@ -992,7 +993,7 @@
   String get textIndent => this._textIndent;
 
   /** Sets the value of "text-indent" */
-  set textIndent(String value) {
+  set textIndent(String$NULLABLE value) {
     _textIndent = value == null ? '' : value;
   }
   @Returns('String')
@@ -1003,7 +1004,7 @@
   String get textTransform => this._textTransform;
 
   /** Sets the value of "text-transform" */
-  set textTransform(String value) {
+  set textTransform(String$NULLABLE value) {
     _textTransform = value == null ? '' : value;
   }
   @Returns('String')
@@ -1014,7 +1015,7 @@
   String get top => this._top;
 
   /** Sets the value of "top" */
-  set top(String value) {
+  set top(String$NULLABLE value) {
     _top = value == null ? '' : value;
   }
   @Returns('String')
@@ -1025,7 +1026,7 @@
   String get unicodeBidi => this._unicodeBidi;
 
   /** Sets the value of "unicode-bidi" */
-  set unicodeBidi(String value) {
+  set unicodeBidi(String$NULLABLE value) {
     _unicodeBidi = value == null ? '' : value;
   }
   @Returns('String')
@@ -1036,7 +1037,7 @@
   String get verticalAlign => this._verticalAlign;
 
   /** Sets the value of "vertical-align" */
-  set verticalAlign(String value) {
+  set verticalAlign(String$NULLABLE value) {
     _verticalAlign = value == null ? '' : value;
   }
   @Returns('String')
@@ -1047,7 +1048,7 @@
   String get visibility => this._visibility;
 
   /** Sets the value of "visibility" */
-  set visibility(String value) {
+  set visibility(String$NULLABLE value) {
     _visibility = value == null ? '' : value;
   }
   @Returns('String')
@@ -1058,7 +1059,7 @@
   String get whiteSpace => this._whiteSpace;
 
   /** Sets the value of "white-space" */
-  set whiteSpace(String value) {
+  set whiteSpace(String$NULLABLE value) {
     _whiteSpace = value == null ? '' : value;
   }
   @Returns('String')
@@ -1069,7 +1070,7 @@
   String get width => this._width;
 
   /** Sets the value of "width" */
-  set width(String value) {
+  set width(String$NULLABLE value) {
     _width = value == null ? '' : value;
   }
   @Returns('String')
@@ -1080,7 +1081,7 @@
   String get wordSpacing => this._wordSpacing;
 
   /** Sets the value of "word-spacing" */
-  set wordSpacing(String value) {
+  set wordSpacing(String$NULLABLE value) {
     _wordSpacing = value == null ? '' : value;
   }
   @Returns('String')
@@ -1091,7 +1092,7 @@
   String get zIndex => this._zIndex;
 
   /** Sets the value of "z-index" */
-  set zIndex(String value) {
+  set zIndex(String$NULLABLE value) {
     _zIndex = value == null ? '' : value;
   }
   @Returns('String')
@@ -1119,7 +1120,7 @@
   }
 
 
-  void _setAll(String propertyName, String value) {
+  void _setAll(String propertyName, String$NULLABLE value) {
     value = value == null ? '' : value;
     for (Element element in _elementIterable) {
       JS('void', '#.style[#] = #', element, propertyName, value);
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 3fd0d4e..67917c5 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -14,7 +14,7 @@
     : _childElements = element._children,
       _element = element;
 
-  bool contains(Object element) => _childElements.contains(element);
+  bool contains(Object$NULLABLE element) => _childElements.contains(element);
 
 
   bool get isEmpty {
@@ -55,11 +55,11 @@
     }
   }
 
-  void sort([int compare(Element a, Element b)]) {
+  void sort([int compare(Element a, Element b)$NULLABLE]) {
     throw new UnsupportedError('Cannot sort element lists');
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random$NULLABLE random]) {
     throw new UnsupportedError('Cannot shuffle element lists');
   }
 
@@ -81,7 +81,7 @@
     for (var e in removed) e.remove();
   }
 
-  void fillRange(int start, int end, [Element fillValue]) {
+  void fillRange(int start, int end, [Element$NULLABLE fillValue]) {
     throw new UnimplementedError();
   }
 
@@ -98,7 +98,7 @@
     throw new UnimplementedError();
   }
 
-  bool remove(Object object) {
+  bool remove(Object$NULLABLE object) {
     if (object is Element) {
       Element element = object;
       if (identical(element.parentNode, _element)) {
@@ -280,11 +280,11 @@
     throw new UnsupportedError('Cannot modify list');
   }
 
-  void sort([Comparator<E> compare]) {
+  void sort([Comparator<E>$NULLABLE compare]) {
     throw new UnsupportedError('Cannot sort list');
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random$NULLABLE random]) {
     throw new UnsupportedError('Cannot shuffle list');
   }
 
@@ -764,7 +764,7 @@
    * * [Pseudo-elements](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements)
    *   from MDN.
    */
-  CssStyleDeclaration getComputedStyle([String pseudoElement]) {
+  CssStyleDeclaration getComputedStyle([String$NULLABLE pseudoElement]) {
     if (pseudoElement == null) {
       pseudoElement = '';
     }
@@ -1319,7 +1319,7 @@
 
       // Workaround for Safari bug. Was also previously Chrome bug 229142
       // - URIs are not resolved in new doc.
-      BaseElement base = _parseDocument.createElement('base');
+      BaseElement base = _parseDocument.createElement('base') $#NULLSAFECAST(as BaseElement);
       base.href = document.baseUri;
       _parseDocument.head.append(base);
     }
diff --git a/tools/dom/templates/html/impl/impl_Geolocation.darttemplate b/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
index 456850e..a908f1d 100644
--- a/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
@@ -6,8 +6,8 @@
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  Future<Geoposition> getCurrentPosition({bool enableHighAccuracy,
-      Duration timeout, Duration maximumAge}) {
+  Future<Geoposition> getCurrentPosition({bool$NULLABLE enableHighAccuracy,
+      Duration$NULLABLE timeout, Duration$NULLABLE maximumAge}) {
     var options = {};
     if (enableHighAccuracy != null) {
       options['enableHighAccuracy'] = enableHighAccuracy;
@@ -34,8 +34,8 @@
     return completer.future;
   }
 
-  Stream<Geoposition> watchPosition({bool enableHighAccuracy,
-      Duration timeout, Duration maximumAge}) {
+  Stream<Geoposition> watchPosition({bool$NULLABLE enableHighAccuracy,
+      Duration$NULLABLE timeout, Duration$NULLABLE maximumAge}) {
 
     var options = {};
     if (enableHighAccuracy != null) {
diff --git a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
index c935546..409055d 100644
--- a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
@@ -84,9 +84,10 @@
       _toDataUrl(type, quality);
 
   @JSName('toBlob')
-  void _toBlob(BlobCallback callback, String type, [Object arguments]) native;
+  void _toBlob(BlobCallback callback, String type,
+      [Object$NULLABLE arguments]) native;
 
-  Future<Blob> toBlob(String type, [Object arguments]) {
+  Future<Blob> toBlob(String type, [Object$NULLABLE arguments]) {
     var completer = new Completer<Blob>();
       _toBlob((value) {
         completer.complete(value);
diff --git a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
index 3ee9b43..9f2cb3f 100644
--- a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
@@ -27,7 +27,7 @@
     ResetButtonInputElement,
     ButtonInputElement {
 
-  factory InputElement({String type}) {
+  factory InputElement({String$NULLABLE type}) {
     InputElement e = document.createElement("input");
     if (type != null) {
       try {
@@ -127,7 +127,7 @@
 
   String dirName;
 
-  Element get list;
+  Element$NULLABLE get list;
 
   /// Returns true if this input type is supported on the current platform.
   static bool get supported {
@@ -143,7 +143,7 @@
 
   String dirName;
 
-  Element get list;
+  Element$NULLABLE get list;
 }
 
 /**
@@ -158,7 +158,7 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  Element get list;
+  Element$NULLABLE get list;
 
   /// Returns true if this input type is supported on the current platform.
   static bool get supported {
@@ -181,7 +181,7 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  Element get list;
+  Element$NULLABLE get list;
 
   /// Returns true if this input type is supported on the current platform.
   static bool get supported {
@@ -205,7 +205,7 @@
 
   bool autofocus;
 
-  Element get list;
+  Element$NULLABLE get list;
 
   int maxLength;
 
@@ -239,7 +239,7 @@
  */
 abstract class RangeInputElementBase implements InputElementBase {
 
-  Element get list;
+  Element$NULLABLE get list;
 
   String max;
 
diff --git a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
index d4f0203..46a1562 100644
--- a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
@@ -32,7 +32,7 @@
                 bool subtree,
                 bool attributeOldValue,
                 bool characterDataOldValue,
-                List<String> attributeFilter}) {
+                List<String>$NULLABLE attributeFilter}) {
 
     // Parse options into map of known type.
     var parsedOptions = _createDict();
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index fef9633..cfef9ae 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -92,7 +92,7 @@
     return result;
   }
 
-  bool remove(Object object) {
+  bool remove(Object$NULLABLE object) {
     if (object is! Node) return false;
     Node node = object;
     if (!identical(_this, node.parentNode)) return false;
@@ -136,11 +136,11 @@
 
   // TODO(jacobr): this could be implemented for child node lists.
   // The exception we throw here is misleading.
-  void sort([Comparator<Node> compare]) {
+  void sort([Comparator<Node>$NULLABLE compare]) {
     throw new UnsupportedError("Cannot sort Node list");
   }
 
-  void shuffle([Random random]) {
+  void shuffle([Random$NULLABLE random]) {
     throw new UnsupportedError("Cannot shuffle Node list");
   }
 
@@ -150,7 +150,7 @@
     throw new UnsupportedError("Cannot setRange on Node list");
   }
 
-  void fillRange(int start, int end, [Node fill]) {
+  void fillRange(int start, int end, [Node$NULLABLE fill]) {
     throw new UnsupportedError("Cannot fillRange on Node list");
   }
 
diff --git a/tools/dom/templates/html/impl/impl_Storage.darttemplate b/tools/dom/templates/html/impl/impl_Storage.darttemplate
index 5cd76ee..ba1bf8b 100644
--- a/tools/dom/templates/html/impl/impl_Storage.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Storage.darttemplate
@@ -37,11 +37,11 @@
   }
 
   // TODO(nweiz): update this when maps support lazy iteration
-  bool containsValue(Object value) => values.any((e) => e == value);
+  bool containsValue(Object$NULLABLE value) => values.any((e) => e == value);
 
-  bool containsKey(Object key) => _getItem(key) != null;
+  bool containsKey(Object$NULLABLE key) => _getItem(key) != null;
 
-  String operator [](Object key) => _getItem(key);
+  String$NULLABLE operator [](Object$NULLABLE key) => _getItem(key $#NULLSAFECAST(as String));
 
   void operator []=(String key, String value) { _setItem(key, value); }
 
@@ -50,7 +50,7 @@
     return this[key];
   }
 
-  String remove(Object key) {
+  String$NULLABLE remove(Object$NULLABLE key) {
     final value = this[key];
     _removeItem(key);
     return value;
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index 36af958..97932b2 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -73,7 +73,7 @@
    * * [request]
    */
   static Future<String> getString(String url,
-      {bool withCredentials, void onProgress(ProgressEvent e)}) {
+      {bool$NULLABLE withCredentials, void onProgress(ProgressEvent e)$NULLABLE}) {
     return request(url, withCredentials: withCredentials,
         onProgress: onProgress).then((HttpRequest xhr) => xhr.responseText);
   }
@@ -132,7 +132,7 @@
    *
    * By default `request` will perform an HTTP GET request, but a different
    * method (`POST`, `PUT`, `DELETE`, etc) can be used by specifying the
-   * [method] parameter. (See also [HttpRequest.postFormData] for `POST` 
+   * [method] parameter. (See also [HttpRequest.postFormData] for `POST`
    * requests only.
    *
    * The Future is completed when the response is available.
@@ -141,8 +141,8 @@
    * [Blob], [Document], [String], or [FormData] along with the HttpRequest.
    *
    * If specified, [responseType] sets the desired response format for the
-   * request. By default it is [String], but can also be 'arraybuffer', 'blob', 
-   * 'document', 'json', or 'text'. See also [HttpRequest.responseType] 
+   * request. By default it is [String], but can also be 'arraybuffer', 'blob',
+   * 'document', 'json', or 'text'. See also [HttpRequest.responseType]
    * for more information.
    *
    * The [withCredentials] parameter specified that credentials such as a cookie
@@ -225,7 +225,7 @@
       // redirect case will be handled by the browser before it gets to us,
       // so if we see it we should pass it through to the user.
       var unknownRedirect = xhr.status > 307 && xhr.status < 400;
-      
+
       if (accepted || fileUri || notModified || unknownRedirect) {
         completer.complete(xhr);
       } else {
diff --git a/tools/test.dart b/tools/test.dart
index 1d982f7..aa8e9f6 100755
--- a/tools/test.dart
+++ b/tools/test.dart
@@ -10,6 +10,7 @@
 import 'dart:io';
 
 import 'package:args/args.dart';
+import 'package:smith/smith.dart';
 
 import 'bots/results.dart';
 
@@ -78,56 +79,6 @@
   return processResult;
 }
 
-/// Returns the operating system of a builder.
-String systemOfBuilder(String builder) {
-  return builder.split("-").firstWhere(
-      (component) => ["linux", "mac", "win"].contains(component),
-      orElse: () => null);
-}
-
-/// Returns the product mode of a builder.
-String modeOfBuilder(String builder) {
-  return builder.split("-").firstWhere(
-      (component) => ["debug", "product", "release"].contains(component),
-      orElse: () => null);
-}
-
-/// Returns the machine architecture of a builder.
-String archOfBuilder(String builder) {
-  return builder.split("-").firstWhere(
-      (component) => [
-            "arm",
-            "arm64",
-            "ia32",
-            "simarm",
-            "simarm64",
-            "x64",
-          ].contains(component),
-      orElse: () => null);
-}
-
-/// Returns the runtime environment of a builder.
-String runtimeOfBuilder(String builder) {
-  return builder.split("-").firstWhere(
-      (component) => ["chrome", "d8", "edge", "firefox", "ie11", "safari"]
-          .contains(component),
-      orElse: () => null);
-}
-
-/// Expands a variable in a test matrix step command.
-String expandVariable(String string, String variable, String value) {
-  return string.replaceAll("\${$variable}", value ?? "");
-}
-
-/// Expands all variables in a test matrix step command.
-String expandVariables(String string, String builder) {
-  string = expandVariable(string, "system", systemOfBuilder(builder));
-  string = expandVariable(string, "mode", modeOfBuilder(builder));
-  string = expandVariable(string, "arch", archOfBuilder(builder));
-  string = expandVariable(string, "runtime", runtimeOfBuilder(builder));
-  return string;
-}
-
 /// Finds the branch of a builder given the list of branches.
 String branchOfBuilder(String builder, List<String> branches) {
   return branches.where((branch) => branch != "master").firstWhere(
@@ -137,52 +88,36 @@
 
 /// Finds the named configuration to test according to the test matrix
 /// information and the command line options.
-Map<String, Set<String>> resolveNamedConfigurations(
-    List<String> branches,
-    List<dynamic> buildersConfigurations,
+Map<String, Set<Builder>> resolveNamedConfigurations(
+    TestMatrix testMatrix,
     String requestedBranch,
     List<String> requestedNamedConfigurations,
     String requestedBuilder) {
-  final testedConfigurations = <String, Set<String>>{};
+  assert(requestedBranch != null);
+  final testedConfigurations = <String, Set<Builder>>{};
   var foundBuilder = false;
-  for (final builderConfiguration in buildersConfigurations) {
-    for (final builder in builderConfiguration["builders"]) {
-      if (requestedBuilder != null && builder != requestedBuilder) {
+  for (final builder in testMatrix.builders) {
+    if (requestedBuilder != null && builder.name != requestedBuilder) {
+      continue;
+    }
+    final branch = branchOfBuilder(builder.name, testMatrix.branches);
+    if (branch != requestedBranch) {
+      if (requestedBuilder == null) {
         continue;
       }
-      final branch = branchOfBuilder(builder, branches);
-      if (branch != requestedBranch) {
-        if (requestedBuilder == null) {
-          continue;
-        }
-        stderr.writeln("error: Builder $requestedBuilder is on branch $branch "
-            "rather than $requestedBranch");
-        stderr.writeln("error: To compare with that branch, use: -B $branch");
-        return null;
-      }
-      foundBuilder = true;
-      final steps = (builderConfiguration["steps"] as List).cast<Map>();
-      final testSteps = steps
-          .where((step) =>
-              !step.containsKey("script") || step["script"] == "tools/test.py")
-          .toList();
-      for (final step in testSteps) {
-        final arguments = step["arguments"]
-            .map((argument) => expandVariables(argument, builder))
-            .toList();
-        final namedConfiguration = arguments
-            .firstWhere((argument) => (argument as String).startsWith("-n"))
-            .substring(2);
-        if (namedConfiguration.contains(",")) {
-          throw "Multiple named configurations in builder configurations: "
-              "are currently not supported: '$arguments'";
-        }
-        if (requestedNamedConfigurations.isEmpty ||
-            requestedNamedConfigurations.contains(namedConfiguration)) {
-          testedConfigurations
-              .putIfAbsent(namedConfiguration, () => {})
-              .add(builder);
-        }
+      stderr.writeln("error: Builder $requestedBuilder is on branch $branch "
+          "rather than $requestedBranch");
+      stderr.writeln("error: To compare with that branch, use: -B $branch");
+      return null;
+    }
+    foundBuilder = true;
+    for (final step in builder.steps.where((step) => step.isTestStep)) {
+      final namedConfiguration = step.testedConfiguration.name;
+      if (requestedNamedConfigurations.isEmpty ||
+          requestedNamedConfigurations.contains(namedConfiguration)) {
+        testedConfigurations
+            .putIfAbsent(namedConfiguration, () => {})
+            .add(builder);
       }
     }
   }
@@ -430,22 +365,12 @@
       Platform.script.resolve("../third_party/gsutil/gsutil.py").toFilePath();
 
   // Load the test matrix.
-  final scriptPath = Platform.script.toFilePath();
-  final testMatrixPath =
-      scriptPath.substring(0, scriptPath.length - "test.dart".length) +
-          "bots/test_matrix.json";
-  final testMatrix = jsonDecode(await new File(testMatrixPath).readAsString());
-  final branches = (testMatrix["branches"] as List).cast<String>();
-  final buildersConfigurations =
-      testMatrix["builder_configurations"] as List<dynamic>;
+  final testMatrixPath = Platform.script.resolve("bots/test_matrix.json");
+  final testMatrix = TestMatrix.fromPath(testMatrixPath.toFilePath());
   // Determine what named configuration to run and which builders to download
   // existing results from.
-  final testedConfigurations = resolveNamedConfigurations(
-      branches,
-      buildersConfigurations,
-      options["branch"],
-      requestedNamedConfigurations,
-      requestedBuilder);
+  final testedConfigurations = resolveNamedConfigurations(testMatrix,
+      options["branch"], requestedNamedConfigurations, requestedBuilder);
   if (testedConfigurations == null) {
     // No valid configuration could be found. The error has already been
     // reported by [resolveConfigurations].
@@ -459,8 +384,8 @@
   for (final namedConfiguration in namedConfigurations) {
     final testedBuilders = testedConfigurations[namedConfiguration];
     final onWhichBuilders = testedBuilders.length == 1
-        ? "builder ${testedBuilders.single}"
-        : "builders${testedBuilders.map((b) => "\n  $b").join()}";
+        ? "builder ${testedBuilders.single.name}"
+        : "builders${testedBuilders.map((b) => "\n  ${b.name}").join()}";
     if (localConfiguration != null) {
       print("Testing named configuration $localConfiguration "
           "compared with configuration ${namedConfiguration} "
@@ -487,28 +412,30 @@
     var downloadNumber = 0;
     // Download the previous results and flakiness info from cloud storage.
     for (final builder in builders) {
+      final builderName = builder.name;
       if (needsMerge) {
         previousFileName = "previous-$downloadNumber.json";
         flakyFileName = "flaky-$downloadNumber.json";
         downloadNumber++;
       }
-      print("Finding build on builder $builder to compare with...");
+      print("Finding build on builder $builderName to compare with...");
       // Use the buildbucket API to search for builds of the right commit.
       final buildSearchResult =
-          await searchForApproximateBuild(builder, commit);
+          await searchForApproximateBuild(builderName, commit);
       if (buildSearchResult.commit != commit) {
         print("Warning: Using commit ${buildSearchResult.commit} "
-            "as baseline instead of $commit for $builder");
-        inexactBuilds[builder] = buildSearchResult.commit;
+            "as baseline instead of $commit for $builderName");
+        inexactBuilds[builderName] = buildSearchResult.commit;
       }
       final buildNumber = buildSearchResult.build.toString();
-      print("Downloading results from builder $builder build $buildNumber...");
+      print("Downloading results from builder $builderName "
+          "build $buildNumber...");
       tasks.add(cpGsutil(
-          buildFileCloudPath(builder, buildNumber, "results.json"),
+          buildFileCloudPath(builderName, buildNumber, "results.json"),
           "${outDirectory.path}/$previousFileName"));
       if (!options["report-flakes"]) {
         tasks.add(cpGsutil(
-            buildFileCloudPath(builder, buildNumber, "flaky.json"),
+            buildFileCloudPath(builderName, buildNumber, "flaky.json"),
             "${outDirectory.path}/$flakyFileName"));
       }
     }
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index dd990c8..92c1921 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -115,9 +115,6 @@
       "--no-link-platform",
       "--output=" + rebase_path(output),
     ]
-    if (use_nnbd) {
-      args += [ "--enable-experiment=non-nullable" ]
-    }
     if (dart_platform_bytecode) {
       args += [
         "--gen-bytecode",
@@ -150,10 +147,6 @@
                 "--snapshot-depfile=$abs_depfile",
               ] + snapshot_vm_args
 
-    if (use_nnbd) {
-      vm_args += [ "--enable-experiment=non-nullable" ]
-    }
-
     if (dart_snapshot_kind == "kernel") {
       vm_args += [ "--snapshot-kind=kernel" ]
       assert(training_args != "", "Ignoring unused argument")
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index e25fb85..fd63749 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -115,9 +115,6 @@
           "--no-embed-sources",
           "--output=" + rebase_path(output),
         ]
-    if (use_nnbd) {
-      args += [ "--enable-experiment=non-nullable" ]
-    }
     args += [ scheme + ":///pkg/vm/bin/kernel_service.dart" ]
     if (dart_platform_bytecode) {
       args += [